Как синтезировать MAC с плавающей запятой в Design Compiler с использованием библиотеки DesignWare - PullRequest
0 голосов
/ 07 февраля 2019

Я хочу оценить множитель-накопитель с плавающей указкой половинной точности.Поэтому я решил использовать DW_fp_mac (verilog) в библиотеке DesignWare.

Однако при компиляции есть некоторые ошибки.

  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 в качестве стандартной библиотеки ячеекВерсия Design Compiler - E-2010.12-SP2 для amd64. Версия 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 с фиксированной запятой).

Или есть более простой способ оценки MAC с плавающей запятой половинной точности библиотеки DesignWare с использованием Design Compiler?

Другая вещь, которую я попробовал:

Я получил все связанные файлы 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 * 10 *, однако * 10 * * 1022файлы verilog из DW не синтезируются.Например, они используют === и! == (я редактировал это) и используют время (я не могу редактировать это).Поэтому я перестаю синтезировать эти файлы.

...