====== UX8Lのためのデザインコンパイラの動かし方 ======
===== 0. はじめに =====
以下のフローは,基本的に
/home/vdec/lib/ux8l/DesignFlow/DesiginCompiler_SampleScript_WEB-00465505-01.pdf
を参照して記述している.
また,本レポートの作業ディレクトリは,
/home/hlab/masayuki/wasmii3/ux8l/
である.
===== 1. 準備 =====
/home/vdec/lib/ux8l/DesignFlow/sample_script
以下をコピーしてくる.
以下,このサンプルスクリプトを(作業ディレクトリ)に置いたとし,このサンプルスクリプトをベースに論理合成を行っていく.
今回は,自作の6ステージMIPSプロセッサ(プロジェクト名:MARIMOR2)を論理合成する例で説明していく.
===== 2. RTLの用意 =====
論理合成を行いたい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
===== 3. スクリプトの改変 =====
サンプルスクリプトでは,cpu8_top_xxx.tclというファイルが用意されているが,わかりやすくするために名前を変える.
用意すべきスクリプトファイルは,
* (作業ディレクトリ)/design_compiler/MARIMOR2/script/MARIMOR2_CHIP_ux8l.tcl : メインとなるtcl
* (作業ディレクトリ)/design_compiler/MARIMOR2/script/MARIMOR2_CHIP_verilog_list : コンパイル対象となる.vファイルのリスト
* (作業ディレクトリ)/design_compiler/MARIMOR2/script/dc_ux8l.setup : 各種定数の設定
である.
==== A. MARIMOR2_CHIP_ux8l.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]
==== B. MARIMOR2_CHIP_verilog_list ====
論理合成対象の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"
==== C. dc_ux8l.setup ====
ライブラリの場所の変更を行う.
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 \
==== D. const/MARIMOR2_CHIP_const ====
制約ファイルを記述する.ずいぶんと削ったが,これでいいのかよく分からない.
# 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]
大量にコメントアウトしたので,実質上記の部分しか生き残っていない.ほかにあれば,追加してほしい.
==== E. sourceする場所を変更 ====
上記のスクリプトを正しく読み込むために,それぞれのtclファイル中でsourceや,ファイル参照されている部分を探し,適切に書き換える.
大抵の場合は,cpu8_top_xxx.tclとか,const/cpu8_top_constとかを,MARIMOR2_CHIP_xxxに書き換えればOKだと思う.
===== 4. ディレクトリを用意する =====
作業用のディレクトリをいくつか用意する.
$ pwd
(作業ディレクトリ)/design_compiler/MARIMOR2
$ mkdir log report gate work work/LIB lib_work sdc_dc
===== 5. 論理合成 =====
dc_shell-t -f ./script/MARIMOR2_CHIP_ux8l.tcl | tee MARIMOR2_CHIP_dc.log
===== 6. 出力ファイル =====
論理合成が終了すると,以下のレポートファイルが出力される.
$ 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
==== A. 文法エラー ====
MARIMOR2_CHIP_check_design_read_v.repを見るべし.レイアウト時のために,なるべくこのWARNINGは消すこと.
==== B. コンパイル時エラー ====
MARIMOR2_CHIP_check_design_compile.repを見るべし.レイアウト時のために,なるべくこのWARNINGは消すこと.
==== C. コンパイル面積 ====
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に比べて,ずいぶん小さくなっている.単位が違うのか,よく分からない.
==== D. タイミング ====
slackがマイナスになっていないか,確認.