微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 多路选择器如何设计更好(case与3目选择操作)

多路选择器如何设计更好(case与3目选择操作)

时间:10-02 整理:3721RD 点击:
主要是讨论case和a?b:c操作根本综合后,在面积和timing上有何不同,哪种方式更好?
以8路选择器为例

case可设计为

  1.    always @(*) begin
  2.       case(1'b1)
  3.         sel0 : data_out = data_in0;
  4.         sel1 : data_out = data_in1;
  5.         sel2 : data_out = data_in2;
  6.         sel3 : data_out = data_in3;
  7.         sel4 : data_out = data_in4;
  8.         sel5 : data_out = data_in5;
  9.         sel6 : data_out = data_in6;
  10.         sel7 : data_out = data_in7;
  11.         default: data_out = 0;
  12.       endcase
  13.    end

复制代码



a?b:c方式可设计为

  1.    assign data_out = sel0 ? data_in0 :
  2.                      sel1 ? data_in1 :
  3.                      sel2 ? data_in2 :
  4.                      sel3 ? data_in3 :
  5.                      sel4 ? data_in4 :
  6.                      sel5 ? data_in5 :
  7.                      sel6 ? data_in6 :
  8.                      sel7 ? data_in7 : 1'b0;

复制代码



初看两者综合出来的应该是同样的电路,不知道有没有人试过?
有经验的可以来讨论讨论有没有区别?
有区别的话哪种设计更优?
或者有没有其他更好的设计方法,尤其是当数据位宽更大,sel路数更多时?

case 更好一些吧;sel需要一级一级判断,就产生优先级了吧。

这两个综合出来一样的,可读性case更好一些。

这两个一样,都是带优先级的,不带优先级可以人肉这么写:
assign x = ({WIDTH{a_en}} & a) | ({WIDTH{b_en}} & b)...


这两个其实都有优先级,都是一样的,综合出来电路应该也是一样的。


这个就是资源用得太多了,数据位宽大的时候就不划算了。数据位宽小的时候这个还比较适用。


但是如果在case 之後加上 //parallel_case 這個 directive
case 這個寫法  timing 會變快,但是沒有priority


这个建议好,可以试试,目的也是想速度更快

很不错的很好的

作为初学者的我都是用case的,第二种方法也很好

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

网站地图

Top