VHDL中信号与变量的区别.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VHDL中信号与变量的区别

由图所示,由于变量的赋值是即使的,相当于直接把d的值赋给q,所以它有一个D触发器构成. ?初学VHDL,对于信号和变量这两个对象非常模糊,故整理下。 ????VHDL提供了SIGNAL和VARIABLE这两种对象来处理非静态数据,同时提供了CONSTANT、GENERIC来处理静态数据。 ????信号可以在PACKAGE、ENTITY和ARCHITECTURE中声明,而变量只能在一段顺序描述代码的内部声明。因此,信号是全局的,而变量通常是局部的。 ????变量的值通常是无法直接传递到PROCESS外部的。如果需要进行变量值的传递,则必须把这个值赋给一个信号,然后由信号将变量值传递到PROCESS外部。另一方面,赋予变量的值使即刻生效的,在此后的代码中,此变量将使用新的变量值。这个一点和PROCESS中使用的信号不同,新的信号值通常只有在整个PROCESS运行完毕后才开始生效。 ????VHDL中的信号代表的是逻辑电路中的“硬”连线,既可以用于电路单元的输入/输出端口,也可以用于电路内部各单元之间的连接。实体的所有端口都默认为信号。信号定义的格式如下: ????SIGNAL name:type [range] [:= nitial_value]; ????有关信号的最重要一点是,当信号用在顺序描述语句(如PROCESS内部)中时,它并不是立即更新的,信号值是在相应的进程、函数或过程完成后才进行更新的。当对信号进行赋初始值的操作是不可综合的,只能用来进行仿真。 ????变量仅用于局部的电路描述。它只能在PROCESS,FUNCTION和PROCEDURE内部使用,而且对它的赋值是立刻生效的,所以新的值可以再下一行中立即使用。仅用于顺序描述代码中。 总结?在一个进程中,如果对一个信号多次赋值,那么,只有最后一个值才是有效的.如果对变量多次赋值,那么每次赋值都是有效的,并且,变量的值在再次赋值之前一直保持不变.? 信号跟硬件有点类似,并且是在进程结束的时候才更新;变量是立即更新的,因此可以影响程序的功能,但变量的好处是仿真速度更快.? 因此,通常情况下,推荐使用信号,可以保证程序的正确性. 3.信号的三个重要的行为特性: (1).信号的赋值需要经过一个δ延时,如执行赋值语句A=D1时,只是启动一个延时为δ的模拟定时器,只有在延时为δ后,A才能被更新,获得D1的赋值。 (2).在进程中,所有赋值语句,包括变量赋值,都必须在一个延时δ中完成(变量在δ延时前即已按顺序完成赋值)。一方面,在进程中的所有信号赋值语句在进程启动的一瞬间立即顺序启动各自的延时为δ的定时器,预备在定时结束后分别执行赋值操作,但另一方面,这种顺序启动的间隔几乎为0,而在顺序执行到END PROCESS语句时,延时才结束。故在进程中的所有信号赋值操作几乎在同时完成赋值(即令赋值对象的值发生更新)。 (3).当在进程中存在同一信号有多个赋值源(即对同一信号发生多次赋值)时,实际完成赋值,即赋值对象的值发生更新的信号是最接近END PROCESS语句的信号! 综上所述:由于进程中的顺序赋值部分没有时间的流逝,所以在顺序语句部分,无论有多少语句,都必须在到达END PROCESS语句时,δ延时才能发生,模拟器时钟才能向前推进。 如:process(clk) if clk’event and clk=’1’ then A=D1; B=A; ?end process; 以上二个赋值语句必须在遇到END PROCESS后的δ时刻内执行,在实际的运行中,A被更新的值是上一个时钟周期的D1(即当前时钟上升沿以前的值),B被更新的值是上一个时钟周期的A。

文档评论(0)

yaobanwd + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档