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