时间控制和赋值语句讲解.ppt

  1. 1、本文档共126页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
  【例6-17】过程赋值语句中的内部时间控制方式。 module timing_control_inner_mode(a,b,c,d,clk,enable); input a,clk,enable; output b,c,d; reg b,c,d; initial //此过程块用于对输出进行初始化 fork b=0; c=0; d=0; join initial //此模块用于对输出进行赋值,其中包含了内部时间控制 fork b=#5 a; //语句S1 c=@(posedge clk) a ; //语句S2 d= wait (enable) a ; //语句S3 join endmodule    图6.3 例6-17所示模块在进行仿真时的输入输出波形 6.2.3 阻塞型过程赋值   以赋值操作符“=”来标识的赋值操作称为“阻塞型过程赋值(Blocking Assign-ment)”。阻塞型过程赋值语句特点如下:   (1) 串行块?(begin-end语句块)?中的各条阻塞型过程赋值语句将以它们在顺序块中的先后排列次序依次得到执行;而fork-join并行块中的各条阻塞型过程赋值语句则是同时得到执行的。   (2) 阻塞型过程赋值语句的执行过程是:首先计算右端赋值表达式的取值,然后立即将计算结果赋值给“=”左端的被赋值变量。   阻塞型过程赋值的这两个特点表明:仿真进程在遇到阻塞型过程赋值语句时将计算表达式的值并立即将其结果赋给等式左边的被赋值变量;在串行语句块中,下一条语句的执行会被本条阻塞型过程赋值语句所阻塞,只有在当前这条阻塞型过程赋值语句所对应的赋值操作执行完毕后下一条语句才能开始执行。 initial begin a=0; //语句S1 a=1; //语句S2 end   【例6-18】阻塞型过程赋值语句带有延时控制时的情况。 initial begin a=0; //语句S1 a=#5 1; //语句S2 a=#10 0; //语句S3 a=#15 1; //语句S4 end 图6.4 带有延时控制的阻塞型过程赋值产生的波形 6.2.4 非阻塞型过程赋值   以赋值操作符“=”来标识的赋值操作称为“非阻塞型过程赋值(Nonblocking Assignment)”。非阻塞型过程赋值语句的特点是:   (1) 在begin-end串行语句块中,一条非阻塞型过程赋值语句的执行不会阻塞下一条语句的执行,也就是说在本条非阻塞型过程赋值语句对应的赋值操作执行完毕之前,下一条语句也可以开始执行。   (2) 仿真进程在遇到非阻塞型过程赋值语句后首先计算其右端赋值表达式的值,然后要等到当前仿真时间步结束时再将该计算结果赋值给赋值变量。   为了了解非阻塞型过程赋值语句的上述两个特点,我们可以观察如下语句: initial begin A = B; //语句S1 B = A; //语句S2 end   如果非阻塞型过程赋值语句带有外部延时控制,则它的执行相当于在指定的延时之后执行一条不带时间控制的非阻塞型过程赋值语句。并且这条非阻塞型过程赋值语句不会阻塞其后面语句的执行。   【例6-19】带有外部延时控制的非阻塞型过程赋值语句。 initial //过程块1 begin #5 a = b; //语句S1 #10 c = d; //语句S2 end   上面的过程块1相当于如下的过程块2: initial //过程块2 fork begin //语句块1 #5; a=b; end begin //语句块2 #10; c=d; end join 图6.5 带有外部延时控制的非阻塞型过程赋值语句的执行时序   如果非阻塞型过程赋值语句带有内部延时控制,则仿真进程在遇到这种赋值语句后将立即计算语句右端赋值表达式的值,然后进入延时控制部分所指定的等待状态,直到退出等待状态时刻所在时间步的末尾才执行赋值操作,将已计算得到的赋值表达式结果值赋给被赋值变量。例如如下语句:   a=#10 b;   就是一条带有内部延时控制的非阻塞型过程赋值语句。在开始执行这条语句后,首先立即计算赋值表达式“b”的值?(在t=0时刻),然后等待10个单位时间的延时量,一直等到延时结束时刻?(t=10时刻)?所在时间步的末尾才将计算得到的赋值表达式取值结果赋给变量a。

文档评论(0)

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

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

1亿VIP精品文档

相关文档