您的位置:首页 > 其它

Verilog延迟语句的运用

2011-11-03 22:10 369 查看
Verilog延迟语句的运用

module full_adder(a,b,sum);

input a,b;

output reg sum;

always @(a,b) #13 sum = (a & b) ; 或者 always @(a,b) sum = #13 (a & b) ;

endmodule

注意到两个always语句的延迟语句的位置不同,后一个语句称为内部指定延迟
第一个always语句说明在a或b变化后,先阻塞运行,延迟13ns,再根据当前的a,b的值,计算sum的值。这就导致计算得到的sum值可能与13ns之前的不一样。
第二个always语句表示的是a或b变化后,立即计算当前的sum值,13ns后将该值赋给sum,得到的是13ns之前的值。
在相同的Testbench下仿真
module test_fulladder;
// Inputs
reg a;
reg b;
// Outputs
wire sum;
// Instantiate the Unit Under Test (UUT)
full_adder uut (.a(a), .b(b), .sum(sum) );
initial begin
// Initialize Inputs
a = 0;
b = 0;
// Wait 100 ns for global reset to finish
#10 a =1;
#11 b =1;
#11 a =0;
#25 a = 1;
// Add stimulus here
end
endmodule
结果如下:



第一个always语句对应的图



第二个always语句对应的图
由图可知,在21ns时刻,b变化,此时a=1,b=1,sum=a&b=1,,而第一个图的结果在13ns后即34ns时刻的值却是0,第二个图则是1,。说明第一图是将34ns的计算结果值赋给了sum,而第二图是将21ns的sum计算结果延迟13ns到34ns时刻再赋给sum。因此,两种延迟结构的特点很显而易见了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: