《Xilinx FPGA設(shè)計基礎(chǔ)》課件第6章_第1頁
《Xilinx FPGA設(shè)計基礎(chǔ)》課件第6章_第2頁
《Xilinx FPGA設(shè)計基礎(chǔ)》課件第6章_第3頁
《Xilinx FPGA設(shè)計基礎(chǔ)》課件第6章_第4頁
《Xilinx FPGA設(shè)計基礎(chǔ)》課件第6章_第5頁
已閱讀5頁,還剩248頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第6章VHDL程序設(shè)計實驗6.1實驗一層次化工程的創(chuàng)建6.2實驗二仿真測試平臺的創(chuàng)建6.3實驗三存儲器和記錄類型實驗6.4實驗四n比特計數(shù)器及RTL驗證實驗

6.5實驗五比較器實驗6.6實驗六算術(shù)邏輯單元實驗6.7實驗七狀態(tài)機實驗6.8實驗八計數(shù)器實驗6.9實驗九IP核應(yīng)用實驗6.10實驗十數(shù)字時鐘管理IP核實驗

6.1實驗一層次化工程的創(chuàng)建

6.1.1實驗介紹

本實驗將完成兩個實體MY_AND2和MY_OR2的RTL描述,并用結(jié)構(gòu)化的描述方式描述如圖6.1所示電路的頂層模塊AND_OR。實驗中默認的文件夾為\VHDL_LABS\,讀者可以在任意位置創(chuàng)建文件夾VHDL_LABS。圖6.1AND_OR的層次結(jié)構(gòu)6.1.2實驗?zāi)繕?/p>

●熟悉簡單邏輯門的RTL描述;

●創(chuàng)建簡單電路的結(jié)構(gòu)化描述;

●用VHDL創(chuàng)建層次結(jié)構(gòu)描述;

●熟悉ISE集成環(huán)境中的HDL編輯器。

6.1.3實驗過程

本實驗包含三個主要的部分:使用ISE集成環(huán)境創(chuàng)建一個新的工程;完成邏輯門的RTL描述;檢查代碼中的語法錯誤并生成原理圖。每個部分都有對應(yīng)的詳細步驟,并有圖表輔助說明步驟的內(nèi)容。讀者可以按照詳細步驟一步一步完成實驗,也可以按照大的實驗部分自行完成。6.1.4實驗步驟

1.創(chuàng)建一個新的工程

在\VHDL_LABS\目錄下創(chuàng)建一個新的工程,新工程命名為LAB1。具體操作步驟如下:

(1)選擇“開始→所有程序→XilinxISE9.1i”或直接雙擊桌面上XilinxISE9.1i的圖標,打開ISE9.1i集成環(huán)境。

(2)在ISE中,選擇菜單欄中的File→NewProject,打開創(chuàng)建新工程界面,如圖6.2所示。圖6.2創(chuàng)建新工程界面

(3)在ProjectName中填入工程名LAB1,在ProjectLocation中填入工程所在文件夾\VHDL_LABS\LAB1。

(4)單擊Next按鈕。

(5)在圖6.3中填入如下參數(shù):

Family:Spartan3;

Device:XC3S200;

Package:PQ208;

Speed:-5。

(6)單擊Next按鈕,在CreateNewSource窗口和AddExistingSources窗口中都不做任何操作,在ProjectSummary窗口中確認工程信息后,單擊Finish按鈕完成新工程的創(chuàng)建。圖6.3工程屬性參數(shù)

2.邏輯門的RTL描述

編寫MY_AND2實體的VHDL代碼。

(1)選擇菜單欄中的Project→NewSource。

(2)在SelectSourceType窗口中,選擇左側(cè)VHDLModule,在右側(cè)FileName欄中填入文件名MY_AND2,單擊Next按鈕后彈出DefineModule窗口,如圖6.4所示。圖6.4輸入模塊的相關(guān)參數(shù)

(3)輸入模塊的ArchitectureName和端口參數(shù),如圖6.4所示。

(4)輸入完成后單擊Next按鈕,確認模塊參數(shù)后,單擊Finish按鈕。

新文件生成向?qū)凑沼脩糨斎氲膮?shù)創(chuàng)建新文件,但是完成向?qū)У牟僮骱?,對文件的全部后續(xù)修改都只能在HDL編輯器中修改。

(5)用VHDL的邏輯運算操作符和直接代入語句描述邏輯門的功能,即C<=AandB。用戶可以對照實驗后面給出的代碼做相應(yīng)的修改。

編寫MY_OR2和AND_OR模塊的VHDL代碼。

(1)重復(fù)上面的步驟完成MY_OR2.VHD和AND_OR.VHD代碼的編寫。

(2)將AND_OR.VHD的輸入定義為一個總線,即STD_LOGIC_VECTOR類型。

(3)在AND_OR模塊中,必須聲明和例化被調(diào)用的下層模塊MY_AND2和MY_OR2。

(4)在AND_OR模塊中,必須顯式地定義用于下層模塊互聯(lián)的連線信號。

(5)?MY_OR2和AND_OR模塊的代碼可以參照本實驗后面給出的代碼實例。

3.語法檢查并生成原理圖

檢查所寫代碼中的語法。

(1)在ISE的Sources窗口中選中AND_OR模塊,在Processes窗口中,展開Synthesize,雙擊CheckSyntax,如圖6.5所示。圖6.5語法檢查

(2)如果語法檢查有錯誤,修正相應(yīng)的錯誤。

語法檢查成功并不能說明設(shè)計文件中沒有任何問題,設(shè)計文件的問題有可能在綜合或后續(xù)的一些操作中才會被檢測出。

將設(shè)計文件生成對應(yīng)的原理圖,直觀地檢查設(shè)計是否滿足最初的設(shè)計要求。在生成原理圖的過程中,ISE同時會對工程做綜合。在綜合的過程中,ISE有可能會對設(shè)計文件的一些問題報錯,如果出現(xiàn)錯誤,請對照修正。

(1)在Sources窗口中,選中AND_OR.VHD,在Processes窗口中,展開Synthesis,雙擊ViewRTLSchematic,如圖6.6所示。圖6.6查看原理圖

AND_OR模塊對應(yīng)的頂層原理圖如圖6.7所示,雙擊AND_OR模塊的圖示,可以看到AND_OR底層的電路。圖6.7AND_OR的原理圖

AND_OR的底層電路如圖6.8所示。

(2)如果電路圖與設(shè)計的預(yù)期結(jié)構(gòu)不同,可以從設(shè)計源文件中修改。

(3)讀者可以在圖6.6的Processes窗口中雙擊ViewTechnologySchematic查看設(shè)計文件在XilinxFPGA器件中的綜合后實現(xiàn)方法。圖6.8AND_OR的底層電路6.1.5實驗總結(jié)

在本實驗中,我們創(chuàng)建了一個簡單的邏輯門模塊,這個模塊在上層的模塊中被調(diào)用,模塊之間通過信號相連。讀者通過這個簡單的實驗,接觸了使用VHDL編程的一些基本技術(shù)和方法,這些方法會在后續(xù)的工程中經(jīng)常使用。

6.1.6實驗中的代碼

本實驗中會用到3個文件,文件對應(yīng)的代碼分別如下:

6.2實驗二仿真測試平臺的創(chuàng)建

6.2.1實驗介紹

本實驗將對實驗一中的AND_OR模塊建立一個測試平臺文件,并進行仿真驗證。仿真平臺框架如圖6.9所示。作為測試平臺的一部分,讀者將學(xué)會如何用并發(fā)描述語句和順序描述語句創(chuàng)建一個簡單的輸入激勵。圖6.9AND_OR的測試平臺框架6.2.2實驗?zāi)繕?/p>

