- 1、本文档共118页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
通过一些简单典型的VHDL设计示例来引出相关的VHDL语言现象和语句规则,并加以说明,从而简化VHDL语法学习难度。 从一些简单电路设计示例及相应的VHDL表述,对表述进行详细解释从而掌握VHDL程序设计基本结构和设计特点。 首先我们组合逻辑电路中简单的多路选择器件的VHDL描述来引出VHDL语法特点。 本章结束!!! 将某信号定义为STD_LOGIC数据类型,将该数据类型中的元素’Z’赋值给这个信号来获得三态控制门电路,一个’Z’表示一个逻辑位,但是要注意:‘z’在综合的时候是一个不确定的值,不同综合器可能给出不同的结果,因此VHDL综合前行为仿真和综合后功能仿真结果可能会有所不同,还要注意VHDL对关键字不区分大小写,但是把表示高阻态的’Z’值赋值给一个数据类型为STD_LOGIC的变量或者信号时, ’Z’必须是大写。在以原理图为顶层设计的电路中使用三态门比较简单,只需直接调用三态门元件即可。 用INOUT模式设计双向端口也必须考虑三态的使用,需要考虑端口的三态控制。双向端口在完成输入功能时,必须使原来呈输出模式的端口呈高阻态,否则,待输入的外部数据势必会与端口处原有电平发生”线与“,导致无法将外部数据正确读入。 比较例3-36和例3-37两个双向端口的VHDL设计实例。 两个例子q都定义为双向端口,x定义为三态控制输出口。 例3-36利用q的输入功能将q端数据读入并传给X,没有将q端口设置成高阻态输出,即执行语句X=“ZZZZZZZ”从而导致上图综合结果,当control为’0’时X无法得到正确的输出结果,尽管q定义为双向端口,但综合现示它只是一个输出端口,而且在电路中还插入了一个锁存器,它变成了时序电路,因为表面上看IF语句条件完整,但是仅对于x而言,而q只能在control为1时执行赋值命令,为0时没有给出操作说明所以是不完整条件语句。 例3-37增加了语句q=“ZZZZZZZZ”解决了两个重要的问题: 1)q在IF语句中有完整的条件描述,从而没有时序元件的引入 2)q在履行输入功能时将其设定为高阻输出,使q成为真正的双向端口 为了构成芯片内部的总线系统,必须设计三态总线驱动器电路,例3-38和3-39描述了一个8位4通道三态总线驱动器。 例3-38中在一个进程结构中方了4个顺序完成的IF语句,是完整的条件描述语句,输出只有一个信号端output,它有四个赋值源。进程启动时只可能对进程结束前的那一条赋值语句进行赋值操作,忽略其上的所有等价语句,它不能实现设计意图。 例3-39在结构体中使用了4个并列的WHEN-ELSE并行语句,因此可以综合出正确的结果,这是因为结构体中每一条并行语句都等同于一个独立运行的进程,各自独立检测敏感信号ct1 从综合的结果看,除了input0外其余,其余3个8位输入端都悬空,没能用上,这显然是由于恰好安排input0作为进程中output的最后一个激励源的原因。 例3-39表明设计出能产生独立控制的多通道的电路结构,必须使用并行语句结构,所以如果将例3-38中的4个IF语句放在4个并列的进程语句中就能综合出正确结果。 对于同一信号有并行4个赋值源,在实际电路中完全可能产生“线与”,但注意在else后使用了高阻态赋值(other=’Z’),不可能发生”线与”,如果改成(other=’0’),就不一个样了,综合必定无法通过。 从硬件电路系统来看,变量和信号相当于逻辑电路系统中的连线和连线上的信号值,常用相当于电路中的恒定电平,如GND或VCC接口。从行为仿真和VHDL语句功能上看,信号与变量有明显区别,主要表现在接受和保持信号的方式和信号信息保持与传递的区域大小上。信号可以设置传输延时,而变量则不能,变量只能做局部信息的载体只能在所定义的进程中有效,而信号可以作为模块间信息载体,在结构体中各个进程间传递信息。变量的设置一般用来过渡,信息的传输和界面之间的通信靠信号来完成。 信号和变量都能接受赋值,而一般VHDL综合器不理会它们在接受赋值时的传输延时,只有在仿真器才会考虑这一差别 下面我们通过一个示例来具体了解它们的区别。 这是一个典型D触发器的VHDL描述,它使用了变量 综合结果 这是一个典型D触发器的VHDL描述,它使用了变量 两个例子综合结果表明在不完整的条件语句中,单独的变量赋值语句与信号赋值语句都能产生相同的时序电路。 进程中AB定义为信号。 进程中AB定义为变量 例3-25与例3-26的区别就是AB定义了不同的数据对象,综合结果却大不相同。这两个例子对信号与变量的延时特性做了很好的注解。 例3-25中的3个赋值语句都必须在遇到END PROCESS后的δ时刻内执行,所以它们具有近乎并行执行的特性,即语句中A=D1中的A和语句中B=A中的A并非是同一时刻的值,B信号也是一样它们相差一
文档评论(0)