溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ModelSim軟件怎么理解

發布時間:2022-01-06 16:44:50 來源:億速云 閱讀:239 作者:柒染 欄目:互聯網科技

ModelSim軟件怎么理解,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

1,ModelSim軟件介紹  
Mentor 公司的 ModelSim 是工業界最優秀的語言仿真器,它支持 XP、Win7 和 Linux 系統,是單一內核支持 VHDL 和 Verilog 混合仿真的仿真器。它采用直接優化的編譯技術、Tcl/Tk 技術、單一內核仿真,不僅編譯仿真速度業界最快、編譯的代碼與平臺無關,而且便于保護 IP 核。它還提供了最友好的調試環境,具有個性化的圖形界面和用戶接口,為用戶加快調試提供強有力的手段,它是 FPGA/ASIC 設計的首選仿真軟件。
Modelsim 有幾種不同的版本:SE(System Edition)、DE(Deluxe Edition)、PE(Personal Edition)和 OEM(Orignal Equipment Manufactuce,即原始設備制造商),其中 SE 是最高級的版本,而集成在 Actel、Atmel、Altera、Xilinx 以及 Lattice 等 FPGA 廠商設計工具中的均是OEM 版本。我們這里選擇使用的是 Altera 公司提供的 OEM 版本,也就是我們常說的 ModelSim AE(即:ModelSim-Altera Edition)。下面我們給出 Altera 官方對 ModelSim AE 的介紹,如圖 所示。
 ModelSim軟件怎么理解
該圖中我們可以看出,Modelsim Altera 是有兩個版本的,一個是免費版本(ModelSim-Altera Starter Edition);一個是收費版本(ModelSim-Altera Edition)。由于圖中給出了收費版本和免費版本的區別,所以我們就不在進一步介紹它們了,這里我們說一下,ModelSim-Altera 版軟件與 ModelSim PE/DE 軟件的區別,ModelSim-Altera 版軟件僅支持 Altera 門級庫。ModelSim-Altera 版軟件包括 ModelSim PE 的基本特性,包括了行為仿真、HDL 測試臺和Tcl 腳本。但是,ModelSim-Altera 版軟件并不支持 ModelSim PE 的可選特性,ModelSimAltera 版的仿真性能要低于 ModelSim PE/DE 軟件。
2,ModelSim使用流程
介紹完了 ModelSim 軟件,接下來我們再來介紹一下 ModelSim 使用流程。在介紹 ModelSim的使用流程之前,我們需要對給大家說明一下仿真的兩個概念,仿真一般分為前仿真與后仿真:(1) 前仿真也就是純粹的功能仿真,主旨在于驗證電路的功能是否符合設計要求,其特點是不考慮電路門延遲與線延遲。(2) 后仿真也就是時序仿真。是指電路已經映射到特定的工藝環境下,綜合考慮電路的路徑延遲與門延遲的影響,驗證電路在一定時序條件下是否滿足設計構想的過程。說完了仿真的兩個概念,接下來我們在來說一說 ModelSim 的使用,ModelSim 的使用主要分為兩種情況,第一種就是通過 Quartus II 軟件調用我們的 ModelSim 來進行仿真,這種情況也就是我們通常所說的自動仿真。第二種情況就是直接打開 ModelSim 進行仿真,不經過我們的Quaruts II 軟件,這種情況也就是我們通常所說的手動仿真。不管是自動仿真還是手動仿真,它們的都遵循以下 5 個步驟:
      (1) 新建工程。
    (2) 編寫 Verilog 仿真文件。
    (3) 編寫 Testbench 仿真文件。   
     (4) 開始功能仿真。   
     (5) 開始時序仿真。
當我們執行了仿真以后,ModelSim 軟件會根據我們的設計文件和仿真文件生成波形圖,最后,我們觀察波形并判斷設計的代碼功能是否正常。前仿真完成以后,接下來我們就需要進行后仿真了,后仿真與前仿真的步驟大體相同,只不過中間需要添加仿真庫、網表和延時文件等步驟。這里我們要注意的是,對于時序要求不嚴格的小規模設計,我們一般只進行功能仿真。
【注】文章使用的源碼和testbench代碼如下:
源碼:
   
   
   
   
module Verilog_First        (          //輸入端口          CLK_50M,RST_N,            //輸出端口          LED1            );          //---------------------------------------------------------------------------        //--  外部端口聲明        //---------------------------------------------------------------------------        input       CLK_50M;    //時鐘的端口,開發板用的50M晶振        input      RST_N;      //復位的端口,低電平復位        output      LED1;      //對應開發板上的LED        
       //---------------------------------------------------------------------------        //--  內部端口聲明        //---------------------------------------------------------------------------        reg  [26:0]  time_cnt;    //用來控制LED閃爍頻率的定時計數器        reg      led_reg;    //用來控制LED亮滅的顯示寄存器        //設置定時器的時間為1s,計算方法為  (1*10^6)us / (1/50)us  50MHz為開發板晶振        //parameter SET_TIME_1S = 27'd49_999_999;                parameter SET_TIME_1S = 27'd49  ;    //用于仿真        //---------------------------------------------------------------------------        //--  邏輯功能實現          //---------------------------------------------------------------------------        //時序電路,實現1s的定時計數器        always @ (posedge CLK_50M or negedge RST_N)          begin          if(!RST_N)                //判斷復位            time_cnt  <=  27'h0;        //初始化time_cnt值          else if(time_cnt == SET_TIME_1S)    //判斷1s時間            time_cnt = 27'h0;        //如果到達1s,定時計數器將會被清零          else            time_cnt = time_cnt + 27'h2;//如果未到1s,定時計數器將會繼續累加        end        
       //---------------------------------------------------------------------------        //時序電路,判斷時間,控制LED的亮或滅        always @ (posedge CLK_50M or negedge RST_N)          begin          if(!RST_N)                //判斷復位            led_reg <=  1'b0;          //初始化led_reg值          else if(time_cnt == SET_TIME_1S)    //判斷1s時間            led_reg = ~led_reg;      //如果到達1s,顯示寄存器將會改變LED的狀態          else            led_reg = led_reg;        //如果未到1s,顯示寄存器將會將保持LED的原狀態        end        
       assign LED1 = led_reg;          //最后,將顯示寄存器的值賦值給端口LED1        
       endmodule          
testbench:    
   
   
   
   
`timescale 1 ps/ 1 ps        module Verilog_First_vlg_tst();        
       reg CLK_50M;        reg RST_N;        // wires                                                      wire LED1;        
       // assign statements (if any)                                  Verilog_First i1 (        // port map - connection between master ports and signals/registers            .CLK_50M(CLK_50M),          .LED1(LED1),          .RST_N(RST_N)        );        
       initial                                                      begin          #0 CLK_50M = 1'b0;          #10000 RST_N = 1'b0;          #10000 RST_N = 1'b1;          #10000000 $stop;        end        
       always #10000        begin          CLK_50M = ~CLK_50M;            end                                                          endmodule        

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女