●創(chuàng)建一個測試平臺文件,測試實驗一中的AND_OR模塊,驗證其正確性;

●學(xué)習(xí)ISE9.1i中的測試平臺向?qū)В?/p>

●建立基本的輸入激勵;

●學(xué)習(xí)仿真驗證的方法。

6.2.3實驗過程

本實驗包含四個主要的部分:創(chuàng)建一個新的工程,并導(dǎo)入VHDL源文件;用ISE中的測試平臺向?qū)蓽y試平臺文件;創(chuàng)建并發(fā)和順序描述的輸入激勵語句;最后運行仿真,驗證邏輯的正確性,并通過仿真波形,驗證設(shè)計的功能是否正確。6.2.4實驗步驟

1.創(chuàng)建一個新的工程

在\VHDL_LABS\目錄下創(chuàng)建一個新的工程,新工程命名為LAB2,并導(dǎo)入已有的VDHL程序。具體操作步驟如下:

(1)選擇“開始→所有程序→XilinxISE9.1i”或直接在桌面雙擊XilinxISE9.1i的圖標,打開ISE9.1i集成環(huán)境。

(2)在ISE中,選擇菜單欄中的File→NewProject打開創(chuàng)建新工程界面,ProjectName中填入工程名LAB2,在ProjectLocation中填入工程所在文件夾\VHDL_LABS\LAB2。

(3)在DeviceProperties窗口中,填寫與實驗一中相同的屬性配置。

(4)單擊Next按鈕,在CreateNewSource窗口和AddExistingSources窗口中不做任何操作,在ProjectSummary窗口中確認工程信息后,單擊Finish按鈕完成新工程的創(chuàng)建。

(5)選擇菜單欄中的Porject→AddCopyofSource。

(6)文件查找路徑選擇為\VHDL_LABS\LAB1,選擇已存在的三個文件AND_OR,MY_AND2,MY_OR2,然后單擊Open按鈕。

(7)?ISE會自動檢測加入的文件,如圖6.10所示。單擊OK按鈕,確認添加的文件。圖6.10加入源文件

2.創(chuàng)建一個測試平臺文件

使用測試平臺向?qū)梢粋€測試平臺文件。

(1)選擇菜單欄中的Project→NewSource。

(2)在SelectSourceType窗口中,左側(cè)選擇VHDLTestBench,右側(cè)FileName欄中填入文件名AND_OR_TB,如圖6.11所示。

(3)單擊Next按鈕,軟件會彈出一個界面,詢問測試平臺文件與哪個設(shè)計文件關(guān)聯(lián)。

(4)選擇頂層模塊AND_OR,單擊Next按鈕,確認文件信息后,單擊Finish按鈕,完成文件的創(chuàng)建。圖6.11源文件類型選擇向?qū)е链?,我們已?jīng)設(shè)計好了測試平臺文件的框架。ISE的測試平臺文件向?qū)ё詣訛槲覀兺瓿闪藴y試平臺文件的結(jié)構(gòu)設(shè)計。在ISE的Sources窗口中,選擇Sourcesfor欄的BehavioralSimulation,用戶可以在Sources窗口中看到AND_OR_TB文件,雙擊這個文件,可以查看文件的內(nèi)容。

測試平臺文件包括以下幾部分:

●被測試的頂層元件聲明;

●頂層的信號聲明;

●元件例化與端口映射;

●測試激勵輸入的外部描述結(jié)構(gòu)。

3.創(chuàng)建簡單的輸入激勵

用并發(fā)描述語句和順序描述語句創(chuàng)建簡單的測試輸入激勵。測試源需要對總線INP(3downto0)的信號單獨輸入測試激勵,因此首先要將INP的信號分開,這里用兩組信號分別與INP的不同信號相連,便于分別驅(qū)動。

(1)在AND_OR_TB文件的Architecture中加入兩個信號定義:

signalA_STIM,B_STIM:STD_LOGIC_VECTOR(1downto0);

(2)在Architecture聲明后,在begin之后插入下面的直接代入語句:

INP<=A_STIM&B_STIM;

(3)參考本實驗后面的代碼對A_STIM和B_STIM分別輸入獨立的測試激勵。

4.驗證AND_OR的邏輯結(jié)構(gòu)

運行仿真,查看仿真波形,驗證設(shè)計的功能正確性。

(1)在完成了AND_OR_TB.VHD測試平臺文件的編寫之后,在Sources窗口的Sourcesfor欄中選擇BehavioralSimulation,并在文件樹中選擇AND_OR_TB.vhd,在Processes窗口中雙擊CheckSyntax,如圖6.12所示。

(2)如果發(fā)現(xiàn)有語法錯誤,請修正錯誤后繼續(xù)進行下面的步驟。圖6.12對仿真平臺文件做語法檢查

(3)在Processes窗口中,雙擊SimulateBehavioralModel,ISE將會自動進行仿真,如果沒有錯誤,仿真后的波形應(yīng)如圖6.13所示。圖6.13AND_OR_TB仿真波形注意:在圖6.13左側(cè)的Processes窗口中,會出現(xiàn)一個SimHierarchy選項卡,這個層次結(jié)構(gòu)即為AND_OR_TB測試平臺的層次結(jié)構(gòu)。用戶可以展開這個仿真層次,然后選中設(shè)計文件中任一層次的任一信號,將其拖入波形窗口中,查看仿真結(jié)果。

開始仿真后,在ISE的菜單欄中會出現(xiàn)一個Simulate菜單,與其相應(yīng)的,在工具欄中會出現(xiàn)仿真工具,如圖6.14所示。圖6.14工具欄中的仿真工具6.2.5實驗總結(jié)

在本實驗中,我們創(chuàng)建了一個測試平臺,并對實驗一中的AND_OR模塊進行了驗證。這個測試平臺雖然簡單,但包含了一般仿真過程的基本步驟。在后續(xù)的實驗中,還會在測試平臺文件中加入更多的功能和特性。

6.2.6實驗中的代碼

文件對應(yīng)的代碼如下:

6.3實驗三存儲器和記錄類型實驗

6.3.1實驗介紹

本實驗將完成圖6.15所示的結(jié)構(gòu)中MEM部分的模塊。實驗內(nèi)容主要涉及記錄(record)數(shù)據(jù)類型的使用方法,以及如何以此為基礎(chǔ),用二維數(shù)組描述一個存儲器。圖6.15簡單的計數(shù)器6.3.2實驗?zāi)繕?/p>

●用記錄(record)數(shù)據(jù)類型創(chuàng)建一個用戶自定義的RAM結(jié)構(gòu);

●創(chuàng)建計數(shù)器的第一個元件;

●多種VHDL數(shù)據(jù)類型的復(fù)合使用;

●驗證邏輯結(jié)構(gòu)。

6.3.3實驗過程

本實驗包含三個主要的部分:創(chuàng)建一個新的ISE工程;創(chuàng)建一個VHDL的包集合,包集合中定義了用戶自定義的記錄(record)數(shù)據(jù)類型;最后用這個記錄(record)數(shù)據(jù)類型創(chuàng)建一個二維的存儲器數(shù)組。6.3.4實驗步驟

1.創(chuàng)建一個新的工程

在\VHDL_LABS\目錄下創(chuàng)建一個新的工程,新工程命名為LAB3。具體操作步驟如下:

(1)選擇“開始→所有程序→XilinxISE9.1i”或直接在桌面雙擊XilinxISE9.1i的圖標,打開ISE9.1i集成環(huán)境。

(2)在ISE中,選擇菜單欄中的File→NewProject,打開創(chuàng)建新工程界面,ProjectName中填入工程名LAB3,在ProjectLocation中填入工程所在文件夾\VHDL_LABS\LAB3。

