FPGA软件篇——Modelsim使用
Modelsim仿真
目錄
- Modelsim仿真
- (一)Modelsim仿真基礎(chǔ)知識
- 知識準備
- 1.仿真分類
- 2.RTL級與門級
- 3.Testbench與HDL文件的關(guān)系
- 步驟
- (二)tb文件編寫
- (三)手動仿真
- (四)聯(lián)和仿真
- 手動仿真與聯(lián)和仿真區(qū)別
(一)Modelsim仿真基礎(chǔ)知識
知識準備
? ? ? 我們知道進行FPGA開發(fā)的時候,用的某家的芯片,都會用這家的開發(fā)環(huán)境,他們都有自己的仿真器,Xilinx有ISE,Altera有Quartus II,但是這些廠家的仿真器是不如專業(yè)EDA廠家的仿真器好用,就比如HDL硬件描述語言仿真軟件工具Modelsim,如Modelsim AE(Altera Edition) 和 Modelsim XE(Xilinx Edition)。它是唯一的單內(nèi)核支持VHDL和Verilog HDL 混合仿真的仿真器,在做FPGA和ASIC設(shè)計的時候,RTL級和門電路級電路仿真一般都會選擇Modelsim。編譯代碼與仿真平臺無關(guān),便于保護IP核,同時定位編譯錯誤也很快。Modelsim SE是版本最高的,編譯速度最快。而上面提到的AE、XE輸入OEM版本,是專門集成在FPGA廠家設(shè)計工具中的版本。
1.仿真分類
1.前仿真,功能仿真: 純粹驗證電路功能是否符合要求,不考慮電路門延遲與線延遲。寫完HDL代碼后就可以直接仿真,在設(shè)計綜合之前,進行RTL級仿真。
2.后仿真,時序仿真: 真實反映時序的邏輯與功能,考慮電路門延遲與線延遲。這是在布局布線之后進行的。
2.RTL級與門級
? ? ? ? RTL級側(cè)重的是寄存器以及寄存器之間的邏輯,絕大多數(shù)的電路都可以看做是寄存器進行數(shù)據(jù)存儲,數(shù)據(jù)處理,處理的流程由時序狀態(tài)機控制,這些處理就可以用硬件描述語言來描述。
? ? RTL級和門級區(qū)別在于,RTL是用硬件描述語言Verilog或VHDL描述,門級則是用集成好的具體的邏輯單元(依賴廠家的庫)來實現(xiàn)功能,門級設(shè)計完最后可以加工成實際的硬件。實際上,RTL和門級是設(shè)計實現(xiàn)上的不同階段,RTL經(jīng)過邏輯綜合后,就得到門級。
RTL描述可以表示為一個有限狀態(tài)機,或是一個可以在一個預(yù)定的時鐘周期邊界上進行寄存器傳輸?shù)母话愕臅r序狀態(tài)機,用VHDL和Verilog兩種語言進行描述。
RTL級與門級.
3.Testbench與HDL文件的關(guān)系
Design就是頂層RTL文件,TestBench提供時序,復(fù)位和觸發(fā)信號,Design的信號也可以被仿真軟件抓取到,是一個完整的閉環(huán),而Monitor就是顯示,如波形等。
步驟
1.設(shè)置工作路徑
2.創(chuàng)建工程
3.編寫 Verilog 文件和 Testbench 仿真文件。
4.編譯(全編譯和單獨編譯)
5.啟動仿真器并加載設(shè)計頂層
6.運行仿真
此時執(zhí)行完的仿真首先是能看到波形,判斷代碼功能是否正確,是功能仿真,之后,添加仿真庫、網(wǎng)表和延時文件,再進行 后仿真。
(二)tb文件編寫
以串口UART為例,編寫tb代碼
*************************************************************** 仿真文件中定義端口,在RTL文件中的input換為reg, output換為wire型。 以分號;結(jié)尾 *************************************************************** `timescale 1ns/1ns module uart_loopback_top_tb;reg sys_clk ; //外部50M時鐘reg sys_rst_n ; //外部復(fù)位信號,低有效reg uart_rxd ; //UART接收端口wire uart_txd ; //UART發(fā)送端口//初始化initial begin sys_clk <= 1'b0; sys_rst_n <= 1'b0; //初始化賦值為0uart_rxd <= 1'b1; //因為rxd是拉低一段時間之后表示start,所以初始化要拉高#100 sys_rst_n <= 1'b1; //為了避免競爭冒險,先延遲10ns再來下降沿#10 uart_rxd <= 1'b0; *************************************************************** 50M/115200 = 434個時鐘周期,也就是說一個01信號要等待434個時鐘周期才是一個有效的01信號。而一個時鐘周期是20ns,所以434*20ns = 8680ns ***************************************************************#8680 uart_rxd <= 1'b1; //因為是模擬,隨意賦值,一共八句#8680 uart_rxd <= 1'b0; #8680 uart_rxd <= 1'b1; #8680 uart_rxd <= 1'b0; #8680 uart_rxd <= 1'b1; #8680 uart_rxd <= 1'b1; #8680 uart_rxd <= 1'b0; #8680 uart_rxd <= 1'b0; //停止位 #8680 uart_rxd <= 1'b1; end*************************************************************** 之后,需要將對象例化進來 *************************************************************** uart_loopback_top uart_loopback_top_u( //例化習(xí)慣用_u命名.sys_clk (sys_clk) , .sys_rst_n (sys_rst_n) ,.uart_rxd (uart_rxd) , .uart_txd (uart_txd) );//生成50M的時鐘 always #10 sys_clk = ~sys_clk; endmodule(三)手動仿真
1.選擇路徑
Modelsim必須是絕對路徑,也就是必須是原來的路徑才能工作,不想ISE工程,復(fù)制粘貼到另外一個地方照樣可以打開,但是Modelsim不行。
File——Change Directory——選擇路徑
2.創(chuàng)建新工程,輸入設(shè)計源文件
命名與tb文件相同;
Add Existing File,把tb文件和rtl的.v文件全部加載進來
修改文件內(nèi)容:右擊文件——Edit——保存
編譯:某一文件右鍵——Compile All
3.啟動仿真 Start Simulation
Design、VHDL、Verilog、Libraries、SDF 和 Others共6個標簽。
用的最多的是 Design、Libraries 和 SDF 。
(1)Design:
Resolution 選項,這里可以選擇仿真的時間精度,一般都是默認;如果設(shè)計文件中沒有指定,則按 1ns 來進行仿真;
最下面的 Optimization使能優(yōu)化,一定要去掉。
(2)Libraries
Search Libraries、Search Libraries First 功能基本一致,不同在于 Search Libraries First 中指定的庫會在指定的用戶庫之前被搜索。
(3)SDF 【Standard Delay Format(標準延遲格式)】
? ? ? ? 包含了各種延遲信息,用于時序仿真的重要文件。SDF Options 區(qū)域設(shè)置 SDF 文件的 warning 和 error 信息。“Disable SDF warning”是禁用 SDF警告,“Reduce SDF errors to warnings”是把所有的error變成warning 。
? ? ? ? Multi-Source delay 可以控制多個目標對同一端口的驅(qū)動,如果有多個控制信號同時控制同一個端口或互連,且每個信號的延遲值不同,可以使用此選項統(tǒng)一延遲。有三個選項:latest、min 和 max。latest選擇最后的延遲作為統(tǒng)一值,max選擇所有信號中延遲最大的值作為統(tǒng)一值,min選擇所有信號中延遲最小的值作為統(tǒng)一值。
都完成之后就可以點擊OK了,這里需要注意,在Design這里一定一定要選中tb文件再ok,否則出不來波形,我最開始就是這個錯誤,導(dǎo)致左側(cè)欄的文件都有錯誤。
OK之后,波形如下,信號的標注在左側(cè),
4.觀察波形
波形縮小,看到如下,數(shù)據(jù)與tb文件中相同
- 1.命令框的使用
就可以看到1us的波形了
- 2.在這個頁面按Ctrl+G可以對信號進行排序
(四)聯(lián)和仿真
首先將ISE與Modelsim關(guān)聯(lián)起來…
然后,修改ISE中仿真工具
仿真只需要Synthesize即可。雙擊
之后, 彈出一個WARNING,點擊No即可。
手動仿真與聯(lián)和仿真區(qū)別
至此,軟件篇就結(jié)束了。
總結(jié)
以上是生活随笔為你收集整理的FPGA软件篇——Modelsim使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机类参加比赛GMC,我校学生获得第1
- 下一篇: python可视化——生成HTML文件