- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 vhdl时间控制和赋值语句
1 (3) 边沿触发事件控制的第三种语法格式: @ (事件表达式1 or 事件表达式2 or ……or 事件表达式n ) 行为语句; 在仿真进程遇到这种格式的边沿触发事件控制语句时如果所有的触发事件都没有发生,则仿真进程就会进入等待状态,直到其中的某一个触发事件发生后才启动执行后面给出的行为语句,仿真进程继续向下进行。例如例6-6给出的initial语句块所示。 (2) 不要求所有的输入信号都出现在敏感事件列表的“信号名”中。 这是由于时序逻辑电路逻辑状态的改变只发生在某个或某几个时钟输入信号的变化边沿,而在其它输入信号发生变化时电路逻辑状态保持不变。所以这时事件控制只需对这几个时钟输入信号进行监测就可以了,没有必要把其它输入信号也放入敏感事件列表中。 在组合逻辑和时序逻辑混合的情况下,模块逻辑状态和输出发生变化时刻要同时受时钟信号跳变沿和某些输入控制信号的控制,典型的例子是带有异步置位?(清零)?控制输入的时钟边沿触发器。比如一个带有异步清零控制输入位clr的时钟上升沿T触发器,其输入输出真值表如表6.4所示。 根据对被赋值变量产生作用的优先级差别,可以将过程赋值语句分为如下两种类型: ? 普通过程赋值语句(简称过程赋值语句)。 ? 过程连续赋值语句。 其中普通过程赋值语句又可以根据赋值操作执行时的不同时序特点分成阻塞型过程赋值语句和非阻塞型过程赋值语句。 如果连续赋值语句带有延时(#delay),则在仿真执行时,只要右端赋值表达式中的任一信号发生变化,都将立即对赋值表达式进行重新计算,然后进入延时等待状态,等到指定的延时时间过去后再将计算得到的赋值表达式取值结果赋值给被赋值连线型变量。 最后总结一下连续赋值语句和过程赋值语句之间的区别: (1) 从语法上来看,连续赋值语句由“assign”关键词来标识,而过程赋值语句中则不包含这个关键词。 (2) 连续赋值语句左边的被赋值变量必须是连线类型的变量,而过程赋值语句中的被赋值变量则必须是寄存器类型的变量。 (3) 连续赋值语不能出现在过程块?(initial过程块或always过程块)?中,而过程赋值语句则只能出现在过程块内。 在release语句内的目标变量是寄存器类变量的情况下: 如果在force语句执行之前该寄存器变量已经由于受“assign语句”的作用而处于被连续赋值的状态?,那么在执行了“release语句”后,这个寄存器变量将恢复到由assign语句实现的连续赋值状态; 如果在force语句执行之前该寄存器变量没有处于被连续赋值的状态?,那么在执行了“release语句”后,这个寄存器变量将退出连续赋值状态,其取值保持不变。 (2) “deassign语句”的使用语法是: deassign 寄存器类变量; “deassign语句”是一条撤销连续赋值语句。当它得到执行后,原先由assign语句对变量进行的连续赋值操作将失效,寄存器变量被连续赋值的状态将得到解除,该变量又可以由普通的过程赋值语句进行赋值操作了。 需要注意的是:当用deassign语句来撤销了对某个寄存器变量的连续赋值后,该寄存器变量仍将保持deassign语句执行前的原有取值,比如在如下语句: reg[3:0] out; initial begin out = 0; //S1,过程赋值语句 assign out =1; //S2,第一条过程连续赋值语句 assign out = 2; //S3,第二条过程连续赋值语句 deassign out; //S4,撤销连续赋值语句 end 6.2.3 阻塞型过程赋值 以赋值操作符“=”来标识的赋值操作称为“阻塞型过程赋值”。 阻塞型过程赋值语句的特点如下: (1) 串行块?(begin-end语句块)?中的各条阻塞型过程赋值语句将以它们在顺序块中的先后排列次序依次得到执行;而fork-join并行块中的各条阻塞型过程赋值语句则是同时得到执行的。 (2) 阻塞型过程赋值语句的执行过程:首先计算右端赋值表达式的取值,然后立即将计算结果赋值给“=”左端的被赋值变量。 【例6-18】阻塞型过程赋值语句带有延时控制时的情况。 initial begin a=0; //语句S1 a=#5 1; //语句S2 a=#10 0; //语句S3 a=#15 1; //语句S4 end 图6.4 带有延时控制的阻塞型过程赋值产生的波形 图6.4给出了例6-18所示模块仿真执行时输出信号a的波形。 6.2.4 非阻塞型过程赋值
文档评论(0)