JapaneseEnglish
論理合成

機能シミュレーション

  1. HDL記述

    LED ControllerブロックのサンプルHDLコードを論理合成用の作業ディレクトリICCにコピーする。

    vlsi> cd  ~/d
    vlsi> cp  -r  sample/verilog6  ICC
    vlsi> cd  ICC
    

    モジュール構成
    Block Diagram 02

    Verilog HDLファイル構成
    ファイル名機能
    div.v(214-1)分周器(クロック周波数を下げる)
    pwm.v4bit PWM(輝度調整)
    blnk.v512PWM周期 Duty ratio = 0.5(LED点滅)
    led.vLED Controller全体
    tb_led.vled.vのテストベンチ(シミュレーション用)

  2. シミュレーション入力ファイルリスト

    シミュレータに入力するHDLファイルを指定するための、入力ファイルリストを記載したファイルを作成する。ここでは、led.fというファイル名で下記の内容を記載する。

    led.fの内容
    tb_led.v     (※)
    led.v        
    div.v        
    pwm.v        
    blnk.v       
    

    ※ テストベンチは、最初に記載するとよい。この場合、`timescale をテストベンチファイルに記述しておけば、回路を記述したHDLファイルでは、`timescaleを省略してもよい。

  3. HDLシミュレータの起動

    コマンドラインで、Verilog-XLを起動する。setlicは、各ツールの環境設定を行う。shellに対して、最初の1回だけ実行すればよい。

    vlsi> setlic 
    Cadence INCISIVEに相当する番号を入力
    vlsi> verilog  +gui  -s  -f  led.f &
    
    [参考] Verilog-XLのオプション
    +guiGUIモードで起動
    -sシミュレーションの前に一旦停止(モニタ信号などを指定できる)
    -f入力ファイルリストを記入したファイルを指定

  4. モニタする変数の指定

    SimVisionでシミュレーション結果を確認する。左欄の+マークをクリックすると階層が展開される。この例では、テストベンチtb_ledの下にモジュールledのインスタンス uutが存在する。uutをクリックすると、uutの入出力信号名のリストが表示される。

    SimVision

    この状態で、ツールバーのブロック図アイコンをクリックすると、ブロック図が表示される。ブロックをダブルクリックすると下位の階層のブロック図が表示される。

    SimVision toolbar

    波形アイコンをクリックすると、Waveformビュワーが表示される。

    SimVision toolbar

    Waveform viewer

  5. シミュレーションの実行

    Waveformビュワーの開始ボタンをクリック(上図参照)すると、シミュレーションが実行され、波形が表示される。=ボタンをクリックすると、シミュレーションされた波形全体が表示される。POUTのパルス幅が、徐々に増えていくのを確認する。確認できたら、開始ボタンの右側にある一時停止ボタンで止めてよい。

  6. HDLシミュレータの終了

    メニュー:File > Exit SimVisionを選んで終了する。

