微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > assign和if else的区别? 跟综合工具有关系吗

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

时间:10-02 整理:3721RD 点击:
//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综合有区别吗?

没有区别。第一种是脑子里已经有电路结构的人的习惯写法,第二种是习惯描述电路行为的人的习惯写法,都没有问题。



    单纯从功能来讲,二者没有差别,但是方式1可能会功耗大于方案2。
 why?  因为方式1 d是组合逻辑产生,只要a或者b发生变化,那么d就会立刻变化,而方式2是在时钟沿上变化,
因此方式1 d数据线的反转率要大于方案2 ,因此功耗自然会稍微大一点.至于说方案1是脑子里面有点路的人的写话,
答主表示不能赞同,一样的都是比较器,为什么方案2就不是脑子里面有电路的人写的呢?

比较赞同2楼。不赞同3楼的说法。
个人经验这两个东西综合出来应该是完全一样的。
if...else...和 ? :最大的区别体现在前后仿一致好。
小编可以试试a=1'bx,b=1'bx的情况,就知道了,得到的d是不一样的。


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

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

DC综合是一样的(所以功耗是一样的!),另外, 同意二楼的说法。

用assign的是功力,但if else能把关系描述清楚,代码还是朴实易看比较好。



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

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



   功耗取决于综合出来的电路差别,仅仅就小编贴的这两段代码,这两种写法一般综合得到的电路是一样的。描述相同功能的A与B两种不同RTL写法,综合可能得到相同的电路;但即便同一种写法A,如果使用不同综合方式,却可能得到功能一样但结构不一样的电路。对于小编贴出的RTL,比如综合时加或者不加-gate_clock的选项,电路结构就会有差异了,加上-gate_clock选项的电路功耗更低,功耗差异真正原因在这里。
   另外,就小编贴的这段逻辑实现方式,有明显的多条件优先级关系,我个人更喜欢用第二种,因为简洁清晰,可阅读性强,写RTL除了给自己看,也要方便他人易懂。这些是个人习惯,不用太纠结,懂电路就行了,如果别人按照第一种写法拿给我看,我也能接受。



   没错,你说的问题,就是DC综合时加上-gate_clock,使得部分D端的逻辑去gating clock连接到CP上来控制功耗。

用dc综合的结果没有任何差别,dc里?:和if-else是一个elaborate引擎,elaborate的结果是完全一样的。
case倒是另一个引擎。但在Synplify里case又跟上面两种是同一个引擎。

学些了!

用? :表达模块复用的时候比if-else要简洁,if-else不留意就容易例化出多个operator和更大的mux

方法1和方法2, 綜合的結果電路應是一樣的,
但個人覺得方法2的寫法較好, 原因是:
1. 較易閲讀
2. 用方法2, simulator 會有較好的效率, 因方法2, simulator 只有 clock edge 時 evaluate 式子, 但方法1 是只要式子的右邊變數有改變就會 evaluate

如果让DC 插入clk gating cell,是要写成第二种方式的,Dc插ICG的要求是包含q《=d分支,不管是隐含的else还是写明的else

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top