|
6.5 編譯與仿真設計工程 編寫代碼完成之后,一個很重要的工作就是驗證代碼功能的正確性,這就需要對代碼進行編譯與仿真。編譯主要是為了檢查代碼是否存在語法錯誤,仿真主要為了驗證代碼實現的功能是否正確。 編譯和仿真設計工程在整個設計中占有很重要的地位。因為代碼功能不正確或代碼的編寫風格不好對后期的設計會有很大的影響,所以需要花很多時間在設計工程的仿真上。 在這一節中將通過一個具體的實例來介紹如何對編譯工程代碼以及如何使用ISE自帶的仿真工具ISE Simulator進行仿真。 1.編譯工程代碼 編譯主要是為了檢測代碼是否存在語法錯誤。在ISE下,源代碼的編寫是在HDL Editor下完成的,但在HDL Editor下沒有專門用于編譯代碼的選項。不過在HDL Editor下完成代碼的編寫后,單擊“保存”按鈕,HDL Editor就會自動對代碼進行編譯。如果代碼存在語法錯誤,就會在信息顯示窗中顯示出來,用戶可以根據顯示的提示,查找語法錯誤并修改。 如圖6.17所示為在輸寫代碼時忘記分號,保存后就會有提示信息。 當不存在錯誤時,提示信息就不會出現“Warning”。ISE下對于代碼的編譯功能并不是很強大,有很多錯誤是檢測不出來的。例如在編寫Verilog代碼時,寫case語句時漏寫了end case語句,在HDL Editor下是檢查不出來的。但這些錯誤在仿真或綜合階段是可以檢測出來的,因此即使完成了編譯沒有錯誤,也一定要進行仿真,檢查是否還存在其他的錯誤。 2.仿真設計工程 這里以一個具體的實例來介紹ISE下自帶的仿真工具ISE Simulator的使用,代碼參見本書實例代碼。該例程的主要功能是根據撥碼開關(sw)輸入的值在數碼管(seg_led)上顯示相應的數值。 圖6.17 編譯后的出錯提示 ISE Simulator的使用主要是借助于ISE的輔助設計工具HDL Bencher(測試激勵生成器)來完成的。用戶將VHDL源代碼、Verilog源代碼或ECS原理圖等設計輸入導入工程后,用戶可以在圖形界面下編輯測試波形,HDL Bencher可以根據用戶編輯的測試波形自動生成測試激勵文件,然后調用ISE中的ISE Simulator進行仿真。可見使用ISE Simulator進行仿真主要分兩步。 (1)調用HDL Bencher,編輯測試波形,生成測試激勵文件。 (2)調用ISE Simulator對工程文件進行功能仿真和時序仿真。 下面對實例做詳細的介紹,具體步驟如下。 (1)啟動HDL Bencher。 首先打開實例工程,選擇“Project”/“New Source”,彈出新建資源的對話框,選擇“Test Bench Waveform”,輸入測試激勵波形文件名,如圖6.18所示。 單擊“下一步”按鈕為測試激勵文件選擇源文件,如圖6.19所示,選擇要測試的源代碼,單擊“下一步”按鈕。 圖6.18 新建測試測試激勵波形文件 圖6.19 為被測試的源文件對話框 單擊“完成”按鈕確認新建資源信息,HDL Bencher會自動啟動。 (2)波形編輯。 HDL Bencher啟動后首先出現如圖6.20所示的時鐘設置對話框。 圖6.20 時鐘設置對話框 如圖6.20所示,時鐘設置包括:時鐘的高電平持續時間(Clock Time High)、低電平持續時間(Clock Time Low)、建立時間(Input Setup Time)和保持時間(Output Valid Delay),系統為單時鐘(Single Clock)系統、多時鐘(Multiple Clocks)系統以及仿真時間和單位。這里設置的仿真時間表示仿真將持續多長時間后自動停止。 如果設計存在異步時序(Asynchronous Signal Support),還要對異步時鐘做相應的設置。這個設計中,只有同步時序,所以不選,與上表設置不一致之處請用戶自行修改。設置完畢單擊“OK”按鈕后系統會自動生成時鐘的波形,如圖6.21所示。 圖6.21 波形編輯界面 如圖6.21所示,設置好時鐘后,系統會自動生成時鐘波形。在如圖6.18所示的對話框中設置的“Initial Length of Test Bench”為1000ns,這里可以看到仿真在進行了1000ns后就自動停止了,雙擊“End Time”,會彈出如圖6.22所示的對話框,可以對仿真時間進行修改。 在設置好時鐘頻率、時鐘建立時間和保持時間后,如果要修改,選擇“Test Bench”/“Rescale Timing”會彈出如圖6.23所示對話框,可以對時鐘設置進行修改。 圖6.22 修改仿真時間對話框 圖6.23 修改時鐘設置對話框 這此設計中除時鐘信號外,rst和sw[7:0]為輸入信號,需要對rst和sw的波形進行編輯,編輯方法也比較簡單,單擊圖中的藍色區域就可以改變波形,根據仿真需要可任意設置波形,在這里設置仿真波形如圖6.24所示。 圖6.24 編輯波形圖 波形圖編輯完畢后,單擊“保存”按鈕,系統會為工程自動添加“test.tbw”文件。選中此文件,在當前資源操作(Process for Source)視窗中,可以看到“View Generated Test Bench As HDL”選項,如圖6.25所示。 圖6.25 生成測試激勵波形文件后的資源視窗 雙擊此選項,系統就會根據設置的波形自動生成測試激勵文件的源代碼,如圖6.26所示。 圖6.26 系統根據編輯的波形生成的測試代碼 (3)對設計工程進行功能仿真。 ISE Simulator中提供了兩種級別的仿真:功能仿真和布局布線后仿真,功能仿真可以驗證代碼功能的正確性,布局布線后生成的仿真時延文件包含的時延信息最全,不僅包含門延時,還包括實際布線延時,所以布線后仿真最準確,能較好地反映芯片的實際工作情況。 按上述步驟用HDL Bencher生成測試激勵波形文件后,就可對設計工程進行仿真了,首先驗證設計功能的正確性,先對工程進行功能仿真。 功能仿真時在工程資源(Sources in Project)視窗中選擇波形文件(test.tbw),在當前資源操作(Process for Source)視窗中,雙擊Simulate Behavioral Model(如圖6.25所示),得到功能仿真結果如圖6.27所示。 圖6.27 功能仿真結果 觀察波形時,左上角有幾個按鍵。單擊 可放置一條線,用于觀查某一特定時刻的值。 用于測量時間間隔。 用于尋找前一個或下一個信號上升沿,主要用于在測量時間間隔時,定位測量直線。 另外,ISE Simulator在仿真過程中會自動判斷仿真過程中是否會有錯誤發生,如果有錯誤發生,會在TX_ERROR下顯示出來,TX_ERROR會自動統計錯誤的個數并顯示,并且在SimConsole信號視窗中顯示正確的數值和實際仿真得到的數據,用戶可根據這些信息,對源代碼進行修改。 (4)布局布線后仿真。 功能仿真測試功能正確后,就可以按照ISE下FPGA的設計流程對工程進行綜合及布局布線。布局布線后,就可以對工程進行布局布線后仿真。 布局布線仿真時在工程資源(Sources in Project)視窗中選擇波形文件(test.tbw)。在當前資源操作(Process for Source)視窗中,雙擊Simulate Post-Place&Route Model(如圖6.25所示),得到布局布線后仿真結果如圖6.28所示。 圖6.28 布局布線后仿真結果 如圖6.28所示,布局布線后仿真結果與功能仿真結果相比,有了較大的延遲,這主要與代碼中組合邏輯設置有關,在布局布線仿真后,由于加入了延時信息可能會造成功能的不正確,用戶可以通過改寫代碼或添加相應的時序約束,來優化設計,布局布線后仿真在工程設計中占有很重要的地位,需要花很長時間來不斷地仿真和優化設計。 3.小結 本節通過一個具體的實例介紹了ISE下自帶仿真工具ISE Simulator的使用。ISE Simulator的特點是可以通過HDL Bencher在圖形界面下編輯波形,不需要用戶編寫測試代碼,使用方便。用戶也可以在HDL Bencher下完成波形編輯生成測試代碼后,調用ModelSim仿真。 通過這個例子,希望用戶能夠掌握ISE Simulator的基本用法,熟悉仿真的基本流程。仿真在FPGA的設計當中占有很重要位置,可以說設計者的大部分工作都是在做仿真,只有仿真結果達到要求了,才會映射到實際電路,然后在線調試。 在這里推薦大家自己編寫測試激勵文件。因為在一些復雜的設計當中,使用圖形界面編輯激勵波形是很難滿足設計要求的,無法對工程進行完整的測試。 另外,ModelSim是一款功能很強大的仿真軟件,支持混合仿真。在ISE下為ModelSim預留了接口,使用也很方便,目前應用比較廣泛。在初始學習階段可以使用ISE Simulator作一些簡單的仿真,熟悉FPGA的設計流程,等熟練之后,建議在ModelSim下完成仿真。 |