以下のフローは,基本的に
/home/vdec/lib/ux8l/DesignFlow/DesiginCompiler_SampleScript_WEB-00465505-01.pdf
を参照して記述している.
また,本レポートの作業ディレクトリは,
/home/hlab/masayuki/wasmii3/ux8l/
である.
/home/vdec/lib/ux8l/DesignFlow/sample_script
以下をコピーしてくる.
以下,このサンプルスクリプトを(作業ディレクトリ)に置いたとし,このサンプルスクリプトをベースに論理合成を行っていく.
今回は,自作の6ステージMIPSプロセッサ(プロジェクト名:MARIMOR2)を論理合成する例で説明していく.
論理合成を行いたいRTLファイルを
(作業ディレクトリ)/design_compiler/(プロジェクト名)/verilog_rtl/(プロジェクト名)/
にコピーする.(ちなみに自分は別ディレクトリからシンボリックリンクを張っている)
$ pwd (作業ディレクトリ)/design_compiler/MARIMOR2/verilog_rtl/MARIMOR2 $ ls BASIC.vh I_CACHE.v MARIMOR2_CHIP.v~ MARIMOR2_IF.v MARIMOR2_TEST.shm images BLOCKRAM MARIMOR2.v MARIMOR2_CONSTS.vh MARIMOR2_INSTS.vh MARIMOR2_TOP.v ncverilog.key BLOCKRAM_BYTE_EN MARIMOR2_BASIC.vh MARIMOR2_EX.v MARIMOR2_MEM.v MARIMOR2_TOP_TEST.svcf ncverilog.log BOOTH4.v MARIMOR2_BPBUFFER.v MARIMOR2_HL_REG.v MARIMOR2_REG.v MULT32_64 record.txt INCA_libs MARIMOR2_CHIP.v MARIMOR2_ID.v MARIMOR2_RF.v Makefile
サンプルスクリプトでは,cpu8_top_xxx.tclというファイルが用意されているが,わかりやすくするために名前を変える. 用意すべきスクリプトファイルは,
である.
以下の部分の書き変えを行う.
# set OPC_PATH "/home/product/shuttle-pmf/el-shuttle/ndk/database/OPC_LIB/release_for_GIT_20091225" set OPC_PATH "/home/vdec/lib/ux8l" # ふんが研のライブラリの場所 set TECHNOLOGY "UX8L" set COND "wide1_1.1V" #set FILE "set the file name (ex.verilogfile)" set TOP "MARIMOR2_CHIP" # デザインのトップモジュール名 #set CLK "set the clock pin name (ex.CLK)" #set PERIOD "set the period value (ex.10)" #set VAL1 "set the waveform(rise or fall) value (ex.5)" #set VAL2 "set the waveform(rise or fall) value (ex.10)" set VAL3 "100"
`include文でヘッダファイルを探索するために,search_pathにverilog_rtl/(作業ディレクトリ)を追加する.
set search_path [concat "(作業ディレクトリ)/design_compiler/MARIMOR2/verilog_rtl/MARIMOR2" $search_path]
論理合成対象のverilogリストである.
// // MARIMOR2 // `timescale 1ps/1ps `include "./verilog_rtl/MARIMOR2/MARIMOR2_CHIP.v" `include "./verilog_rtl/MARIMOR2/MARIMOR2.v" `include "./verilog_rtl/MARIMOR2/MARIMOR2_HL_REG.v" `include "./verilog_rtl/MARIMOR2/MARIMOR2_IF.v" `include "./verilog_rtl/MARIMOR2/MARIMOR2_ID.v" `include "./verilog_rtl/MARIMOR2/MARIMOR2_RF.v" `include "./verilog_rtl/MARIMOR2/MARIMOR2_REG.v" `include "./verilog_rtl/MARIMOR2/MARIMOR2_EX.v" `include "./verilog_rtl/MARIMOR2/MARIMOR2_MEM.v"
ライブラリの場所の変更を行う.
set ROOT_PATH "./" # comment out # set OPC_PATH "/home/product/shuttle-pmf/el-shuttle/ndk/database/OPC_LIB/release_for_GIT_20091225" # set OPC_ADD "/home/product/shuttle-pmf/el-shuttle/ndk/database/OPC_ADD2" # set OPC_PLL "/home/product/shuttle-pmf/el-shuttle/ndk/database/OPC_PLL" # set OPC_MODULE "/home/product/shuttle-pmf/el-shuttle/ndk/database/OPC_MEM/linux/MEM" # 新規に追加 set OPC_PATH "/home/vdec/lib/ux8l" set OPC_ADD "/home/vdec/lib/ux8l/IO/OPC_ADD2" set OPC_PLL "/home/vdec/lib/ux8l/PLL/linux" # set OPC_MODULE "/home/product/shuttle-pmf/el-shuttle/ndk/database/OPC_MEM/linux/MEM"
いくつかのライブラリの追加/削除を行う.今回はlvtのライブラリを追加し,PLL,メモリのライブラリを除外する.
################################################### # Library Setup ################################################### #Please select the "set search_path" set search_path [list . [format "%s%s" $ROOT_PATH {/libraries/syn}] \ $OPC_PATH/lib/${TECHNOLOGY}/${COND}/liberty_db/max \ $OPC_ADD/lib/${TECHNOLOGY}/${COND}/liberty_db/max \ $OPC_PLL/lib/${TECHNOLOGY}/${COND}/liberty_db/max \ ] # $OPC_MODULE/lib/${TECHNOLOGY}/${COND} \ #Please add and select the "set link_library" set link_library [list {*} \ ${TECHNOLOGY}_${COND}_MAX_io_fe_mox33v.db \ ${TECHNOLOGY}_${COND}_MAX_primitive_hvt.db \ ${TECHNOLOGY}_${COND}_MAX_primitive_mvt.db \ ${TECHNOLOGY}_${COND}_MAX_primitive_lvt.db \ C0S8L0STARCIO_FE_ACPLIO38V10_MAX.db \ ] # C0S8L0STARCIO_FE_ACPLMPHH38V10_MAX.db \ # ${TECHNOLOGY}_${COND}-M_COM_MAX.db \ #Please add and modify the "set target_library" set target_library [list \ ${TECHNOLOGY}_${COND}_MAX_io_fe_mox33v.db \ ${TECHNOLOGY}_${COND}_MAX_primitive_hvt.db \ ${TECHNOLOGY}_${COND}_MAX_primitive_mvt.db \ ${TECHNOLOGY}_${COND}_MAX_primitive_lvt.db \ C0S8L0STARCIO_FE_ACPLIO38V10_MAX.db \ ] # C0S8L0STARCIO_FE_ACPLMPHH38V10_MAX.db \ # ${TECHNOLOGY}_${COND}-M_COM_MAX.db \
制約ファイルを記述する.ずいぶんと削ったが,これでいいのかよく分からない.
# modified by Masayuki KIMURA # is it correct? create_clock -name "CLK" -period 10.0 -waveform {0 5.000} [find port {CLK_IN}] # # set clock skew # set _cts_skew 0.30 set _pll_jitter 0.20 set_clock_uncertainty [expr $_cts_skew + $_pll_jitter] [all_clocks] set_input_delay 8.0 -clock CLK [find port "IDATA_IN*"] set_input_delay 8.0 -clock CLK [find port "IDATA_EN_IN*"] set_input_delay 8.0 -clock CLK [find port "DDATA_IN*"] set_input_delay 8.0 -clock CLK [find port "DDATA_EN_IN*"] set_output_delay 0.4 -clock CLK [all_outputs]
大量にコメントアウトしたので,実質上記の部分しか生き残っていない.ほかにあれば,追加してほしい.
上記のスクリプトを正しく読み込むために,それぞれのtclファイル中でsourceや,ファイル参照されている部分を探し,適切に書き換える.
大抵の場合は,cpu8_top_xxx.tclとか,const/cpu8_top_constとかを,MARIMOR2_CHIP_xxxに書き換えればOKだと思う.
作業用のディレクトリをいくつか用意する.
$ pwd (作業ディレクトリ)/design_compiler/MARIMOR2 $ mkdir log report gate work work/LIB lib_work sdc_dc
dc_shell-t -f ./script/MARIMOR2_CHIP_ux8l.tcl | tee MARIMOR2_CHIP_dc.log
論理合成が終了すると,以下のレポートファイルが出力される.
$ pwd /home/hlab/masayuki/wasmii3/ux8l/design_compiler/MARIMOR2 $ cd report/ $ ls MARIMOR2_CHIP-compile-area.rep MARIMOR2_CHIP_check_design_compile.rep MARIMOR2_CHIP-compile-timing.rep MARIMOR2_CHIP_check_design_read_v.rep
MARIMOR2_CHIP_check_design_read_v.repを見るべし.レイアウト時のために,なるべくこのWARNINGは消すこと.
MARIMOR2_CHIP_check_design_compile.repを見るべし.レイアウト時のために,なるべくこのWARNINGは消すこと.
Number of ports: 171 Number of nets: 380 Number of cells: 200 Number of references: 4 Combinational area: 13471.905887 Noncombinational area: 5401.370160 Net Interconnect area: undefined (No wire load specified) Total cell area: 18873.276047 Total area: undefined
F65に比べて,ずいぶん小さくなっている.単位が違うのか,よく分からない.
slackがマイナスになっていないか,確認.