(3)在DeviceProperties窗口中,填寫與實驗一中相同的屬性配置。

(4)單擊Next按鈕,在CreateNewSource窗口和AddExistingSources窗口中都不做任何操作,在ProjectSummary窗口中確認工程信息后,單擊Finish按鈕完成新工程的創(chuàng)建。

2.創(chuàng)建一個包含記錄(record)數(shù)據(jù)類型的包集合

創(chuàng)建一個包集合,并在包集合中包含用戶自定義的記錄(record)數(shù)據(jù)類型。

(1)選擇菜單欄的Project→NewSource。

(2)在SelectSourceType窗口中,選擇左側(cè)的VHDLPackage,在右側(cè)FileName欄中填入文件名CALC1_PACKAGE。

(3)單擊Next按鈕,文本編輯框中即顯示已創(chuàng)建好的包集合模板。這個包集合模板中包含了各種常用的聲明語句,在使用時可能感覺比較繁雜,由于本實驗只定義一個記錄(record)數(shù)據(jù)類型,讀者可以只保留包集合模板中package和endpackage的聲明語句,其他語句都刪掉。

(4)將包集合命名為CALC1_PAK。

(5)創(chuàng)建一個記錄,命名為MY_RECORD,MY_RECORD包含以下元素:

3.創(chuàng)建一個二維存儲器數(shù)組

用已定義好的MY_RECORD類型聲明一個二維存儲器數(shù)組。

(1)選擇菜單欄中的Project→NewSource;

(2)在SelectSourceType窗口中,選擇左側(cè)的VHDLModule,在右側(cè)FileName欄中填入文件名MEM,單擊Next按鈕進入端口定義窗口DefineModule。

(3)在DefineModule窗口中輸入下面的端口定義:

ADDR:in

STD_LOGIC_VECTOR(2downto0);

EN:in

STD_LOGIC;

DATA_FRAME:outMY_RECORD;注意:在DefineModule窗口中是無法定義MY_RECORD類型的,窗口中的端口默認為STD_LOGIC和STD_LOGIC_VECTOR類型的數(shù)據(jù)。DATA_FRAME的數(shù)據(jù)類型需要在文件生成好后,在文本編輯器中修改。

(4)在MEM的庫和包集合使用聲明中,加入對CALC1_PAK的使用聲明。

(5)在結(jié)構(gòu)體中定義一個二維存儲器類型ROM_ARRAY,ROM_ARRAY類型中包含6個MY_RECORD類型的數(shù)據(jù)。

(6)聲明一個ROM_ARRAY類型的常量MY_ROM,并對其進行初始化。

(7)在結(jié)構(gòu)體的進程中,用MY_ROM中的數(shù)據(jù)對輸出端口賦值,讀者可以參考本實驗后面的實驗代碼完成此步驟。

語法檢查:

(1)在Sources窗口中選擇MEM.VHD,在Processes窗口中雙擊CheckSyntax。

(2)如果語法檢查有錯誤,請修正錯誤后繼續(xù)進行下面的步驟。

注意:如果此時查看MEM對應(yīng)的RTL原理圖,讀者會看到這個原理圖并不完整,這是由于存儲器中全部的值都是常量,而且沒有做任何的處理,綜合器在綜合時將電路做了優(yōu)化。6.3.5實驗總結(jié)

在本實驗中,我們首先創(chuàng)建了一個包集合,包集合中的內(nèi)容將會在后續(xù)的設(shè)計中經(jīng)常用到;之后,創(chuàng)建了一個用戶自定義的記錄類型,并以此為基礎(chǔ)定義了一個二維存儲數(shù)組類型。存儲器內(nèi)部的值設(shè)置為常量,我們會在后續(xù)的實驗中修改存儲器中的值。

6.3.6實驗中的代碼

文件對應(yīng)的代碼如下:

6.4實驗四n比特計數(shù)器及RTL驗證實驗

6.4.1實驗介紹

本實驗將完成圖6.16中MY_CNTR計數(shù)器的RTL描述,計數(shù)器的位寬用generic語句設(shè)置為參數(shù)。MY_CNTR是一個n比特二進制的計數(shù)器,可以向上向下計數(shù),并可設(shè)置計數(shù)值,計數(shù)器用異步的方式進行低電平復(fù)位。實驗的后半部分將會建立一個測試平臺,測試計數(shù)器的RTL代碼是否能夠完成既定的功能。圖6.16n比特計數(shù)器6.4.2實驗?zāi)繕?/p>

●創(chuàng)建、仿真并驗證n比特二進制計數(shù)器的RTL代碼;

●在ISE中使用語法模板;

●使用VHDL中的generic語句。

6.4.3實驗過程

本實驗包含三個主要的部分:創(chuàng)建一個新的ISE工程;用generic語句聲明參數(shù);創(chuàng)建一個測試平臺驗證設(shè)計文件的正確性。

6.4.4實驗步驟

1.創(chuàng)建一個新的工程

在\VHDL_LABS\目錄下創(chuàng)建一個新的工程,新工程命名為LAB4。具體操作步驟如下:

(1)選擇“開始→所有程序→XilinxISE9.1i”或直接在桌面雙擊XilinxISE9.1i的圖標,打開ISE9.1i集成環(huán)境。

(2)在ISE中,選擇菜單欄中的File→NewProject打開創(chuàng)建新工程界面,在ProjectName中填入工程名LAB4,在ProjectLocation中填入工程所在文件夾\VHDL_LABS\LAB4。

(3)在DeviceProperties窗口中,填寫與實驗一中相同的屬性配置。

(4)單擊Next按鈕,在CreateNewSource窗口和AddExistingSources窗口中都不做任何操作,在ProjectSummary窗口中確認工程信息后,單擊Finish按鈕完成新工程的創(chuàng)建。

2.用generic語句聲明參數(shù)

創(chuàng)建MY_CNTR實體。

(1)選擇菜單欄中的Project→NewSource。

(2)在SelectSourceType窗口的左側(cè)選擇VHDLModule,在右側(cè)FileName欄中填入文件名MY_CNTR。

(3)單擊Next按鈕,進入DefineModule窗口。

(4)在DefineModule窗口中輸入圖6.16所示的輸入/輸出端口定義,其中只有D_IN和Q_OUT是位寬為參數(shù)的總線,其他端口都為單根信號,單擊Next按鈕,確認模塊信息后單擊Finish按鈕完成模塊的生成。

在DefineModule中不能使用generic語句定義模塊的參數(shù),模塊的參數(shù)需要在文本編輯器中添加和修改。本實驗中的功能語句將需要用到數(shù)組的算術(shù)運算,因此要聲明使用IEEE的兩個包集合IEEE.STD_LOGIC_UNSIGNED.ALL和IEEE.STD_LOGIC_ARITH.ALL。

模塊生成向?qū)Р恢С帜K的參數(shù)定義,因此需要手工輸入。

(1)使用VHDL中的generic語句將模塊的端口位寬定義為參數(shù),參數(shù)的類型定義為整數(shù)類型,默認值為8。

(2)端口位寬的參數(shù)名用戶可以自行定義。

模塊的實體定義完成之后,需要定義模塊的結(jié)構(gòu)體實現(xiàn)。

(1)在結(jié)構(gòu)體內(nèi),用if/else語句描述計數(shù)器的功能實現(xiàn)。在描述功能實現(xiàn)時,讀者首先需要考慮這些控制信號的優(yōu)先級,然后考慮在設(shè)定的優(yōu)先級情況下如何描述計數(shù)器的功能實現(xiàn)。

