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。因此,两种延迟结构的特点很显而易见了。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值