在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
12
返回列表 发新帖
楼主: qianyuji

[求助] 关于非阻塞赋值和begin end块的问题

[复制链接]
发表于 2014-9-22 14:56:07 | 显示全部楼层
9楼10楼正解!!!
发表于 2014-10-1 23:10:42 | 显示全部楼层
本帖最后由 phxwings 于 2014-10-1 23:16 编辑

简单的说if(cnt==2)这个条件会综合出一个和rst同等地位的信号,这个信号和rst经过或逻辑连接到DFF的reset端。
需要着重理解的是:语句的执行顺序是对仿真计算的过程而言的,从综合的角度来说,两条语句对应着DFF数据反馈逻辑和reset逻辑,显然reset逻辑的优先级在硬件结构上是更高的。

当cnt==2时仿真过程大致如下:
        1. 执行至cnt<=cnt+1语句时,cnt==2,cnt的未来值 cnt'==3;
        2. 执行至if语句时,条件表达式成立,reset信号变为有效,cnt的未来值cnt''==0;
        3. 根据物理结构的优先级最终选定cnt的未来值为cnt''==0;
        4. 当触发信号到来时,cnt的值更新为0;

另外,如果if语句中写为:cnt<=1的形式,那么if语句的条件表达式将综合为load使能信号;
注:上述综合结构是综合工具的parser直接翻译的中间结构,并非最终输出的网表结构,最终结果在对中间结构优化后可能会有变化
发表于 2014-10-2 19:56:38 | 显示全部楼层
发表于 2014-12-26 00:39:57 | 显示全部楼层
给你换一种coding style,看看能不能帮助你理解:
//===============================================
reg [msb:lsb]cnt_p;
reg [msb:lsb]cnt_r;
reg [msb:lsb]cnt;

assign cnt = cnt_r;

always @ (*) begin
    if (cnt_r == 'h2) begin
        cnt_p = 'b0;
    end
    else begin
        cnt_p = cnt_r + 1'b1;
    end
end

always @ (posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        cnt_r <= 'b0;
    end
    else begin
        cnt_r <= cnt_p;
    end
end
//===============================================
发表于 2016-4-27 11:45:24 | 显示全部楼层
回复 6# cutfor


    正解。计算和赋值是两个步骤,这就是非阻塞和阻塞的最本质区别。理解了这一点,很多困惑都会迎刃而解
发表于 2016-4-27 14:37:20 | 显示全部楼层
回复 6# cutfor



    确切的说是cnt+1的值被暂存在temp里面,其实3=2+1是被计算了的,只是因为没有到always的结尾尚未进行赋值。

非阻塞赋值并不是并行语句,也是有顺序执行的。其执行过程为:
执行到赋值语句时,计算赋值符号右边表达式的值,并暂存;
以同样的方式处理下一条赋值语句直到所有的赋值语句处理完;
该过程语句结束时,将暂存的值依次(按照语句顺序)赋值给赋值符号右边的信号。
因此在同一个时钟沿对同一个变量进行非阻塞赋值,后面的复制操作会覆盖掉前面的赋值操作。
发表于 2016-4-27 14:38:15 | 显示全部楼层
回复 9# 成长中的原始人


    重复赋值,后面的覆盖前面的。
发表于 2016-4-27 16:10:16 | 显示全部楼层
一个非阻塞的写法 引起这么多讨论, 学习了。

其实这样的写法本身就没考虑可综合性。
cnt <= cnt + 1;
if (cnt == 2)
   cnt <= 0;

换成这样就可综合且更易理解: cnt = (cnt == 2) ? 0 (cnt + 1);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-23 03:09 , Processed in 0.021603 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表