Verilog中的阻塞赋值和非阻塞赋值
来源:互联网 发布:漏洞提交平台源码 编辑:程序博客网 时间:2024/05/22 21:36
Verilog中阻塞赋值和非阻塞赋值的异同:
一 阻塞赋值
操作符 “ = ”
把赋值运算看做
LHS = RHS
在阻塞赋值时,先计算等号右手方向(RHS)的值,这时候赋值语句不允许别的Verilog语句的干扰,直到现行的赋值过程完成,即将RHS计算得到的值赋给LHS(左手方向),然后才允许别的语句执行。
从理论上来说,阻塞赋值的过程虽然分先后(先RHS后LHS),但是确实是一步完成,中间不能有延迟(即使是零延迟也不行),计算RHS和对LHS赋值,只有概念上的先后,没有实质上的延迟。
如果加了延迟,这种Verilog代码不能被综合。
如果一个过程块中的RHS变量恰好是另一个过程块的LHS变量,且两个过程块是用同一个时钟沿触发的,则可能引起竞争。怎么理解呢?
如果这两个过程块是用同一个时钟沿触发的,赋值操作都是一步完成,但是不一定哪一个先完成,如下:
always @(posedge clock) begin alw1 a = b; endalways @(posedge clock) begin alw2 b=c; end
如果alw1的时钟沿先到,那么其中的赋值语句一步执行完成,则a的值是b,如果alw2先执行完成,则a的值是c,两个赋值语句是串行执行的
二 非阻塞赋值
操作符号: “ <= ”
分成两步:
(1)在赋值开始的时刻,计算非阻塞赋值RHS的表达式
(2)在赋值结束的时刻,更新非阻塞赋值LHS的表达式
在计算非阻塞赋值RHS 和更新LHS期间,允许其他的Verilog语句执行
alway @(posedge clock or posedge rst) if(rst) y1<=0; //预置值 else y1<=yu2;always @(posedge clock or posedge rst) if(rst) y2<=1; // 预置值 else y2<=y1;
非阻塞赋值语句运行时,不影响其他Verilog语句的执行,
rst置位信号由1到0后,y1为0,y2为1,当下一个时钟上升沿到来时,无论哪个always块的时钟上升沿先到几个皮秒,第一步计算RHS,y1为0,y2为1,是确定的,所以第二步对LHS赋值时y1和y2的值都是确定的,由rst置位或者上一个时钟上升沿确定的值。在用户看,这两个赋值语句是并行执行的。
阅读全文
0 0
- Verilog中的阻塞赋值和非阻塞赋值
- verilog中的 阻塞赋值 与 非阻塞赋值 详解。
- verilog中的阻塞赋值与非阻塞赋值详解
- Verilog阻塞赋值与非阻塞赋值
- Verilog阻塞赋值与非阻塞赋值
- verilog中阻塞赋值和非阻塞赋值的区别
- Verilog中阻塞赋值和非阻塞赋值区别
- 深入分析 verilog 阻塞和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 阻塞赋值和非阻塞赋值
- 基于用户的协同过滤算法详解
- 解决配置文件不提示
- Tensorflow深度学习笔记(六)--代价函数
- 求连续子数组的最大和
- java之for循环小Demo及函数基础
- Verilog中的阻塞赋值和非阻塞赋值
- UVA227 谜题
- scikit-learn 中文文档-模型评估-无监督学习|ApacheCN
- bzoj3123: [Sdoi2013]森林
- centos7下docker部署nginx使用let's encrypt免费证书
- 如何下载android源码
- 基于物品的协同过滤算法
- PL/SQL ORA-12154: TNS:could not resolve the connect identifier specified
- HashMap原理介绍