日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FPGA软件篇——Modelsim使用

發布時間:2024/1/1 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FPGA软件篇——Modelsim使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Modelsim仿真

目錄

  • Modelsim仿真
    • (一)Modelsim仿真基礎知識
      • 知識準備
        • 1.仿真分類
        • 2.RTL級與門級
        • 3.Testbench與HDL文件的關系
      • 步驟
    • (二)tb文件編寫
    • (三)手動仿真
    • (四)聯和仿真
        • 手動仿真與聯和仿真區別

(一)Modelsim仿真基礎知識

知識準備

? ? ? 我們知道進行FPGA開發的時候,用的某家的芯片,都會用這家的開發環境,他們都有自己的仿真器,Xilinx有ISE,Altera有Quartus II,但是這些廠家的仿真器是不如專業EDA廠家的仿真器好用,就比如HDL硬件描述語言仿真軟件工具Modelsim,如Modelsim AE(Altera Edition) 和 Modelsim XE(Xilinx Edition)。它是唯一的單內核支持VHDL和Verilog HDL 混合仿真的仿真器,在做FPGA和ASIC設計的時候,RTL級和門電路級電路仿真一般都會選擇Modelsim。編譯代碼與仿真平臺無關,便于保護IP核,同時定位編譯錯誤也很快。Modelsim SE是版本最高的,編譯速度最快。而上面提到的AE、XE輸入OEM版本,是專門集成在FPGA廠家設計工具中的版本。

1.仿真分類

1.前仿真,功能仿真: 純粹驗證電路功能是否符合要求,不考慮電路門延遲與線延遲。寫完HDL代碼后就可以直接仿真,在設計綜合之前,進行RTL級仿真。
2.后仿真,時序仿真: 真實反映時序的邏輯與功能,考慮電路門延遲與線延遲。這是在布局布線之后進行的。

2.RTL級與門級

? ? ? ? RTL級側重的是寄存器以及寄存器之間的邏輯,絕大多數的電路都可以看做是寄存器進行數據存儲,數據處理,處理的流程由時序狀態機控制,這些處理就可以用硬件描述語言來描述。

? ?  RTL級和門級區別在于,RTL是用硬件描述語言Verilog或VHDL描述,門級則是用集成好的具體的邏輯單元(依賴廠家的庫)來實現功能,門級設計完最后可以加工成實際的硬件。實際上,RTL和門級是設計實現上的不同階段,RTL經過邏輯綜合后,就得到門級。
  RTL描述可以表示為一個有限狀態機,或是一個可以在一個預定的時鐘周期邊界上進行寄存器傳輸的更一般的時序狀態機,用VHDL和Verilog兩種語言進行描述。
   RTL級與門級.

3.Testbench與HDL文件的關系


Design就是頂層RTL文件,TestBench提供時序,復位和觸發信號,Design的信號也可以被仿真軟件抓取到,是一個完整的閉環,而Monitor就是顯示,如波形等。

步驟

1.設置工作路徑
2.創建工程
3.編寫 Verilog 文件和 Testbench 仿真文件。
4.編譯(全編譯和單獨編譯)
5.啟動仿真器并加載設計頂層
6.運行仿真

補充一個編譯的小坑: output a; wire a; //這樣會報錯,因為output默認就是wire類型, //所以這樣編譯會報錯:重復定義。 只需要刪掉wire a即可。

此時執行完的仿真首先是能看到波形,判斷代碼功能是否正確,是功能仿真,之后,添加仿真庫、網表和延時文件,再進行 后仿真。

(二)tb文件編寫

以串口UART為例,編寫tb代碼

*************************************************************** 仿真文件中定義端口,在RTL文件中的input換為reg, output換為wire型。 以分號;結尾 *************************************************************** `timescale 1ns/1ns module uart_loopback_top_tb;reg sys_clk ; //外部50M時鐘reg sys_rst_n ; //外部復位信號,低有效reg uart_rxd ; //UART接收端口wire uart_txd ; //UART發送端口//初始化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( //例化習慣用_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工程,復制粘貼到另外一個地方照樣可以打開,但是Modelsim不行。
File——Change Directory——選擇路徑
2.創建新工程,輸入設計源文件
命名與tb文件相同;
Add Existing File,把tb文件和rtl的.v文件全部加載進來
修改文件內容:右擊文件——Edit——保存
編譯:某一文件右鍵——Compile All
3.啟動仿真 Start Simulation
Design、VHDL、Verilog、Libraries、SDF 和 Others共6個標簽。
用的最多的是 Design、Libraries 和 SDF 。
(1)Design:
Resolution 選項,這里可以選擇仿真的時間精度,一般都是默認;如果設計文件中沒有指定,則按 1ns 來進行仿真;
最下面的 Optimization使能優化,一定要去掉。

(2)Libraries
Search Libraries、Search Libraries First 功能基本一致,不同在于 Search Libraries First 中指定的庫會在指定的用戶庫之前被搜索。
(3)SDF 【Standard Delay Format(標準延遲格式)】
? ? ? ? 包含了各種延遲信息,用于時序仿真的重要文件。SDF Options 區域設置 SDF 文件的 warning 和 error 信息。“Disable SDF warning”是禁用 SDF警告,“Reduce SDF errors to warnings”是把所有的error變成warning 。
? ? ? ? Multi-Source delay 可以控制多個目標對同一端口的驅動,如果有多個控制信號同時控制同一個端口或互連,且每個信號的延遲值不同,可以使用此選項統一延遲。有三個選項:latest、min 和 max。latest選擇最后的延遲作為統一值,max選擇所有信號中延遲最大的值作為統一值,min選擇所有信號中延遲最小的值作為統一值。

都完成之后就可以點擊OK了,這里需要注意,在Design這里一定一定要選中tb文件再ok,否則出不來波形,我最開始就是這個錯誤,導致左側欄的文件都有錯誤。
OK之后,波形如下,信號的標注在左側,

4.觀察波形
波形縮小,看到如下,數據與tb文件中相同

  • 1.命令框的使用


就可以看到1us的波形了

  • 2.在這個頁面按Ctrl+G可以對信號進行排序

(四)聯和仿真

首先將ISE與Modelsim關聯起來…
然后,修改ISE中仿真工具

仿真只需要Synthesize即可。雙擊

之后, 彈出一個WARNING,點擊No即可。

手動仿真與聯和仿真區別

  • 手動仿真,頂層文件和例化的對應模塊的信號波形全都可以看見;在聯和仿真 只會看到在例化部分引出的信號的波形。
  • 有時直接把手動仿真寫的文件添加進來是無法聯和仿真的,只需要在ISE中新建一個tb文件,把代碼復制進去即可。
  • 至此,軟件篇就結束了。

    總結

    以上是生活随笔為你收集整理的FPGA软件篇——Modelsim使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。