如何使用DesignWare库在Design Compiler中合成浮点MAC

时间:2019-02-07 07:26:44

标签: verilog synthesis asic

我想评估半精度浮点乘法累加器。因此,我决定在DesignWare库中使用DW_fp_mac(verilog)。

但是,编译时会出现一些错误。

  Beginning Pass 1 Mapping
  ------------------------
  Processing 'DW_fp_mac_inst'

Statistics for case statements in always block at line 457 in file
    './DW_fp_mac__rtl.v.e'
===============================================
|           Line           |  full/ parallel  |
===============================================
|           145            |    auto/auto     |
===============================================
Error: *** Generation of expr Fanout_18[8:0]=I1+I2;Fanout_198:00]=I3+127;Fanu_28[[8::0]={C0,C}?0:Fannout_1;Faoouut_29[8:0]={C,C3}?0:Fano_9nu_66[8888::0]={C45}?FFaanouutt_29:Fanoutt__28;Fanout_27[8:0]={C4}Fu_2annoutt__29;11777==FFaannoouut_28<Fanout_29;O11155[8:0]=Fanout_26+2O6[8:0]=Fnuuttt__26-Fanout_27 failed.
Fatal: Internal system error, cannot recover.

Release = 'E-2010.12-SP2'  Architecture = 'amd64'  Program = 'dc_shell'
Exec = '/scale/cal/opt/synopsys/design_compiler/amd64/syn/bin/common_shell_exec'

下面是我的.tcl文件。我使用OSU(俄克拉荷马州立大学)FreePDK 45nm作为标准单元库。 适用于amd64的Design Compiler版本为E-2010.12-SP2 DesignWare的版本为E-2010.12-DWBB_201012.2。

#/**************************************************/
#/* Compile Script for Synopsys                    */
#/*                                                */
#/* dc_shell-t -f compile_dc.tcl                   */
#/*                                                */
#/* OSU FreePDK 45nm                               */
#/**************************************************/


#/* All verilog files, separated by spaces         */
set my_verilog_files [list ./verilog_files/DW_fp_mac_inst.v ]

#/* Top-level Module                               */
#set my_toplevel adder
set my_toplevel DW_fp_mac_inst


#/**************************************************/
#/* No modifications needed below                  */
#/**************************************************/
set OSU_FREEPDK [format "%s%s"  [getenv "PDK_DIR"] "/osu_soc/lib/files"]
set search_path [concat  $search_path $OSU_FREEPDK]
set alib_library_analysis_path $OSU_FREEPDK

set synthetic_library [list dw_foundation.sldb]
set link_library [set target_library [concat  [list gscl45nm.db] [list dw_foundation.sldb]]]
set target_library "gscl45nm.db"
define_design_lib WORK -path ./WORK
set verilogout_show_unconnected_pins "true"

analyze -f verilog $my_verilog_files

elaborate $my_toplevel

current_design $my_toplevel

link
uniquify


set_driving_cell  -lib_cell INVX1  [all_inputs]

compile

check_design
report_constraint -all_violators

set filename [format "%s%s"  $my_toplevel "_syn.v"]
write -f verilog -output ./output/200/$filename

set filename [format "%s%s"  $my_toplevel "_syn.sdc"]
write_sdc ./output/200/$filename

set filename [format "%s%s"  $my_toplevel "._syn.sdf"]
write_sdf ./output/200/$filename

set filename [format "%s%s"  $my_toplevel ".db"]
write -f db -hier -output ./output/200/$filename -xg_force_db


redirect ./output/200/timing.rep { report_timing }
redirect ./output/200/cell.rep { report_cell }
redirect ./output/200/power.rep { report_power }

实际上,我想输入时钟并进行重置,但是为了简单起见,将其删除。

DW_fp_mac_inst.v如下。与给定的示例相同。

module DW_fp_mac_inst( inst_a, inst_b, inst_c, inst_rnd, z_inst, status_inst );

parameter inst_sig_width = 23;
parameter inst_exp_width = 8;
parameter inst_ieee_compliance = 0;

input [inst_sig_width+inst_exp_width : 0] inst_a;
input [inst_sig_width+inst_exp_width : 0] inst_b;
input [inst_sig_width+inst_exp_width : 0] inst_c;
input [2 : 0] inst_rnd;
output [inst_sig_width+inst_exp_width : 0] z_inst;
output [7 : 0] status_inst;

    // Instance of DW_fp_mac
    DW_fp_mac #(inst_sig_width, inst_exp_width, inst_ieee_compliance) U1 (
      .a(inst_a),
      .b(inst_b),
      .c(inst_c),
      .rnd(inst_rnd),
      .z(z_inst),
      .status(status_inst) );

endmodule

.tcl文件是否有问题?我不确定使用OSU freePDK是否可以。 使用自己的Verilog文件(定点MAC)执行时,我得到了正确的报告。

还是有使用Design Compiler评估DesignWare库的半精度浮点MAC的简便方法?

我尝试的另一件事是:

我得到了所有相关的Verilog文件并更改了模块名称。

dffr.v,DW_fp_dp2.v,DW_fp_ifp_conv.v,DW_fp_mac.v,DW_ifp_addsub.v,DW_ifp_fp_conv.v,DW_ifp_mult.v 、、 half_prec_mac_DW.v

但是,我发现DW提供的Verilog文件无法合成。例如,他们使用===和!==(我编辑过),而使用while(我无法编辑)。所以我放弃合成这些文件。

0 个答案:

没有答案