仿真的概念
完成了設計輸入以及成功綜合、布局布線之后,只能說明設計符合一定的語法規范。但是是否滿足要求的功能,是不能保證的,還需要通過仿真流程對設計進行驗證。仿真的目的就是在軟件環境下,驗證電路的行為和設想的行為是否一致。
仿真分為功能仿真和時序仿真。
- (1)功能仿真(行為仿真,前仿真)
功能仿真是在設計輸入之后,還沒有綜合、布局布線之前的仿真,又稱為行為仿真和前仿真。此階段不考慮電路的邏輯門和寄存器之間的信號傳播延時,僅考慮理想狀態下,電路行為是否與設想的一致。如果設計功能都不能滿足,其他環節都無從談起。
使用modelsim進行功能仿真需要的文件:
- 功能模塊.v
- 測試激勵.vt // test bench
- (2)時序仿真(后仿真)
但是,僅僅功能仿真是無意義的,還需要時序仿真,亦稱為后仿真,是指在綜合、布局布線之后,考慮到電路已經映射到特定的工藝環境之后和器件延時的情況下對布局布線的網表文件經進行的仿真。其中器件延時信息是通過反標時序延時信息來實現的。如果在時序分析中發現時序不滿足需要,而更改代碼,則功能仿真必須更新進行。
使用modelsim進行功能仿真需要的文件:
- 功能模塊.v
- 測試激勵.vt // test bench
- 標准延時文件.sdo //聲明電路和門延時標准
- 功能模塊.vo //映射到布局布線之后的電路
- 自定義的延時文件.sdf //這個是可選的,自行編寫器件延時標准進行仿真, 即是上文提到的反標時序延時信息。
對於目前主流的altera FPGA器件而言,時序仿真已經被靜態時序分析取代。 只需要進行功能仿真,確保電路行為與預想的一致, 實際電路的走線延時/亞穩定狀態的問題交給STA(static timing analysis)來處理,通過timing report來分析和改善,不需要再人為的觀看仿真的波形,排查時序問題。
modelsim的使用
在此僅說明modelsim軟件的使用方式,至於test bench激勵文件的編寫不做介紹。
- 首先創建一個 modelsim的project。 File –> new –> project

- 請注意modelsim的這個project和quartus的project毫無關系,可以按自己的喜好命名、設置存放位置。

- 添加要進行仿真的模塊文件,包括.v和.vt

- 右鍵,編譯文件。
- 通過之后會在library的工作區中看到你添加進來的文件中包含的模塊
- 選擇對應的測試模塊,右鍵 simulate without optimization
- 在新出現的sim目錄中,右鍵add wave,將對應信號放到waveform視圖中。
- 根據自己的需要,開始run並觀察波形
