第五讲行为建模 西安邮电学院通信工程系 延时执行 在testbench中使用延时执行(#延时)施加激励,或在行为模型中 模拟实际延时。 module muxtwo (out,a,b,sl); 在延时执行中可以使用模块参数 input a,b,sl; parameter: output out; reg out; module clock_gen(clk); always @sl or a or b) output clk; if (sl) reg clk; #10 out a; parameter cycle 20; //从a到out延时10个时间单位 initial clk =0; else #120ut=b; always //从b到out延时12个时间单位 #(cycle/2)clk =~clk; endmodule endmodule
第五讲 行为建模 西安邮电学院通信工程系 延时执行 ❖ 在testbench中使用延时执行(#延时)施加激励,或在行为模型中 模拟实际延时。 module muxtwo (out, a, b, sl); input a, b, sl; output out; reg out; always @( sl or a or b) if (! sl) #10 out = a; // 从a到out延时10个时间单位 else #12 out = b; //从b到out延时12个时间单位 endmodule 在延时执行中可以使用模块参数 parameter: module clock_gen (clk); output clk; reg clk; parameter cycle = 20; initial clk = 0; always #(cycle/2) clk = ~clk; endmodule
第五讲行为建模 西安邮电学院通信工程系 延时执行例 module clk_gen_demo(clock1,clock2); output clock1,clock2; reg clock1,clock2; initial begin 若赋值延时为0,结果将 clock1=0; 如何? clock2=1; end always always begin begin #0 clock1=~clock1; #50 clock1=~clock1; end end always begin #100 clock2=~clock2; end endmodule
第五讲 行为建模 西安邮电学院通信工程系 延时执行例 module clk_gen_demo(clock1,clock2); output clock1,clock2; reg clock1,clock2; initial begin clock1=0; clock2=1; end always begin #50 clock1=~clock1; end always begin #100 clock2=~clock2; end endmodule 若赋值延时为0,结果将 如何? always begin #0 clock1=~clock1; end
第五讲行为建模 西安邮电学院通信工程系 块语句中的延时执行 在顺序块中,语句一条接一条地计算执行。 ~在并行块中,所有语句在各自的延迟之后立即计算执行。 begin fork #5a=3: #5 a=3; #5a=5 #15a=4; #5a=4; #10a=5: end join 上面的两个例子在功能上是等价的。Fork-join例子里的赋值故意打乱顺 序是为了强调顺序是没有关系的。 注意fork-join块是典型的不可综合语句,并且在一些仿真器中效率较差
第五讲 行为建模 西安邮电学院通信工程系 块语句中的延时执行 ❖ 在顺序块中,语句一条接一条地计算执行。 ❖ 在并行块中,所有语句在各自的延迟之后立即计算执行。 begin #5 a = 3; #5 a = 5; #5 a = 4; end fork #5 a = 3; #15 a = 4; #10 a = 5; join ❖ 上面的两个例子在功能上是等价的。Fork-join例子里的赋值故意打乱顺 序是为了强调顺序是没有关系的。 ❖ 注意fork-join块是典型的不可综合语句,并且在一些仿真器中效率较差