ISE的VHDL語言模板中已經(jīng)定義了一個計數(shù)器的模板,讀者可以直接拷貝模板程序,然后做一些簡單的修改。選擇菜單欄中的Edit→LanguageTemplates,如圖6.17所示,即可打開計數(shù)器的模板。圖6.17VHDL中的計數(shù)器模板

(2)在結(jié)構(gòu)體中聲明一個信號,信號的位寬為8,用參數(shù)聲明信號的位寬,信號名稱定義為COUNT。在時序進程中,將控制這個信號的值。

(3)在進程外,用COUNT對模塊的端口Q_OUT賦值,即Q_OUT<=COUNT。

(4)復(fù)位時,用下面的語句對COUNT信號賦值:

COUNT<=(others=>'0');

使用這種方式賦值時,設(shè)計者不需要關(guān)注信號的實際位寬。這是增強程序靈活性的一種重要方法,因為在使用generic語句時,端口的位寬可以是任意長度。這一步完成后,MY_CNTR的源代碼就編寫完成了,如果讀者對代碼仍有疑問,可以參考本實驗后面的實驗代碼部分完成代碼的編寫。

語法檢查:

(1)在Sources窗口中選中MY_CNTR.VHD,在Processes窗口中展開Synthesis,并雙擊CheckSyntax。

(2)雙擊ViewRTLSchematic驗證綜合器是否將代碼綜合為一個二進制計數(shù)器。

(3)如果代碼中有語法錯誤,請修正錯誤后繼續(xù)執(zhí)行下面的步驟。

3.創(chuàng)建測試平臺

建立測試平臺并驗證計數(shù)器的功能是否滿足設(shè)計需求。

(1)選擇菜單欄中的Project→NewSource。

(2)在SelectSourceType窗口中,選擇左側(cè)的VHDLTestBench,在右側(cè)FileName欄中填入文件名MY_CNTR_TB。

(3)單擊Next按鈕,軟件彈出一個界面,詢問測試平臺文件與哪個設(shè)計文件關(guān)聯(lián),選擇MY_CNTR。

與之前的實驗相同,測試平臺生成向?qū)б呀?jīng)為用戶搭建好了測試平臺的框架,設(shè)計者可以只關(guān)注于測試輸入激勵。

測試平臺向?qū)傻奈募蚣苤?,元件的參?shù)已經(jīng)被去掉,而直接用參數(shù)的默認值代替。在本實驗中,參數(shù)的默認值正好是我們需要的值,然而在其他的應(yīng)用中,為了保持參數(shù)的靈活性,用戶可能要重新聲明元件的參數(shù)。

創(chuàng)建測試輸入激勵,如果在編寫激勵過程中有疑問可以對照本實驗后面的實驗代碼部分。

(1)?CLOCK時鐘頻率設(shè)置為100MHz。

(2)在15ns時對計數(shù)器進行復(fù)位,復(fù)位保持時間為25ns。

(3)?CE信號的初始值設(shè)置為High,300ns后拉低,并保持100ns。

(4)?LOAD信號初始值為Low,500ns后拉高,并保持一個時鐘周期。

(5)?UPDN信號初始值為High,750ns后拉低。

(6)?D_IN信號的值設(shè)置為X“0F”或00001111。

檢查語法錯誤,并用ISESimulator進行仿真。

(1)在Sources窗口中選中MY_CNTR_TB.VHD,在Processes窗口中雙擊CheckSyntax。

(2)如果有語法錯誤,請修正后繼續(xù)后面的步驟。

(3)在Processes窗口中,雙擊SimulateBehavioralModel。仿真的結(jié)果如圖6.18所示。圖6.18計數(shù)器仿真結(jié)果6.4.5實驗總結(jié)

在本實驗中,我們創(chuàng)建了一個參數(shù)可配置的n比特二進制計數(shù)器,計數(shù)器可以被配置成任意位寬,generic語句是模塊重用和增加代碼可讀性的一種重要方法。

我們同時熟悉了ISE中的VHDL語言模板的使用方法,使用模板可以幫助用戶方便快捷地建立所需類型的代碼。

實驗的最后,我們創(chuàng)建了一個測試平臺,并設(shè)計了輸入激勵,對設(shè)計文件進行了對應(yīng)的功能仿真。

6.4.6實驗中的代碼

文件對應(yīng)的代碼如下:

6.5實驗五比較器實驗

6.5.1實驗介紹

本實驗將完成圖6.19中比較器COMP的兩種描述方式下的獨立描述,一種為行為描述方式,應(yīng)用VHDL中的Assert語句和條件信號賦值語句;另一種為RTL描述方式,用if/else語句。圖6.19簡單的計數(shù)器6.5.2實驗?zāi)繕?/p>

●學(xué)習(xí)使用assert語句;

●學(xué)習(xí)使用VHDL中的基本條件描述結(jié)構(gòu)if/else;

●用行為描述方式和RTL描述方式分別對給定的模塊進行描述;

●驗證設(shè)計文件的正確性。

6.5.3實驗過程

本實驗包含四個主要的部分:創(chuàng)建一個新的ISE工程;創(chuàng)建COMP的行為描述代碼;創(chuàng)建COMP的RTL描述代碼;創(chuàng)建測試平臺文件,驗證描述模型的正確性。6.5.4實驗步驟

1.創(chuàng)建一個新的工程

在\VHDL_LABS\目錄下創(chuàng)建一個新的工程,新工程命名為LAB5。具體操作步驟如下:

(1)選擇“開始→所有程序→XilinxISE9.1i”或直接在桌面雙擊XilinxISE9.1i的圖標,打開ISE9.1i集成環(huán)境。

(2)在ISE中,選擇菜單欄中的File→NewProject,打開創(chuàng)建新工程界面,ProjectName中填入工程名LAB5,在ProjectLocation中填入工程所在文件夾\VHDL_LABS\LAB5。

(3)在DeviceProperties窗口中,填寫與實驗一中相同的屬性配置。

(4)單擊Next按鈕,在CreateNewSource窗口和AddExistingSources窗口中不做任何操作,在ProjectSummary窗口中確認工程信息后,單擊Finish按鈕完成新工程的創(chuàng)建。

2.創(chuàng)建COMP的行為描述

1)創(chuàng)建COMP的行為描述

(1)選擇菜單欄中的Project→NewSource。

(2)在SelectSourceType窗口中,選擇左側(cè)的VHDLModule,在右側(cè)FileName欄中填入文件名COMP。

(3)單擊Next按鈕進入DefineModule窗口。

(4)在DefineModule窗口中輸入表6.1所示的輸入/輸出端口定義,單擊Next按鈕,確認模塊信息后,單擊Finish按鈕,完成模塊的配置。表6.1COMP的端口定義

(5)在生成的模塊定義中,結(jié)構(gòu)體的名稱默認為Behavioral,無需改變。

2)完成模塊的結(jié)構(gòu)體描述

本步驟主要完成行為描述方式的結(jié)構(gòu)體,最主要的目的是仿真。使用VHDL中的assert語句比較兩個輸入信號,并配以severitylevel和report結(jié)構(gòu)完成比較。用條件信號賦值語句對輸出信號RESULT賦值,如果輸入的兩個信號相等,則賦值為1,否則賦值為0。讀者可以參考本實驗后面的代碼完成源文件的編寫。

3)語法檢查

(1)在Sources窗口中選中COMP.VHD,在Processes窗口中展開Synthesis,并雙擊CheckSyntax。

(2)如果代碼中有語法錯誤,請修正錯誤后繼續(xù)執(zhí)行下面的步驟。

3.創(chuàng)建COMP的RTL描述

創(chuàng)建RTL描述方式的COMP。

(1)選擇菜單欄中的Project→NewSource。

