微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > DW_mult_uns 是不是designware里的乘法ip呀?

DW_mult_uns 是不是designware里的乘法ip呀?

时间:10-02 整理:3721RD 点击:
我用verilog写了个简单的代码:


  1. module gene_q41c(a,control,y);
  2. input [15 : 0] a;
  3. input [1 : 0] control;
  4. output[31 : 0]y;
  5. wire [15 : 0]a;
  6. wire [2 : 0]control;
  7. wire [31 : 0] y;
  8. reg [15 : 0] c;
  9. always@(a or control)
  10.   case(control)
  11.    3'd0: c <= 5677;
  12.    3'd1: c <= 896;
  13.    3'd2: c <= 1045;
  14.    3'd3: c <= 928;
  15.       default: c <= 1;
  16.   endcase
  17. assign y = a * c;
  18. endmodule

复制代码


乘法只有固定的几个数,用control来选择乘数,然后与输入信号a做乘法。
用DC综合后:
1)report_resources得到这样的结果:
===============================================================================
|          |              |            | Contained     |                      |
| Resource | Module       | Parameters | Resources     | Contained Operations |
===============================================================================
| r295     | DW_mult_uns  | a_width=16 |               | mult_59              |
|          |              | b_width=14 |               |                      |
===============================================================================
Implementation Report
===============================================================================
|                    |                  | Current            | Set            |
| Cell               | Module           | Implementation     | Implementation |
===============================================================================
| mult_59            | DW_mult_uns      | apparch (area)     |                |
===============================================================================
2)我想自己指定乘法器mult_59的实现类型,用set_implementation命令,结果如下:
dc_shell> set_implementation csa mult_59
1
dc_shell> compile
Error: Cannot find the synthetic library implementation 'csa' of module 'DW_mult_uns'. (SYNDB-20)
0
自己理解的意思是说,在synthetic库里边,没有用csa方式实现的DW_mult_uns。
查了一下,design ware里确实没有DW_mult_uns这样的东西,只有DW02_mult,DW02_multp,DW02_mult_2_stage这样的东西。
推测,DC很聪明的做了优化。拜托高手指教下:
DW_mult_uns这个东西,DC是根据我的代码优化出来的verilog中的“*”吗?
在我上边的verilgo中,能不能指定这个“*”用designware里最普通的乘法器来做呢?
O(∩_∩)O谢谢!

恩,这个DW_mult_uns就是“*”,uns应该是universal的意思。

DW 应该就是design ware的缩写吧。我理解uns应该为无符号(unsigned)的意思,因为写 * 来实现乘法时,两个数均被当成无符号数了。
Designware里面有很多乘法器可以选择,比如你想直接指定DW02_mult乘法器,也就是说例化时直接用DW02_mult(a,c,1'b0,y)代替y=a*c就可以了。 也许乘法器的名字记错了,你去DC的库里去查一查。


嗯,是这样的,我用的synopsis的库,但是使用report_synlib dw_foundation.sldb命令,返回的结果里并没有名字里带了“_uns”字样的的cell呀,我查我的网表却发现有好多名字里带_uns的module,好像这些module对应的就是verilog代码里的“*”"+"。
这是怎么回事呀?  难道是说明综合的时候没有用designware里的DW02_mult,它聪明的生成了更优化的实现?

当然了,就像你没有指定门and,如果a,b,c都是1bit, 写了a = b *c ;那么它肯定综合出a=b&c一样。DC的强大就是因为它有很多库



    谢谢,这就明白点了。DC确实强大,自己的一点点小想法都让它做的那么优化了!



    report_synlib dw_foundation.sldb这个命令查看flundation.sldb库,为什么库里面也没有DW01的cla和rpl等信息?谢谢

I would like to have dw ip library

I would like to have dw ip library

  顶起来~

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

网站地图

Top