更 新 日 期:

準備事項

範例程式下載 (一個Verilog寫的4-bit full-adder,與testbench)

本教學內容假設各位已經熟析Design Analyzer與ModelSim ... 

觀念介紹

NanoSimSynopsys發展的模擬軟體,可以用來做Timing / Power的模擬,是一種transistor level and dynamic simulator,並且可以做數位與類比整合的模擬(mixed netlists)。

下圖所示為各種軟體特性的示意 (資料來源:PrimePower Manual)

整個軟體運作時的輸出與輸入檔案如下所示:(資料來源:CIC NanoSim課程教材)

  • Netlist Files:HDL code經過合成後轉出的.v檔,或是類比電路跑HSPICE的.sp檔

  • Stimulus Files:HDL寫的testbench.v經過value change dump轉成.vcd,.vcd再經過VTRAN轉成vector file (.vec)
                            .vec 是讓軟體用來餵給netlist當input pattern用的

  • Configuration File:用來設定軟體模擬時,要擷取哪些點的哪些訊息(如電壓或電流),以儲存在.out與.log
                                 (如果是用GUI介面,可以不需要這個檔案)

  • Technology file:NanoSim uses a tech. file in place of MOS models during simulation

  • .out File  :執行模擬後的產出檔案,供turboWave直接讀取以顯示電壓/電流波形

  • .fsdb File:執行模擬後的產出檔案,供turboWave直接讀取以顯示電壓/電流波形

  • .log File  :模擬結果的輸出,裡面有耗電情況的report

由於NanoSim是Transistor-level simulator,要執行NanoSim有幾種方式

  • 提供類比電路的spice netlist (.sp or .spi)與MOS spice module (含電壓/溫度規格) -- 類比模擬

  • 提供數位電路的gate-level netlist (.v),cell-base spice simulation module (not cell-base Verilog simulation module)與MOS spice module (含電壓/溫度規格) -- 數位模擬 (官方使用說明)

  • 提供類比電路的spice netlist (.sp or .spi)與數位電路的gate-level netlist (.v),以VCS搭配NanoSim做類比與數位的混合模擬 (官方使用說明)

     由於CIC現有製程並無提供cell-base spice simulation module,所以第二種方法目前行不通

快速上手四部曲

  1. 由testbench產生.vcd (利用ModelSim or other HDL simulator)

  2. 再把.vcd轉成.vec (必須先編輯command file add4.vtran)

  3. 開啟GUI介面的NanoSim,並做設定

  4. 查看波形與報告結果 (利用turboWave or other waveform viwer)

NanoSim是一套功能很強大的軟體,其使用手冊依功能區分有十幾份,合計數千頁。本教學文件僅就其Logic Simulator的基本功能做初探,並做power模擬,可以參閱Tutorial : Simulating with Gate-Level Verilog Netlists。

範例程式裡幾個比較重要的檔案說明

add4test.v

testbench file of the design project

add4.v

The design project

add4_gate.v

after synthesis, the gate-level netlist of  the design project

add4.vcd

The value change dump file generated from ModelSim

supply.spi

SPICE file, to define power supply and temperature

cmos35t.mod

SPICE file / Technology file, to define MOS model

cfg

Configuration file

add4.vtran

command-file for vtran command to transfer .vcd into .vec

  1. 由testbench產生.vcd (利用ModelSim or other tools) 

1-1 在原本的testbench(add4test)裡,加入如下的一段敘述

    

    $dumpfile("xxx.vcd") -- 將所有dump的資料,存到某個檔案。(雙引號不可省)
    $dumpvars() -- 紀錄所有變數的變化情況(括號可省略)。括號內沒有指定變數,表示all variables都dump 

1-2 開啟ModelSim,建一個project,然後compile gate-level netlist (add4_gate.v) and testbench (add4test.v) with simulate module library

1-3 切換到Library標籤下,選擇work library展開,執行top module name "testbed"的simulate

1-4 執行Run後,就會產生add4.vcd檔。

在執行Run之前,要先確認ModelSim跑模擬的時間長,至少要超過testbench裡所設定的總時間,以此例而言是取250001 ns(因為在add4test.v中有一行  initial  #250000 $stop ;  );或是直接執行Simulate \ Run \ Run -All 也可以

  1. 把.vcd轉成.vec (必須先編輯command file add4.vtran ) 

執行 % vtran add4.vtran,就會產生add4.vec;
-- add4.vtran指定.vcd來源檔與.vec輸出檔名稱。

以上範例是一個最精簡的寫法,如果您有興趣想進一步了解如何寫cmd_file,請參閱VTRAN Manual (有280頁... )

從testbench.v --> .vcd --> .vec有點麻煩,其實最簡單的作法,可以利用$monitor/$fmonitor指令,直接從testbench產生.vec檔

  1. 開啟GUI介面的NanoSim,並做設定 

3-1 執行 % nanosimgui &
    
選擇 Setup a new simulation

3-2 指定工作路徑時,該路徑必須已經存在,若該路徑不存在,軟體不會自動幫你建。按Next後,會在工作目錄下新增一個"add4.wrk"檔,下一次開啟NanoSim可以在3-1步驟選擇"Open an existing simulation"開啟"add4.wrk"

3-3 Netlist & Stimulus settings

3-3-1 輸入類比電路的SPICE file(如果有),與MOS model與VDD / VSS設定

當你在右邊"SPICE Netlist File"欄位內選定檔案,左邊"SPICE Netlist File Type"欄位會自動顯示相對應的Type
Pre-layout SPICE netlist files設定欄位內,若要刪除一列的設定項,於項目編號上按滑鼠右鍵,選"Delete Row"

3-3-2 輸入合成後的gate-level netlist 與此design做合成時用的cell library路徑

3-3-3 指定gate-level netlist中的top module name,並指定configuration file路徑

為何這裡要用configuration file,而不直接在step 3-4, 3-5設定就好? 本configuration file內容如下...

      第2, 3行就是步驟3-5的設定,第一行我目前不知道要在視窗哪裡設定,而這一行的意思是什麼我也不太清楚
      但它會影響到做
Gate-Level Verilog Netlists simulation的結果(不信你把它拿掉看看會發生什麼事...)

3-3-4 輸入vector stimulus (.vec)

3-4 模擬前檢查所有的設定

3-5 按"Simulate"開始跑模擬

  1. 查看波形與報告結果 (利用turboWave or other waveform viwer)