(2)在SelectSourceType窗口的左側(cè)選擇VHDLModule,右側(cè)FileName欄中填入文件名COMP_RTL。

(3)單擊Next按鈕,進入DefineModule窗口。

(4)在DefineModule窗口中將模塊的結(jié)構(gòu)體名稱改為RTL,并按照與行為描述方式中相同的方法填寫模塊的端口定義。

(5)在COMP_RTL的結(jié)構(gòu)體描述中使用if/else語句描述COMP_RTL的功能,實現(xiàn)的功能與行為描述中實現(xiàn)的功能相同。

4.創(chuàng)建測試平臺文件

創(chuàng)建一個簡單的測試平臺,并驗證行為描述方式下的COMP模塊功能是否正確。

在仿真的時候請注意查看ISE的console窗口,如果輸入的兩個數(shù)據(jù)不同,則在console窗口中會打印出用戶定制的消息。

使用ISESimulator對創(chuàng)建的測試平臺進行仿真,并調(diào)試工程源代碼。6.5.5實驗總結(jié)

在本實驗中,我們創(chuàng)建了COMP模塊的兩種描述方式下的代碼,第一種為行為級描述方式,主要用于仿真,使用的描述語句為assert語句和report語句;第二種為RTL描述,主要用于綜合生成最終的電路,使用的描述語句為if/else語句。

在實驗中,用戶需要使用VHDL中的generate語句在兩種結(jié)構(gòu)體描述中做出選擇。

6.5.6實驗中的代碼

文件對應(yīng)的代碼如下:

6.6實驗六算術(shù)邏輯單元實驗

6.6.1實驗介紹

本實驗將完成圖6.19中算術(shù)邏輯單元ALU的RTL描述。

6.6.2實驗?zāi)繕?/p>

●學(xué)習(xí)使用case語句描述ALU的結(jié)構(gòu);

●驗證邏輯結(jié)構(gòu);

●為計數(shù)器項目創(chuàng)建一個子模塊;

●為輸出數(shù)據(jù)的比較做準備。

6.6.3實驗過程

本實驗包含三個主要的部分:創(chuàng)建一個新的ISE工程;創(chuàng)建COMP的行為描述代碼;使用case描述語句;估計輸出的期望值以用于后面輸出的比較。6.6.4實驗步驟

1.創(chuàng)建一個新的工程

在\VHDL_LABS\目錄下創(chuàng)建一個新的工程,新工程命名為LAB6。具體操作步驟如下:

(1)選擇“開始→所有程序→XilinxISE9.1i”或直接在桌面雙擊XilinxISE9.1i的圖標,打開ISE9.1i集成環(huán)境。

(2)在ISE中,選擇菜單欄中的File→NewProject打開創(chuàng)建新工程界面,在ProjectName中填入工程名LAB6,在ProjectLocation中填入工程所在文件夾\VHDL_LABS\LAB6。

(3)在DeviceProperties窗口中,填寫與實驗一中相同的屬性配置。

(4)單擊Next按鈕,在CreateNewSource窗口和AddExistingSources窗口中都不做任何操作,在ProjectSummary窗口中確認工程信息后,單擊Finish按鈕完成新工程的創(chuàng)建。

2.使用case描述語句

創(chuàng)建ALU模塊的實體:

(1)選擇菜單欄中的Project→NewSource。

(2)在SelectSourceType窗口中,選擇左側(cè)的VHDLModule,在右側(cè)FileName欄中填入文件名ALU。

(3)單擊Next按鈕,進入DefineModule窗口。

(4)在DefineModule窗口中輸入表6.2所示的輸入/輸出端口定義,單擊Next按鈕,確認模塊信息后,單擊Finish按鈕完成模塊的配置。表6.2ALU的端口定義完成模塊的結(jié)構(gòu)體描述:

(1)用case語句描述如表6.3所示的ALU的功能語句,讀者可以參照本實驗后面的代碼完成功能語句的描述。表6.3ALU的功能描述

(2)計算可能的輸出結(jié)果。填寫表格6.4,計算在給定的一些輸入時,輸出應(yīng)該是什么。表格中的數(shù)據(jù)將被用于描述語句的功能驗證。表6.4估計期望的輸出值語法檢查:

(1)在Sources窗口選中ALU.VHD,在Processes窗口中展開Synthesis,并雙擊CheckSyntax。

(2)如果代碼中有語法錯誤,請修正錯誤后繼續(xù)執(zhí)行下面的步驟。

6.6.5實驗總結(jié)

在本實驗中,我們用case語句創(chuàng)建了計數(shù)器工程中的ALU模塊,并為驗證后續(xù)實驗中的設(shè)計模塊做好了準備。

在后續(xù)的模塊中,將從MEM模塊中讀出用于計算的數(shù)據(jù)和期望的輸出結(jié)果,將用于計算的輸入數(shù)據(jù)傳入ALU中進行計算,計算的結(jié)果傳輸?shù)紺MP的輸入接口。在CMP中,將ALU計算的結(jié)果和MEM模塊中讀出的期望結(jié)果進行比較,最后給出比較結(jié)果。6.6.6實驗中的代碼

文件對應(yīng)的代碼如下: 6.7實驗七狀態(tài)機實驗

6.7.1實驗介紹

本實驗將完成圖6.19中CNTRL_FSM子模塊的描述,同時對CNTRL_FSM的RTL描述做進一步的驗證。

在本實驗中,讀者可以采用單進程的方式描述FSM,也可以采用多進程的方式描述,無論采用哪種方式,F(xiàn)SM的輸出都要通過寄存器輸出。在本實驗過程中,我們采用多進程的方式描述,如果時間允許,讀者可以嘗試使用單進程的方式完成本實驗。

本實驗將完成如圖6.20所示FSM的VHDL代碼描述。圖6.20CNTRL_FSM的狀態(tài)機6.7.2實驗?zāi)繕?/p>

●學(xué)習(xí)狀態(tài)機的VHDL語言描述方法;

●學(xué)習(xí)狀態(tài)機的單進程和多進程描述方法。

6.7.3實驗過程

本實驗包含三個主要的部分:創(chuàng)建一個新的ISE工程;編寫FSM的VHDL代碼;仿真驗證代碼的功能正確性。

6.7.4實驗步驟

1.創(chuàng)建一個新的工程

在\VHDL_LABS\目錄下創(chuàng)建一個新的工程,新工程命名為LAB7。具體操作步驟如下:

(1)選擇“開始→所有程序→XilinxISE9.1i”或直接在桌面雙擊XilinxISE9.1i的圖標,打開ISE9.1i集成環(huán)境。

(2)在ISE中,選擇菜單欄中的File→NewProject,打開創(chuàng)建新工程界面,在ProjectName中填入工程名LAB7,在ProjectLocation中填入工程所在文件夾\VHDL_LABS\LAB7。

(3)在DeviceProperties窗口中,填寫與實驗一中相同的屬性配置。

(4)單擊Next按鈕,在CreateNewSource窗口和AddExistingSources窗口中不做任何操作,在ProjectSummary窗口中確認工程信息后,單擊Finish按鈕完成新工程的創(chuàng)建。

2.FSM的多進程描述方式

創(chuàng)建FSM模塊的實體。

(1)選擇菜單欄中的Project→NewSource。

(2)在SelectSourceType窗口的左側(cè)選擇VHDLModule,右側(cè)FileName欄中填入文件名CNTRL_FSM。

(3)單擊Next按鈕,進入DefineModule窗口。

(4)在DefineModule窗口中輸入如圖6.21所示的輸入/輸出端口定義,單擊Next按鈕,確認模塊信息后,單擊Finish按鈕完成模塊的配置。

