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

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
查看: 5728|回复: 15

[求助] assign和if else的区别? 跟综合工具有关系吗

[复制链接]
发表于 2016-6-15 12:59:31 | 显示全部楼层 |阅读模式

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

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

×
//1
wire [3:0] d;
wire a,b;

assign d=(a==1'b1)?4'h5:
              (b==1'b1)?4'ha:d_reg;

always @(posegde clk or negedge RSTn)
begin
  if(RSTn==1'b0)
     d_reg <= 4'h0;
  else
    d_reg <= d;
end


// 2
always @(posedge clk or negedge RSTn)
begin
  if(RSTn==1'b0)
    d <= 4'h0;
  else if(a==1'b1)
   d <= 4'h5;
  else if(b==1'b1)
    d <= 4'ha;
end

这两种用dc综合有区别吗?
发表于 2016-6-15 14:02:16 | 显示全部楼层
没有区别。第一种是脑子里已经有电路结构的人的习惯写法,第二种是习惯描述电路行为的人的习惯写法,都没有问题。
回复 支持 反对

使用道具 举报

发表于 2016-6-15 21:59:45 | 显示全部楼层
回复 1# dyytx


    单纯从功能来讲,二者没有差别,但是方式1可能会功耗大于方案2。

 why?  因为方式1 d是组合逻辑产生,只要a或者b发生变化,那么d就会立刻变化,而方式2是在时钟沿上变化,

因此方式1 d数据线的反转率要大于方案2 ,因此功耗自然会稍微大一点.至于说方案1是脑子里面有点路的人的写话,

答主表示不能赞同,一样的都是比较器,为什么方案2就不是脑子里面有电路的人写的呢?
回复 支持 反对

使用道具 举报

发表于 2016-6-15 22:13:17 | 显示全部楼层
比较赞同2楼。不赞同3楼的说法。
个人经验这两个东西综合出来应该是完全一样的。
if...else...和 ? :最大的区别体现在前后仿一致好。
楼主可以试试a=1'bx,b=1'bx的情况,就知道了,得到的d是不一样的。
回复 支持 反对

使用道具 举报

发表于 2016-6-15 22:49:13 | 显示全部楼层
本帖最后由 silencefpga 于 2016-6-15 22:51 编辑

回复 4# orlye

对DC 综合工具而言,....楼主可以综合一下便知。,就功耗而言,方案1确实比较打,因为a和b 都是wire, 也就是说,前面如果a和b有一些非预期数据变化的话,虽然在时钟沿采样的时候不会被采样到,但是对d的翻转率影响是比较打的,同样的功能,同样的电路,数据翻转率越高,功耗越大


当然,如果电路简单,那么可能会是一样的,但是当电路复杂度很高的,时候,综合结果可能不相同
回复 支持 反对

使用道具 举报

发表于 2016-6-15 23:32:22 | 显示全部楼层
DC综合是一样的(所以功耗是一样的!),另外, 同意二楼的说法。
回复 支持 反对

使用道具 举报

发表于 2016-6-16 08:46:20 | 显示全部楼层
用assign的是功力,但if else能把关系描述清楚,代码还是朴实易看比较好。
回复 支持 反对

使用道具 举报

发表于 2016-6-16 09:06:54 | 显示全部楼层
回复 3# silencefpga


   对你的回复表示不赞同。
   方式1中的d确实是会实时变化的,但是难不成你以为方式2中寄存器d的输入端不是实时变化的?
回复 支持 反对

使用道具 举报

发表于 2016-6-16 10:15:45 | 显示全部楼层
DC综合中有些关于power的优化,即把原本属于D端的逻辑综合到CP端,但从Formal的角度说,不管那种都是等效的.但我确实遇到过,在复杂的条件下,部分可以综合到CP端来gating clock的逻辑被综合到了D端,导致gating 效率没有达到理想值,后来手动插入ICG才达到预期。
就本问题而言,我认为是一样的,但条件如果继续复杂,DC的结果没有定论。
回复 支持 反对

使用道具 举报

发表于 2016-6-16 12:49:21 | 显示全部楼层
回复 3# silencefpga


   功耗取决于综合出来的电路差别,仅仅就楼主贴的这两段代码,这两种写法一般综合得到的电路是一样的。描述相同功能的A与B两种不同RTL写法,综合可能得到相同的电路;但即便同一种写法A,如果使用不同综合方式,却可能得到功能一样但结构不一样的电路。对于楼主贴出的RTL,比如综合时加或者不加-gate_clock的选项,电路结构就会有差异了,加上-gate_clock选项的电路功耗更低,功耗差异真正原因在这里。

   另外,就楼主贴的这段逻辑实现方式,有明显的多条件优先级关系,我个人更喜欢用第二种,因为简洁清晰,可阅读性强,写RTL除了给自己看,也要方便他人易懂。这些是个人习惯,不用太纠结,懂电路就行了,如果别人按照第一种写法拿给我看,我也能接受。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2025-9-11 05:48 , Processed in 0.019024 second(s), 5 queries , Gzip On, Redis On.

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