- 1、本文档共60页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5.2.1 串行块(begin-end块) 串行块的块定义语句为“begin,end”,串行块中的各条语句按串行方式顺序执行。串行块的格式如下: begin : 块名 块内局部变量说明 时间控制1 行为语句1 …… 时间控制n 行为语句n end 其中,“块内局部变量说明”可以是reg型变量声明语句、integer型变量声明语句及real型变量声明语句。 串行块执行时的特点如下: (1) 串行块内的各条语句是按它们在块内出现的次序逐条顺序执行的,当前面一条语句执行完毕后下一条语句才能开始执行。 (2) 块中每条语句中的延时控制都是相对于前一条语句结束时刻的延时控制。 (3) 在进行仿真时,当遇到串行块时,块中第一条语句随即就开始执行;当串行块中最后一条语句执行完毕时,程序流程控制就跳出串行块,串行块结束执行。整个串行块的执行时间等于其内部各条语句执行时间的总和。 下面给出串行语句块的几个例子。 【例5-8】一个时钟上升沿控制的三位移位寄存器。 module Three_bit_shift_register (clk,d_in,d_out); input clk; input d_in; output d_out; reg reg_a, reg_b, d_out; always @(posedge clk) begin d_out=reg_b; reg_b=reg_a; reg_a=d_in; end endmodule 在例5-8的代码内包含了一个begin-end串行块,它属于always过程块的一部分。时钟的上升沿跳变将触发串行块的执行:第一条赋值语句首先执行,将reg_b的值赋给寄存器d_out;执行完第一条语句后,程序流程控制转到第二条语句,开始执行第二条语句,将reg_a的值赋给reg_b;然后执行第三条语句,将输入d_in值赋给reg_a;在执行完第三条语句(串行块中的最后一条语句)后,程序流程跳出串行块,串行块结束执行。 下面是一个块内语句带有延时的情况。 【例5-9】由带有延时控制的语句组成的串行块,用于产生时序波形。 module sequential_signal_gen( d_out ); output d_out; reg d_out; initial begin d_out=0; #1 d_out=1; #2 d_out=0; #3 d_out=1; #4 d_out=0; end endmodule 例5-9中的begin-end串行块属于initial过程块的一部分。块中语句执行过程如下: (1) 在仿真开始后(t=0时刻)串行块就开始执行,首先执行第一条语句,第一条语句执行完时也就是在0时刻d_out值变为0。 (2) 然后开始执行第二条语句,由于第二条赋值语句带有1个单位时间的延时,所以直到第一条语句结束1个单位时间后(t=1时刻),第二条赋值语句才开始执行,d_out的值变为1。 (3) 同样,第三条赋值语句是在第二条语句结束2个单位时间后(t=3时刻)开始执行,d_out的值变为0。 (4) 第四条赋值语句是在第三条语句结束3个单位时间后(t=6时刻)开始执行,d_out的值变为1。 (5) 第五条赋值语句是在第四条语句结束4个单位时间后(t=10时刻)开始执行,d_out的值变为0。 (6) 第五条赋值语句结束后,串行块结束执行。 上例中串行语句块执行过程所产生的波形如图5.1所示。 图5.1 例5-9的执行产生的波形 5.2.2 并行块(fork-join块) 并行块的块定义语句为“fork,join”,并行块中的多条语句是并行执行的。并行块的格式如下: fork : 块名 块内局部变量说明 时间控制1 行为语句1; …… 时间控制n 行为语句n; join 其中,“块内局部变量说明”可以是reg型变量声明语句、integer型变量声明语句、real型变量声明语句、time型变量声明语句及事件(event)声明语句。 并行块执行时的特点如下: (1) 并行块内各条语句是同时并行地执行的,也就是说当程序流程控制进入并行块后,块内各条语句都各自独立地同时开始执行。各条语句的起始执行时间都等于程序流程控制进入该并行块的时间。 (2) 块内各条语句中指定的延时控制都是相对于程序流程控制进入并行块的时刻的延时,也就是相对于并行块开始执行时刻的延时。 (3) 当并行块内所有的语句都已经执行完毕后,也就是当执行时间最长的那一条块内语句结束执行后,程序流程控制才跳出并行块,结束并行块的执行。整个并行块的执行时间等于执行时间最长的那条语句所需的执行时间。 下面给出并行块的几个例
文档评论(0)