(5)導(dǎo)入實驗三中定義的包集合CALC1_PAK。

由于MEM和FSM有相同的MY_RECORD類型信號的互聯(lián),導(dǎo)入CALC1_PAK可以保持兩個模塊之間數(shù)據(jù)的一致性。

(6)在FSM中用use語句聲明使用CLAC1_PAK。

(7)在關(guān)鍵字architecture和begin之間,定義一個枚舉類型STATE_TYPE,枚舉的值為圖6.20中的狀態(tài)值。

(8)定義兩個STATE_TYPE類型的信號CURR_STATE和NEXT_STATE,如果是單進程描述,可以只定義一個信號STATE。

注意:模塊的復(fù)位有效信號為RESET的高電平。

(9)描述FSM的狀態(tài)轉(zhuǎn)換代碼,在描述的過程中要注意以下幾點:

●輸出信號ADDR在FSM內(nèi)部要完成自加操作,同時要作為判斷條件使用,因此需要定義一個內(nèi)部信號,這個信號在FSM內(nèi)部可以被更新,同時可以驅(qū)動外部的輸出端口。在實驗中注意觀察這個信號的變化?!衲K需要定義一個MY_RECORD類型的輸入端口,接收前端模塊輸入的MY_RECORD類型的數(shù)據(jù)DATA_FRAME。在結(jié)構(gòu)體內(nèi)部需要用DATA_FRAME中的組成元素分別驅(qū)動模塊中的信號和輸出端口。例如,A_OP<=DATA_FRAME.A_IN。

●?COMP_EN和ALU_EN信號需要精確地控制。

●當ADDR_I信號的計數(shù)值計到“101”后,F(xiàn)SM需要一直保持在這個狀態(tài),直到復(fù)位信號有效。

3.驗證功能的正確性

創(chuàng)建一個測試平臺,測試FSM的功能正確性,對單進程的FSM描述和多進程的FSM描述可以采用同一個輸入激勵源。

(1)選擇菜單欄中的Project→NewSource。

(2)在SelectSourceType窗口中,選擇左側(cè)的VHDLTestBench,在右側(cè)FileName欄中填入文件名CNTRL_FSM_TB。

(3)單擊Next按鈕,軟件彈出一個界面,詢問測試平臺文件與哪個設(shè)計文件有關(guān)聯(lián),選擇CNTRL_FSM。

注意:測試平臺文件中也需要聲明使用CLAC1_PAK。測試平臺和測試輸入激勵需要完成下面的功能:

●?RESET為High時,F(xiàn)SM是否能正常復(fù)位;

●?ADDR是否按照既定的方式自增;

●?COMP_EN和ALU_EN信號的時序是否滿足要求;

●當ADDR_I信號達到上界時,F(xiàn)SM是否保持在S3_DONE狀態(tài)。

讀者可以使用之前填好的表6.4中的測試數(shù)據(jù)來測試本實驗中的FSM。

(1)輸入的時鐘信號頻率為50MHz。

(2)仿真25ns后將RESET信號拉高進行復(fù)位,并保持25ns。

(3)控制輸入用于測試的DATA_FRAME數(shù)據(jù)。在ISE默認的仿真情況下,仿真平臺中使用的下層元件信號是無法在波形窗口中看到的。讀者需要手動將下層的信號加入到仿真波形中。

(1)在Sources窗口中選中CNTRL_FSM_TB,在Processes窗口中雙擊SimulateBehavioralVHDLModule,在彈出的仿真波形窗口中,可以看到仿真的波形。

(2)在Processes的SIMHierarchyView窗口中,選擇CNTRL_FSM_TB的下層模塊CNTRL_FSM,并展開其樹結(jié)構(gòu)。

(3)選中樹結(jié)構(gòu)中的CURRENT_STATE信號,并將其拖動到仿真波形窗口中。

(4)讀者可以使用仿真工具欄中的仿真工具控制仿真過程。6.7.5實驗總結(jié)

在本實驗中,我們用狀態(tài)機實現(xiàn)了計數(shù)器工程中的控制模塊。為了保持數(shù)據(jù)類型的一致性,在程序中導(dǎo)入了之前定義的CALC1_PAK包集合,這個包集合中包含了MY_RECORD類型定義。

為了驗證狀態(tài)機描述的正確性,我們創(chuàng)建了一個測試平臺來測試模塊功能的正確性。

6.7.6實驗中的代碼

文件對應(yīng)的代碼如下: 6.8實驗八計數(shù)器實驗

6.8.1實驗介紹

本實驗將前面實驗中分別完成的計數(shù)器子模塊組合在一起,完成計數(shù)器的頂層模塊SIMPLE_CALC,如圖6.19所示。

6.8.2實驗?zāi)繕?/p>

●合并之前已經(jīng)設(shè)計好的子模塊;

●使用VHDL中的generate描述語句;

●在仿真過程中對輸出數(shù)據(jù)做比較;

●驗證整個電路功能的正確性;

●運行仿真。6.8.3實驗過程

本實驗包含六個主要的部分:創(chuàng)建一個新的ISE工程;導(dǎo)入之前寫好的工程文件;修改MEM模塊,更新ROM中的值;編寫SIMPLE_CALC的頂層模塊,并檢查語法錯誤;創(chuàng)建測試平臺,并對工程進行仿真驗證;最后,用ISE中的Place&Route工具在FPGA器件中實現(xiàn)這個計數(shù)器,并查看相應(yīng)的報告文件。

6.8.4實驗步驟

1.創(chuàng)建一個新的工程

在\VHDL_LABS\目錄下創(chuàng)建一個新的工程,新工程命名為LAB8。具體操作步驟如下:

(1)選擇“開始→所有程序→XilinxISE9.1i”或直接在桌面雙擊XilinxISE9.1i的圖標,打開ISE9.1i集成環(huán)境。

(2)在ISE中,選擇菜單欄中的File→NewProject,打開創(chuàng)建新工程界面,在ProjectName中填入工程名LAB8,在ProjectLocation中填入工程所在文件夾\VHDL_LABS\LAB8。

(3)在DeviceProperties窗口中,填寫與實驗一中相同的屬性配置。

(4)單擊Next按鈕,在CreateNewSource窗口和AddExistingSources窗口中不做任何操作,在ProjectSummary窗口中確認工程信息后,單擊Finish按鈕完成新工程的創(chuàng)建。

2.導(dǎo)入源文件

導(dǎo)入實驗三、五、六、七中分別創(chuàng)建的包集合CLAC_PAK和下層模塊MEM、COMP、COMP_RTL、ALU和CNTRL_FSM。

(1)選擇菜單欄中的Project→AddCopyofSource。

(2)選擇目錄為\VHDL_LABS\LAB5,選擇COMP.vhd和COMP_RTL.vhd,單擊打開按鈕,如圖6.21所示。圖6.21添加已有源文件的拷貝

(3)?ISE會自動識別添加文件的類型,如圖6.22所示。

(4)重復(fù)上面的操作步驟,將實驗三完成的CALC1_PAK包集合和MEM、實驗六完成的ALU以及實驗七完成的CNTRL_FSM加入到工程中來。圖6.22自動識別源文件的類型

3.修改MEM模塊

修改MEM模塊的源文件,更新ROM中的數(shù)據(jù),將測試數(shù)據(jù)輸入MEM模塊中。

(1)在Sources窗口中雙擊MEM模塊。

(2)將MY_ROM中初始化的數(shù)據(jù)用表6.4中的數(shù)據(jù)修改,用于工程的仿真驗證。

(3)保存修改后的文件。

4.編寫頂層模塊的VHDL源代碼并做語法檢查

