目次

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というファイルが用意されているが,わかりやすくするために名前を変える. 用意すべきスクリプトファイルは,

である.

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がマイナスになっていないか,確認.