論理合成

  1. 論理合成ライブラリの指定

    .synopsys_dc.setupというファイル名で、下記の内容のセットアップファイルをICCディレクトリの中に作成する。(予め用意してあるので、内容を確認して使用してもよい)

    .synopsys_dc.setup
    set search_path	"$search_path  ../kyoto/synthesis/lib/" 
    set target_library “ROHM18_FF.db  ROHM18_WO_FF.db” 
    set link_library "* ROHM18_FF.db  ROHM18_WO_FF.db  ROHM18_ADD.typ.db" 
    

  2. 制約条件の設定

    ICCディレクトリに、led.sdcというファイル名で、制約条件ファイルを作成する。

    led.sdc
    create_clock -name CLK -period 2.0 -waveform {0 1.0} [get_ports {CLK}]
    set_clock_uncertainty 0.1 -setup [get_ports {CLK}]
    set_clock_uncertainty 0.1 -hold [get_ports {CLK}]
    

    制約条件は、SDC(Synopsys Design Constraint Format)というフォーマットで記述される。この例では、以下のような条件を想定してクロックが設定されている。

    クロック信号名CLK
    クロック周期2.0ns
    クロックの遅延、パルス幅0ns, 1.0ns(従ってデューティ比 = 50%)
    セットアップタイミングのジッタ0.1ns
    ホールドタイミングのジッタ0.1ns


    以下のような制約条件を課すこともできるが、ここでは省略。

    1. 入力外部遅延時間

      set_input_delay 0.5 -max -clock "CLK" {WIDTH} 
      set_input_delay 0.2 -min -clock "CLK" {WIDTH} 
      

      指定したパターンにマッチする入力端子(ここではWIDTH[3:0])に対して、以下の設定をしている。
      クロック信号名CLK
      最大遅延時間0.5ns
      最小遅延時間0.2ns

      [参考] 合成対象の入力に接続されている前段の回路の出力が、クロックよりTdin遅れたとき、合成する回路のレジスタがセットアップタイム違反を起こさないように回路(遅延時間Tn)を合成させる(下図参照)。論理合成対象回路の入力タイミングに対するマージンが必要でなければ、Max Rize =0, Min Rize =0 としてもよい。

      SDC 1

    2. 出力外部遅延時間

      set_output_delay 0.5 -max -clock "CLK" {OUT} 
      set_output_delay 0.2 -min -clock "CLK" {OUT} 
      

      指定したパターンにマッチする出力端子(ここではOUT)に対して、以下の設定をしている。
      クロック信号名CLK
      最大遅延時間0.5ns
      最小遅延時間0.2ns

      [参考] 次のクロックエッジよりも、Tdoutだけ早く出力を行わないと、次段の回路でセットアップタイム違反が発生する場合、セットアップタイム違反が発生しないように回路(遅延時間Ts)を合成させる(下図参照)。次段の回路への入力タイミングに対するマージンが必要でなければ、Max Rize =0, Min Rize =0 としてもよい。

      SDC 2

    3. 動作条件設定

      • 入力ドライブ強度

        set_drive 3 {CLK} 
        set_drive 3 {RST_B} 
        

        入力端子に対して(ここではCLKとRST)、以下の設定をしている。
        接続される回路の出力抵抗3kohm

        [参考] 出力抵抗を0にすると、ドライブ強度は無限大となる。抵抗の単位はライブラリに依存する。IOバッファが接続される端子は、set_driving_cell で入力IOセルを指定してもよい。

      • 出力負荷容量

        set_load -pin_load 0.01 {OUT} 
        set_load -min -pin_load 0.01 {OUT} 
        

        出力端子に対して(ここではOUT)、以下の設定をしている。
        出力端子に接続される負荷容量0.01 pF (IOバッファの入力容量等を設定)

        [参考] 容量の単位は、ライブラリに依存する。


  3. 論理合成の実行

    コマンドラインから、Design Visionを起動する。

    vlsi> cd  ~/d/ICC
    vlsi> setlic 
    Synopsys Synthesisに相当する番号を入力
    vlsi> design_vision (&は不要)
    
    1. メニューより、File >Read... またはツールバーのフォルダアイコンをクリック。
    2. Formatは、VERILOG(v)を選び、論理合成に使用する全てのVerilogHDLファイル(led.v, div.v, blnk.v, pwm.v)を読み込む。
      ただし、最初にled.vを選択して、他のファイルはCTRLキーを押しながら選択する。
    3. メニューより、File > Link Design... をクリックし、スタセルライブラリ ROHM18_FF.db等が指定されていることを確認してOKをクリック。

      Design Vision 1

    4. ツールバーのモジュール名欄で、トップ階層(ここでは、LED)を選択。
    5. 左側の階層構造図から、トップセルまたはサブセルを選択し、四角が2個あるアイコンをクリックして、回路構成を確認。
    6. Design Visionのコマンドプロンプト design_vision> に対して、read_sdc led.sdc を実行し、SDCファイルに記載された制約条件を読み込む。ただし、上図のようにトップ階層を指定してから行う必要がある。
      SDCファイルに記述せずに、コマンドプロンプト design_vision> に対して、SDCファイルの記述内容を直接入力してもよい。
    7. メニューより、Attribute > Optimizing Constraints > Design Constraints... により、Max Area = 0 (最小面積)の面積制約を与える。
      割当面積が決まっている場合は、その面積を与える。
    8. メニューより、Design > Compile Design... を選びOKボタンをクリックして、論理合成を行う。全体を展開してから論理合成を行う場合は、ungroupにチェックをする(最適化度が高い)。

      Design Vision 2

    9. メニューより、Select > Cells > Top Design をクリック
    10. メニューより、Schematic > New Schematic View をクリックすると、トップ階層のブロック図が表示されるので、ブロックをダブルクリックして開いていくと、合成結果を確認できる。ただし、ungroupした場合は、トップ階層のみとなる。

  4. 論理合成結果の確認
    1. メニューより、Design > Report Area で合成結果(使用セルなど)を確認する。
    2. メニューより、Timing > Report Timing Path... でタイミングレポートを表示し、スラック(タイミングバジェット)が負になっていないことを確認。
    3. ツールバーで、タイマーアイコン(Create Path Slack Histogram)をクリックし、クリティカルパスとなるタイミングのスラックの配線数を表示。
    4. ツールバーで、タイマーアイコン(Create Endpoint Slack Histogram)をクリックし、全てのパスに対するタイミングスラックの配線数分布を表示。

  5. 論理合成結果の保存
    1. メニューより、File > Save As..., Format: = DDC, File Name: = led.ddcで保存。DDCフォーマットでは、制約条件も保存される。
    2. コマンドプロンプト design_vision> に対し、以下のコマンドを入力。他のツールに入力するためのVerilogHDLのネットリストを作成する場合に限り、このコマンドを実行する必要がある。
      design_vision> define_name_rules  verilog  -allowed  "A-Z0-9_" 
      design_vision> change_names  -rule  verilog  -hierarchy 
      

    3. メニューより、File > Save As..., Format:VERILOG(v) でVerilogHDL形式のネットリストを出力。合成元のファイルと違うファイル名にすること(例: led_syn.v)。
    4. 後で使用するため、コマンドプロンプト design_vision>に対し、 以下のコマンドを入力し、合成後の遅延情報(SDF形式)も出力しておく。
      design_vision> write_sdf  -version 1.0  led.sdf 
      

  6. Design Visionの終了
    1. メニューより、File > Exit
