网站大量收购独家精品文档,联系QQ:2885784924

理解信号与变量并行语句与顺序语句.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VHDL:理解信号与变量、并行语句与顺序语句 初学VHDL,对一些问题总是感到困惑。比如,同样的赋值语句,在什么场合是并行的,什么时候又是顺序的?信号与变量有什么区别,为什么在PROCESS 里,对信号赋值的结果要等到进程挂起才起作用,而变量赋值却立刻起作用?其实,从语句产生的电路这个角度,可以更深刻地理解这些问题,下面是我自己摸索的一些理解方法,有不妥之处请大虾们指正! 1、赋值语句。 ? ? 同样a = b的赋值语句,会形成什么电路,起关键作用的是敏感信号。 ? ? a) 如果a = b是在进程之外,那么隐含的敏感信号就是b,那么,这个赋值语句就形成一条连线。 ? ? b) 如果是在一个同步进程中,如if (rising_edge(CLK)) then a = b,这时候,就会形成一个触发器,因为敏感信号是时钟边沿。 ? ?c) 如果敏感信号是一个电平信号,那么会形成一个锁存器。如一个不完整的if条件:if (cond = 1) then a = b; 2、并行语句和顺序语句。 ? ? 从形成的电路的角度,并行语句最终会有两种形式: ? ? a) 并联或不相联的逻辑门或组合电路。因为是并联或不相联的,当然是同时执行,这个好理解。 ? ? b) 由同一个时钟边沿驱动的D触发器,不论D触发器之间是并联、串联或者不相连的。为什么呢?因为触发器是在同一个时钟边沿同时翻转的,也就是同时执行,所以本质上就是并行。 ? ? 顺序语句只有一种情况,就是形成串联的逻辑门或组合电路。 3、信号与变量有什么不同?为什么信号赋值要等到进程挂起生效,变量赋值却立刻生效? ? ? 其实,了解了上一点并行语句和顺序语句所生成的电路,这个问题就好理解了。因为在同步进程里的并行语句,大多是形成b的情况,就是多个由同一时钟驱动的触发 器。由于从触发器的输入到翻转、输出需要一定的延时,这个延时基本就是进程执行完毕的时间,所以,触发器翻转后的输出在同一个时钟边沿中是看不到的,因为 它还没翻转过来呢。这就是信号赋值要等到进程挂起才生效的原因。 ? ? 那为什么变量赋值却能立刻生效呢?这是因为,变量其实是为了帮助在同步进程中生成一些逻辑门或组合电路用的。看一看代码:var1 := not i1; var2 := var1 and i2 ; sig = var2; 生成的RTL,就会看到,两个变量赋值语句其实生成了一个非门、一个与门。而且,输入信号i1和i2到var2这段是个组合电路,是不受时钟边沿控制的, 而到信号赋值语句sig = var2,才形成一个D触发器。所以,这两个变量赋值语句生成了一个串联的非门和与门,那当然var2取到的是var1赋值后的值了。 ? ? 最后顺便提一下为什么变量必须只能在进程内可见,我猜可能是为了防止在同步进程中输出异步信号,造成混乱吧。因为如果变量是外部可见的,如上面的 var2,那么var2的值就可以异步输出到进程外了。所以限制变量只能进程内可见后,要输出变量的值就只能赋值给一个信号,在同步进程中,就是加了一个 触发器了。 VHDL的并行语句用来描述一组并发行为,它是并发执行的,与程序的书写顺序无关。 进程语句 begin 进程语句包含在结构体中,一个结构体可以有多个进程语句,多个进程语句间是并行的,并可访问结构体或实体中定义的信号。因此进程语句称为并行描述语句。 进行语句结构内部所有语句都是顺序执行的 进程语句的启动是由process后敏感信号表中所标明的敏感信号触发来的。 各进程间的通信是由信号来传递的 语法如下: 标记: process(敏感信号表) ????????????????????????? 变量说明语句; begin ?????????????????????????? 一组顺序语句; end process 标记; 标记:为进程标号 敏感信号表:是进程用来读取所有敏感信号(包括端口)的列表。 变量说明:主要包括变量的数据类型说明、子程序说明等 从begin到end process之间是一组顺序执行语句。 敏感信号表 所谓敏感信号表:就是用来存放敏感信号的列表。在进程语句中,敏感信号指那些发生改变后能引起进程语句执行的信号。敏感信号表中可以使用一个或多个信号,当其中一个或多个信号值改变时,就在进程内部引起语句执行。敏感信号表也可忽略,但程序中必须有其他形式的敏感信号激励。例如wait、wait for、wait until和wait on。 进程语句的启动 在VHDL语言中,进程有两种工作状态:等待和执行。当敏感信号表中的信号没有变化时,进程处于等待状态;当敏感信号表中的信号有变化时,进程处于执行状态 进程语句的同步 同一个结构体中不仅可以有多个进程存在,同一个结构体中的多个进程还可以同步。VH

文档评论(0)

kabudou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档