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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: flyamo

[求助] verilog的always块内多个if else语句执行顺序问题

[复制链接]
发表于 2014-9-16 10:59:43 | 显示全部楼层
学习学习。。
发表于 2016-5-8 16:39:27 | 显示全部楼层
always里面的if,else if,else if是顺序执行的吗
always@(posedge clk)   
        begin
                if(q==11)   
                        m<=0;
                else if(q==10)
                begin
                        if(m<3)   
                                y<=0;
                        else
                                y<=1;
                end
                else if(xx==1)
                        m<=m+3'b1;
        end
这里面的顺序是怎样的?
发表于 2016-5-8 17:03:45 | 显示全部楼层
本帖最后由 runileking 于 2016-5-10 09:01 编辑

回复 8# guodaqn

时序逻辑全部用非阻塞幅值,组合逻辑阻塞。
发表于 2016-5-8 17:06:50 | 显示全部楼层
回复 9# guodaqn


   十楼是正确的,没有先后顺序了,是独立的,相当于两个选择器
发表于 2016-5-9 21:55:09 | 显示全部楼层
回复 12# June_


  无论哪种情况只会执行一条语句,何来顺序和并行?
发表于 2016-5-9 21:55:45 | 显示全部楼层
回复 13# runileking


反了。。
发表于 2016-5-10 09:03:29 | 显示全部楼层
回复 16# daneast

改过了,误人子弟啊,知道咋用名字搞错了
发表于 2016-5-10 09:17:12 | 显示全部楼层
一个always里只给一个变量赋值,如果有多个的,拆开写。多个变量在一个always里描述就是一个烂coding,不要去浪费时间去扯谁先谁后了,特别是if/else条件不一样时各个变量赋值不一样的情况,把自己都搞混淆了。简洁明了准确才是coding的目标。
发表于 2016-5-15 13:43:04 | 显示全部楼层
begin  end 之间的代码是串行执行的,begin end间的<=也是串行执行的,比如:
begin
  a <= b;
  a <= c;
  d <= a;
end
最后a<=c起作用,a<=b相当于没起作用,是串行。a最后的值是c,而不是x(如果是并行,因为多驱动,值会是x)。
只不过赋给d的是a的老值,而不是c,这(非阻塞赋值)是用串行模拟并行的一种方法。但这并不是说begin end间的<=是并行,begin end间的代码是串行的,fork join间的是并行。多个always和initial间是并行。
发表于 2016-7-19 09:51:11 | 显示全部楼层
@杰克淡定:这个楼主说的比较好。写出来的代码容易看懂才是好代码。如果需要控制两个变量赋值我认为可以写两个always模块,这样代码简单易懂。个人意见,如有不对还请大神指出。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-5-4 02:58 , Processed in 0.028392 second(s), 8 queries , Gzip On, Redis On.

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