編寫SIMPLE_CALC模塊的VHDL源代碼,并檢查語法錯誤。

(1)選擇菜單欄中的Project→NewSource。

(2)在SelectSourceType窗口中,選擇左側(cè)的VHDLModule,在右側(cè)FileName欄中填入文件名SIMPLE_CALC。

(3)單擊Next按鈕,進入DefineModule窗口。

(4)在DefineModule窗口中輸入如表6.5所示的輸入/輸出端口定義,單擊Next按鈕,確認模塊信息后,單擊Finish按鈕完成模塊的配置。表6.5SIMPLE_CALC的端口定義

(5)在打開的新建VHDL文件編輯窗口中,聲明使用CALC1_PAK包集合,并將結(jié)構(gòu)體名稱修改為STRUCTURAL。

(6)在結(jié)構(gòu)體內(nèi),聲明要使用到的元件MEM、ALU、COMP、COMP_RTL和CNTRL_FSM。讀者可以采用快捷的方法聲明使用的元件,如直接將這些模塊的實體定義拷貝下來,然后修改為元件聲明,或者選中某一個源文件,在Processes窗口中雙擊DesignUtilities→ViewInstantiationTemplate,ISE會給出源文件的聲明和例化模板,供設(shè)計者直接拷貝。

(7)聲明用于連接各個子模塊的內(nèi)部信號。用generate語句配置選擇使用COMP或是COMP_RTL模塊,COMP是行為描述結(jié)構(gòu)的模塊,只用于仿真,而COMP_RTL是RTL描述結(jié)構(gòu)的模塊。實際應(yīng)用中,要根據(jù)設(shè)計者的目的選擇使用哪一種配置。在本實驗中,我們先用仿真的方法做驗證,因此用generate語句配置為使用COMP模塊。

(1)在SIMPLE_CALC的實體定義中,用generic定義一個BOOLEAN類型的參數(shù)SYNTH,SYNTH參數(shù)的默認值為FALSE。

(2)在結(jié)構(gòu)體的關(guān)鍵字begin之后,根據(jù)SYNTH的值創(chuàng)建兩個generate描述語句。讀者可以參照后面的實驗代碼完成描述語句的編寫。

(3)定義一個MY_RECORD類型的信號,用于連接MEM子模塊和CNTRL_FSM子模塊。檢查語法錯誤:

(1)在Sources窗口中,選中SIMPLE_CALC.VHD模塊,在Processes窗口中,展開Synthesize樹,并雙擊CheckSyntax。

(2)雙擊ViewRTLSchematic,查看綜合后的電路與設(shè)計目標電路是否相符。

(3)如果源文件中有語法錯誤,請修正語法錯誤后繼續(xù)進行下面的步驟。

5.仿真,驗證功能正確性

創(chuàng)建SIMPLE_CALC模塊的測試平臺,并運行仿真,驗證功能正確性。

(1)選擇菜單欄中的Project→NewSource。

(2)在SelectSourceType窗口中,選擇左側(cè)的VHDLTestBench,在右側(cè)FileName欄中填入文件名SIMPLE_CALC_TB。

(3)單擊Next按鈕,軟件彈出一個界面,詢問測試平臺文件與哪個設(shè)計文件關(guān)聯(lián),選擇SIMPLE_CALC。

(4)在測試平臺文件編輯窗口中,設(shè)置CLK的時鐘頻率為50MHz。

(5)對測試平臺文件進行仿真。

(6)在仿真過程中,將需要查看的子模塊中的信號拖入仿真波形窗口。

為了驗證功能的正確性,讀者可以將所有希望查看的信號都拖入仿真波形窗口,仔細驗證工程文件的功能正確性。

6.在FPGA中實現(xiàn)工程設(shè)計,并查看報告文件

使用ISE中的Place&Route工具實現(xiàn)工程設(shè)計,查看MAP和PAR的報告文件。

(1)在Sources窗口中,選中SIMPLE_CALC.VHD文件,在Processes窗口中,雙擊ImplementDesign,如圖6.23所示。圖6.23工程實現(xiàn)工具雙擊ImplementDesign,將執(zhí)行器件實現(xiàn)之前所需的全部步驟,這些步驟包括:

●?Translation:將全部的子模塊或網(wǎng)表文件融合到一個網(wǎng)表中。

●?Map:將網(wǎng)表中的邏輯用FPGA的底層資源替換,如slices,registers和I/O等。

●?Placement:將Map后的資源分布到FPGA的固定器件元素中。

●?Routing:對已經(jīng)布局好的FPGA底層器件進行布線連接。

●?Trace:對布局布線后的設(shè)計工程進行時序匯總,給出設(shè)計文件的最高運行頻率等。

(2)工程實現(xiàn)全部結(jié)束之后,展開ImplementDesign樹,顯示所做底層的操作步驟及對應(yīng)的報告文件,如圖6.24所示。圖6.24工程實現(xiàn)的全部操作步驟

(3)雙擊MapReport。這個報告中包括警告、錯誤和資源占用情況等全部信息。

報告中還包括工程實現(xiàn)所占用的分類FPGA器件資源。查看Map報告并嘗試填寫下面的表格。

(4)展開GeneratePost-Place&RouteStaticTiming,并雙擊AnalyzePostPlaceandRouteStaticTiming(TimingAnalyzer)。

(5)?ISE界面彈出一個新的工具組件,這個工具打開后,選擇工具欄中的AnalyzeAgainstAuto-GeneratedDesignConstraints按鈕。如圖6.25所示,由于在工程設(shè)計中,我們并沒有加入任何的時序約束,因此這個報告會用默認的分析工具給出詳細的時序報告。圖6.25時序分析器的工具欄查看時序分析報告,并填寫下表中的內(nèi)容:6.8.5實驗總結(jié)

在本實驗中,我們完成了計數(shù)器工程的全部內(nèi)容,學(xué)會了使用generate描述語句配置兩種不同描述方式的模塊。這個計數(shù)器工程已經(jīng)是一個完整的工程了,下一步我們只需要將這個工程下載到FPGA器件中實際運行,并測試硬件系統(tǒng)電路即可。

6.8.6實驗中的代碼

文件對應(yīng)的代碼如下: 6.9實驗九IP核應(yīng)用實驗

6.9.1實驗介紹

本實驗指導(dǎo)讀者使用ISE中的XilinxCoreGenerator工具生成一個IP核,?在設(shè)計工程中將生成的IP核作為一個元件使用,并對其進行仿真驗證。

6.9.2實驗?zāi)繕?/p>

●使用XilinxCoreGenerator工具生成一個IP核;

●在已有的工程文件中對IP核進行例化;

●對包含IP核的工程設(shè)計文件進行功能仿真。6.9.3實驗過程

本實驗中,我們將使用CoreGenerator工具創(chuàng)建一個塊RAM核,使用這個核替換已有工程中的fifo_2048x8模塊。

實驗包含四個主要的部分:創(chuàng)建一個工程;生成新的核;在工程中對核進行例化;對修改后的核做功能仿真。

6.9.4實驗步驟

1.創(chuàng)建一個新的工程

在\VHDL_LABS\目錄下創(chuàng)建一個新的工程,新工程命名為LAB9。具體操作步驟如下:

(1)選擇“開始→所有程序→XilinxISE9.1i”或直接在桌面雙擊XilinxISE9.1i的圖標,打開ISE9.1i集成環(huán)境。

(2)在ISE中,選擇菜單欄中的File→NewProject,打開創(chuàng)建新工程界面,ProjectName中填入工程名LAB9,在ProjectLocation中填入工程所在文件夾\VHDL_LABS\LAB9。

(3)在DeviceProperties窗口中,填寫與實驗一中相同的屬性配置。