タイミングシミュレーション

論理合成した回路に対して、タイミングシミュレーション(ゲート遅延を含む論理シミュレーション)を行う。急いでいる人は、論理合成ツールを信用してここは飛ばしてもよい。ただし、動作速度を重視する場合は、タイミングシミュレーションが必要となる。

  1. led_syn.f というファイル名で下記の内容のファイルを作成する。

    led_syn.fの内容
    tb_led.v                             テストベンチ
    led_syn.v                            論理合成結果のネットリスト
    -v  ../kyoto/verilog/rohm18_typ.v    シミュレーションライブラリ(※)
    
    ※ -v はシミュレーション用ライブラリファイルを指定するオプション。ここでは、遅延時間が標準の場合を想定したライブラリファイルを使用している。

    led_syn.fを読み込んで、Verilog-XLを起動する。操作は、機能シミュレーションの時と同じ。

    vlsi> setlic 
    Cadence INCISIVEに相当する番号を入力
    vlsi> verilog  +gui  -s  -f  led_syn.f
    
    [参考] 複数ビットを選んで16進表示にしたい場合は、上位ビットから複数の信号を選択し、右クリックで表示されるポップアップメニューからCreate Busを選ぶ。さらに、数値欄(真ん中の欄)で、右クリックを行うと、Radix(基数)を選択できる。


[Table of Contents] [Next]


お問い合わせはこちらまで: kitagawa@is.t.kanazawa-u.ac.jp

Copyright (C) 2016- Akio Kitagawa, Kanazawa Univ.