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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6978|回复: 18

[讨论] always 进程中的优先级问题

[复制链接]
发表于 2013-9-4 11:09:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
各位大佬好啊,讨论一个问题代码如下:
第一种情况是使用IF ELSE语句 这样有优先级如下代码:
always  @(posedge clk)
   begin
    if(!rst_n)
    begin
      addr <= 0 ;
     end
  else
    begin
      if(ce1 == 1'b1)
        begin
          addr <= 8'd1 ;
        end
   else if(ce2 == 1'b1)
        begin
          addr <= 8'd2 ;
        end
   else if(ce3 == 1'b1)
        begin
          addr <= 8'd3 ;
        end
   else if(ce4 == 1'b1)
        begin
          addr <= 8'd4 ;
        end
      else if(en == 1'b1)
        begin
          addr <= addr + 8'd1 ;
        end
      else ;
    end  
end
     
endmodule

第二种情况是:在always里面使用几个平行的 if else 代码如下:
always  @(posedge clk)
   begin

    if(!rst_n)
    begin
      addr <= 0 ;
     end
  else
    begin
      if(ce1 == 1'b1)
        begin
          addr <= 8'd1 ;
        end
      else if(en == 1'b1)
        begin
          addr <= addr + 8'd1 ;
        end
      else ;
    end
  
    if(!rst_n)
    begin
      addr <= 0 ;
     end
  else
    begin
      if(ce2 == 1'b1)
        begin
          addr <= 8'd2 ;
        end
      else if(en == 1'b1)
        begin
          addr <= addr + 8'd1 ;
        end
      else ;
    end
  
    if(!rst_n)
    begin
      addr <= 0 ;
     end
  else
    begin
      if(ce3 == 1'b1)
        begin
          addr <= 8'd3 ;
        end
      else if(en == 1'b1)
        begin
          addr <= addr + 8'd1 ;
        end
      else ;
    end
    if(!rst_n)
    begin
      addr <= 0 ;
     end
  else
    begin
      if(ce4 == 1'b1)
        begin
          addr <= 8'd4 ;
        end
      else if(en == 1'b1)
        begin
          addr <= addr + 8'd1 ;
        end
      else ;
    end
  
   end
  
endmodule

请问大虾们这两个情况有何区别,那个更好些。
发表于 2013-9-4 12:23:50 | 显示全部楼层
前一种写法,优先级从高到低依次是:ce1 ce2 ce3 ce4 en
后一种写法,优先级从高到低依次是:ce4 en ce3 ce2 ce1(如果你想问为什么,答案是因为代码是顺序执行的。)

两种写法除了可读性以外,没有好坏的差别。
发表于 2013-9-4 14:08:06 | 显示全部楼层
第二种写法也太那个 啥啥啥 ,第一次见这种写法。
 楼主| 发表于 2013-9-4 14:36:52 | 显示全部楼层
回复 3# 教父


   哈哈 我自己瞎想滴  二楼说的没错 但是第二种写法优先级从高到低应该是:ce1  en  ce2  ce3  ce4
 楼主| 发表于 2013-9-4 14:38:18 | 显示全部楼层
回复 2# Timme


   
    第二种写法优先级从高到低应该是:ce1  en  ce2  ce3  ce4
   既然顺序应该首先是ce1 en  再是ce2 en
发表于 2013-9-4 14:42:09 | 显示全部楼层
本帖最后由 eaglelsb 于 2013-9-4 14:56 编辑

##第二种方法可行,但是相当不直观,
发表于 2013-9-4 15:18:55 | 显示全部楼层
第二种写法,因为最后的赋值语句决定了信号的最终值,所以后面的优先级反而高。
发表于 2013-9-4 16:52:39 | 显示全部楼层
第二种写法是只是仿真性的代码,没有实际意义。综合会形成多驱动。
 楼主| 发表于 2013-9-4 18:25:57 | 显示全部楼层
回复 7# 加油99


    多谢大虾  看你的分析雾水头清
 楼主| 发表于 2013-9-4 18:26:59 | 显示全部楼层
回复 8# woodhorse


    应该不会多驱动吧 都在一个进程里面
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-14 12:05 , Processed in 0.028365 second(s), 8 queries , Gzip On, Redis On.

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