(4)單擊Next按鈕,在CreateNewSource窗口和AddExistingSources窗口中不做任何操作,在ProjectSummary窗口中確認工程信息后,單擊Finish按鈕完成新工程的創(chuàng)建。

(5)讀者可以將光盤中LAB9的工程設(shè)計文件全部導(dǎo)入,如果沒有光盤,請查看實驗代碼,創(chuàng)建對應(yīng)的設(shè)計文件,并添加到工程設(shè)計中。在進行下面的步驟之前,請詳細查看工程設(shè)計文件,并回答下面兩個問題:

(1)觸發(fā)數(shù)據(jù)向塊RAM存儲的PN碼是什么?

(2)每一個數(shù)據(jù)通道需要用幾個塊RAM?

2.生成一個新的IP核

生成一個新的IP核,并命名為RAM_CORE,核的類型為雙端口塊存儲器。

(1)選擇菜單欄中的Project→NewSource;

(2)在SelectSourceType對話框中,選擇左側(cè)的IP(CoreGen&ArchitectureWizard),在右側(cè)的FileName文本框中填入RAM_CORE。

(3)單擊Next按鈕。

(4)在SelectIP對話框中,展開Memories&StorageElements,展開RAMs&ROMs,選擇DualPortBlockMemoryv6.3,如圖6.26所示。圖6.26選擇IP類型

(5)單擊Next按鈕,確認IP信息后,再單擊Finish按鈕。

配置IP核的參數(shù),配置的參數(shù)如下:

●?Name:RAM_CORE。

●?PortA:2048×8bits,writeonly,activehighSINITpin,initialvalue“0”。

●?PortB:2048×8bits,readonly,noreadonwrite,activehighenablepin,activehighSINITpin,initialvalue“0”。

(1)如圖6.27所示,設(shè)定IP核的參數(shù)。

●?ComponentName:ram_core。

●?WidthA:8。

●?DepthA:2048。

●?WidthB:8。

●?PortAOptions:WriteOnly。

●?PortBOptions:ReadOnly。圖6.27設(shè)定IP核的參數(shù)

(2)單擊Next按鈕,選擇PortA的SINITpin選項,如圖6.28所示。圖6.28選擇PortA的SINIT選項

(3)單擊Next按鈕,選擇PortB的EnablePin和SINITpin,如圖6.29所示。

(4)單擊Next按鈕,最后一頁的參數(shù)不需要改變,選用默認參數(shù)即可。

(5)單擊Generate按鈕,生成配置好的IP核。

CoreGenerate工具會自動關(guān)閉,請注意,新生成的核已經(jīng)被加入到工程中,名字為ram_core.xco。圖6.29設(shè)置PortB的相關(guān)參數(shù)

3.在VHDL源文件中例化塊RAM的IP核

在fifo_2048x8.vhd中將第二步生成的IP核進行例化。

(1)在Sources窗口中,雙擊fifo_2048x8.vhd,在文本編輯窗口中fifo_2048x8.vhd打開。

(2)在Sources窗口中,選中ram_core.xco。

(3)在Processes窗口中,雙擊ViewVHDLFunctionalModel,在文本編輯器窗口中查看ram_core的實體定義。

(4)拷貝ram_core的實體定義部分,粘貼到fifo_2048x8.vhd文件對應(yīng)位置,并修改為元件的聲明和例化。

元件的聲明和例化,也可以采用下面的方式:在ISE中打開CoreGenerator生成的ram_core.vho文件,并拷貝文件中的聲明和例化內(nèi)容到fifo_2048x8.vhd文件稍做修改。

(5)?ram_core的例化如下所示:

4.功能仿真

建立測試平臺文件fifo_2048x8_tb.vhd,對fifo_2048x8.vhd進行仿真。

將光盤中的fifo_2048x8_tb.vhd添加到工程中,如果沒有光盤,請參照實驗代碼,自行輸入。仔細查看測試平臺文件,注意以下幾點:

●測試平臺首先向RAM的前16個地址寫入數(shù)據(jù),然后從這些地址中讀出數(shù)據(jù);

●常量misc_data用于RAM數(shù)據(jù)的初始化;

●?read_data進程用于讀取RAM中的數(shù)據(jù)。

運行測試平臺fifo_2048x8_tb.vhd的功能仿真,運行時間為2500ns,查看波形文件驗證核的連接是否正確。

(1)在Sources窗口中,選擇Sourcesfor欄中的BehavioralSimulation,然后在文件結(jié)構(gòu)樹中選中fifo_2048x8_tb.vhd。

(2)在Processes窗口中,展開XilinxISESimulator,右鍵單擊SimulateBehavioralModel,選擇Properties。

(3)輸入仿真時間為2500ns。

(4)單擊OK按鈕。

(5)雙擊SimulateBehavioralModel。

(6)查看波形窗口,驗證波形輸出是否與預(yù)期的結(jié)果相同。6.9.5實驗總結(jié)

在本實驗中,我們使用CoreGenerator工具生成了一個IP核,在已有工程中對生成的IP核進行聲明和例化,并對包含IP核的工程文件進行了仿真驗證。

6.9.6問題答案

(1)觸發(fā)數(shù)據(jù)向塊RAM存儲的PN碼字是什么?

PN碼字是“10001101”,在pn_correlation模塊中定義為generic參數(shù)K。

(2)每一個數(shù)據(jù)通道需要用幾個塊RAM?

每個FIFO的大小為2048×8,即16K比特,只需要一個塊RAM就可以。

6.9.7實驗中的代碼

文件對應(yīng)的代碼如下:

6.10實驗十數(shù)字時鐘管理IP核實驗

6.10.1實驗介紹

本實驗指導(dǎo)讀者使用Xilinx的時鐘管理IP工具配置具有多個時鐘輸出頻率的數(shù)字時鐘管理模塊,并將這些時鐘信號連接到全局時鐘緩沖端口。

6.10.2實驗?zāi)繕?/p>

●使用數(shù)字時鐘向?qū)渲脭?shù)字時鐘管理IP核(DCM,DigitalComposerManager);

●將DCM的輸出連接到全局時鐘緩沖端口。

6.10.3實驗過程

實驗包含兩個主要的部分:生成一個DCM模塊;將這個模塊在HDL代碼中例化。6.10.4實驗步驟

1.生成DCM模塊

本設(shè)計中包含兩個輸入時鐘。

●?66MHz時鐘:clk_66。這是系統(tǒng)的主時鐘,這個時鐘在系統(tǒng)的整個工作過程中一直保持穩(wěn)定有效,包括在系統(tǒng)上電和測試的過程中。

●?50MHz時鐘:clk_50。這個時鐘在系統(tǒng)上電和測試的過程中有可能被關(guān)閉。

為了在上電過程中測試系統(tǒng),我們用DCM從系統(tǒng)的主時鐘66MHz生成一個50MHz的測試時鐘,然后用一個BUFGMUX選擇使用外部輸入的50MHz時鐘或生成的50MHz時鐘。兩個時鐘的連接方式如圖6.30所示。圖6.30DCM的連接方式創(chuàng)建一個新的工程。在\VHDL_LABS\目錄下創(chuàng)建一個新的工程,新工程命名為LAB10。具體操作步驟如下:

(1)選擇“開始→所有程序→XilinxISE9.1i”或直接在桌面雙擊XilinxISE9.1i的圖標,打開ISE9.1i集成環(huán)境。

(2)在ISE中,選擇菜單欄中的File→NewProject,打開創(chuàng)建新工程界面,在ProjectName中填入工程名LAB10,在ProjectLocation中填入工程所在文件夾\VHDL_LABS\LAB10。

(3)在Devi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論