阻塞(=)赋值和非阻塞(<=)赋值
来源:互联网 发布:生意宝,网络小贷牌照 编辑:程序博客网 时间:2024/05/27 12:22
在写组合逻辑电路的代码时,我发现书上例子大都用的"=";而在写时序逻辑电路代码时,我发现书上例子大都用的"<="。之前就知道在Verilog HDL中阻塞赋值"="和非阻塞赋值"<="有着很大的不同,但一直没有搞清楚究竟有什么不同,现在来慢慢的琢磨它。
关键是组合逻辑中是实时变化的,而时序逻辑中一个cycle才变化一次比如:always @(a or b)begin c = a + b;endalways @(posedge clk)begin if(rst) c <= 0; else c <= a + b;end在组合逻辑的always block中,a和b的变化都会引起c值的变化;而时序逻辑中c至少会维持一个clock cycle,也就是说如果a和b的变化导致c变化的时间是在下一个clock的上升沿,而不会让c立刻改变--------------------------------------------------------------------------------------------------------------------好,说正题阻塞赋值“=”与非阻塞赋值“<=”的本质区别在于:非阻塞赋值语句右端表达式计算完后并不立即赋值给左端,而是同时启动下一条语句继续执行,可以将其理解为所有的右端表达式RHS1、RHS2等在进程开始时同时计算,计算完后 ,等进程结束时同时分别赋给左端变量LHS1、LHS2等;而阻塞赋值语句在每个右端表达式计算完后立即赋给左端变量,即赋值语句LHS1=RHS1执行完后LHS1是立即更新的,同时只有LHS1=RHS1执行完后才可执行语句LHS1=RHS2,依次类推。前一条语句的执行结果直接影响到后面语句的执行结果。
代码
1 `timescale 1 ps/ 1 ps
2 module blocking_vlg_tst();
3
4 reg clk;
5 reg iD;
6 // wires
7 wire oQA;
8 wire oQB;
9
10 // assign statements (if any)
11 blocking i1 (
12 // port map - connection between master ports and signals/registers
13 .clk(clk),
14 .iD(iD),
15 .oQA(oQA),
16 .oQB(oQB)
17 );
18 initial
19 begin
20 clk = 1'b0;
21 iD = 1'b0;
22 end
23
24 always #10 clk = (~clk);
25
26 always
27 begin
28 #8 iD = (~iD);
29 end
30 endmodule
31
0 0
- 阻塞(=)赋值和非阻塞(<=)赋值
- 阻塞赋值语句(“=”)和非阻塞赋值语句(“<=”)
- verilog赋值:阻塞(=)和非阻塞(<=)赋值的不同
- 阻塞赋值和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 阻塞(=)和非阻塞赋值(<=)的不同
- 阻塞赋值和非阻塞赋值学习笔记
- verilog中阻塞赋值和非阻塞赋值的区别
- 关于阻塞赋值和非阻塞赋值的…
- AMD中国研究院急聘实习生
- Android 文件的读取与写入
- Activity提取公因式
- android ViewPagerIndicator使用心得
- C# 委托与事件
- 阻塞(=)赋值和非阻塞(<=)赋值
- CSI-S3:虚拟存储器(二)-再谈hello程序
- 用Spring Tool Suite简化你的开发
- svn使用教程-windows和Linux下常用操作总结
- QT/E 支持 jpeg QImage加载
- COCOS2D-X CCScene 与 CCLayer 分离细节
- Android WakeLock 使屏幕保持亮度,不要锁屏
- 公有云与私有云对比分析报告
- Linux目录结构及常用命令大全