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。因此,两种延迟结构的特点很显而易见了。
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。因此,两种延迟结构的特点很显而易见了。
相关文章推荐
- Verilog语句内延迟与语句间延迟的区别
- [初学笔记] pause 语句 的运用,.m文件中按任意键继续程序或者延迟秒数继续程序
- switch case 语句的初步运用。。
- SQLite数据库的使用之运用SQL语句
- Mysql sql语句正则表达式运用
- Verilog中for语句的使用
- SQL 语句 综合运用
- 运用数据库查询语句并且返回查询出来返回的查询条数
- verilog中# 非阻塞赋值延迟,硬件看不到效果,浅探
- verilog工程设计中语句
- JavaScript之 ------ 基本运用语法(变量、运算符、语句)
- Mybatis中SQL动态语句灵活运用${}符号和#{}符号
- FPGA学习笔记 Verilog HDL语句(基础)
- LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别 LINQ延迟执行
- for语句的运用
- if语句运用
- 新手.双向if语句简单运用
- WAITFOR延迟语句
- Verilog之case语句
- Verilog的块语句