❶ VHDL 下如何實現在if語句下運行process
在VHDL編程中,if語句是一種順序執行的語句,而process語句則是一種並行執行的語句。process語句的主要作用是將順序描述的電路模塊轉化為並行描述,使其能夠更好地符合硬體並行工作的需求。因此,順序語句通常用於進程(process)或子程序中,而進程或子程序內部則不允許出現並行語句,因為這違背了硬體並行工作的基本原則。
如果在if語句中嘗試使用process語句,將會導致編譯錯誤。這是因為VHDL設計語言的規范要求,if語句只能包含順序執行的語句,而process語句是並行執行的,兩者不能混用。為了滿足硬體設計的需求,VHDL提供了一種特殊的語句結構,即sensitivity列表,可以將順序語句轉換成並行語句,從而實現對輸入信號的實時響應。
在實際編程中,開發者常常需要在if語句中進行邏輯判斷,然後根據不同的判斷結果執行不同的操作。這種情況下,可以使用VHDL提供的case語句或者generate語句來替代if語句,從而避免在if語句中嵌套process語句。通過合理地運用case語句或者generate語句,可以有效地實現順序邏輯和並行邏輯的混合編程,以滿足復雜硬體設計的需求。
值得注意的是,雖然if語句中不能直接嵌入process語句,但可以通過調用包含process語句的子程序或函數來實現復雜邏輯的並行執行。這種設計方法不僅提高了代碼的可讀性和可維護性,還能夠充分利用硬體的並行處理能力,從而提高整個設計的性能。
❷ 請求各位幫忙看一下到底是甚麼原因,VHDL會有這樣的錯誤訊息還有該怎麼改呢
以上是屬於多時鍾問題!在設計時往往會遇到這種情況,需要對外部某個輸入信號進行判斷,當其出現上跳或下跳沿時,執行相應的操作,而該信號不像正常時鍾那樣具有固定占空比和周期,而是很隨機,需要程序設計判斷其上跳沿出現與否。
http://blog.csdn.net/denghuanhuandeng/article/details/6877439
❸ 怎樣用modelsim做後模擬
step1:在qurtus改變編譯選項:
assignments->EDA tool setting:選擇verilog還是vhdl。
step2:編譯。你會在你的工程所在目錄 看到一個simulation的目錄,這裡面有你生成的網表文件和標准延時文件。
step3:在目錄:\quartus\eda\sim_lib找到你選用器件對應的庫文件,將庫文件和網表文件以及延時文件和testbench文件放在同一目錄,在modelsim里進行編譯庫文件、網表文件以及bench文件。
step4:編譯成功後,然後進行load,在load design的時候,需要制定延時文件的路徑,以及延時文件作用的區域,延時文件的左右區域就是testbench裡面調用頂層文件取的名字。
step5:打開signal窗口(view->signal)和wave窗口(view->signal),將你希望模擬的信號添加進去。
Step:模擬。。。
利用ModelSim SE6.0C實現時序模擬!!!
1) 打開一個工程文件。
2) 打開Settings設置欄,選擇EDA Tools Settings下的Simulation欄。在右邊出現的設置欄中將「Tool name」的下拉菜單選擇「ModelSim(Verilog)」(如果工程用VHDL語言實現,則可以選擇「ModelSim(VHDL)」;如果ModelSim使用的是for Altera的專用版本,則可以選擇「ModelSim-Altera(Verilog)」或「ModelSim-Altera(VHDL)」)。
另外在設置欄中還有其他的核選框。
如果選中「Maintain hierarchy」,則表示在做時序模擬時就能看到像在功能模擬的工程文件層次結構,可以找到定義的內部信號。因為在做後仿時,源文件中的信號名稱已經沒有了,被映射為軟體綜合後自己生成的信號名,觀察起來很不方便。這個設置與ISE里綜合右鍵屬性的Keep Hierarchy選擇YES的功能是一樣的。
如果選中「Generate netlist for functional simulation only」,則表示只能做功能模擬。
3) 點擊 「Start Compilation」按鈕編譯工程,完成之後在當前的工程目錄下可以看到一個名為「Simulation」的新文件夾,下面的「ModelSim」文件夾下包括模擬需要的.vo網表文件和包含延遲信息的.sdo文件。
4) 打開ModelSim軟體(或者在Quartus下「Settings->EDA Tools Setting->Simulation」出現的設置欄中選中「Run this tool automatically after compilation」,直接從Quartus下調用ModelSim軟體),可以在當前工程目錄下新建一個Project。在Project標簽欄內點擊右鍵,出現在快捷菜單中選擇「Add to Project->Existing File…」。加入當前工程目錄的「\Simulation\ModelSim\」路徑下的.vo文件、TestBench文件和對應當前工程所選擇器件的網表文件。
比如:當前工程選擇的器件是Cyclone系列,Quartus安裝目錄在「C:\altera」路徑下。因此需要在「C:\altera\quartus50\eda\sim_lib」路徑下找到「cyclone_atom.v」的網表文件導入到ModelSim下的Project。如果是其他器件亦是如此,只要在此目錄下找到對應有「_atom」後綴的.v文件。當然整個大前提是ModelSim SE版本已經加入了Alterta的模擬庫,不過ModelSim-Altera版本就不會存在這樣的問題。
5) 在出現的Project標簽欄的快捷菜單中選擇「Add to Project->Simulation Configuration」,會出現如上圖所示的名為「Simulation1」的模擬配置。右鍵點擊選擇「Properties」,彈出的「Simulation Properties」對話框中有幾個標簽欄。
在「Design」標簽欄內需要選擇模擬的文件,也就是TestBench文件。
在「SDF」標簽欄內需要選擇包含延遲信息的文件,即Quartus下生成的.sdo文件。這里建議將.sdo文件與ModelSim的工程文件(.mpf文件)放在同一個目錄下,不然ModelSim會報類似無法讀取.sdo文件的錯誤。當加入.sdo文件時,需要在如下圖所示的「Apply to Region」的編輯框內填寫延遲信息文件作用的區域。
舉個例子來說明:
TestBench文件中定義了測試文件的Mole名稱為ConvEncdTestBnch。
TestBench文件中調用待測頂層文件的實例名為top_encode_1。(top_encode top_encode_1(clk, rst, dataIn, serialData, parData);這是TestBench文件中調用頂層的語句)
所以在作用區域內需要填寫「/ConvEncdTestBnch/top_encode_1」。
6) 右鍵點擊名為「Simulation1」的模擬配置,快捷菜單中選擇「Execute」命令,執行模擬。
7) 指定延時文件sdo 路徑時,特別注意「域」的指定,否則用戶會在timing 模擬中報load error 「can』t find instance file」. 指定的域可以從sim標簽頁查看sim 的top 層,或要模擬的對象。另外,時序模擬時,一定要記住要把頂層top.v 用 top.vo 替換。同時要確保預編譯的庫中每個庫的名字必需遵循altera的要求,比如:cylcone 的device 庫必需命名為cycclone, maxii 的device命名為maxii, flex10Ke 和acex1K 都命名為flex10Ke,詳細查看文檔附件。Simulation.pdf
8) 提供一個testbench 的模板。
利用ModelSim SE6.0C實現功能模擬
功能模擬流程比較簡單,一般不會出現什麼問題,這里不再多述。