5)設(shè)定系統(tǒng)參數(shù)。雙擊“System Generator”模塊,會出現(xiàn)系統(tǒng)設(shè)定對話框,如圖1-4所示。其中“Compilation”欄選擇編譯生成對象,包括HDL網(wǎng)表、FPGA配置比特流、NGC網(wǎng)表、EDK導(dǎo)出工具、硬件協(xié)仿真類型以及時序分析文件等6種類型,本例選擇HDL網(wǎng)表類型,會生成ISE工程以及相應(yīng)的HDL代碼;“Part”欄用于選擇芯片型號,本例選擇Zynq 7020?!癟arget”欄用于選擇目標(biāo)文件存放路徑,本例使用默認(rèn)值,則會在mydelay.mdl所在文件夾中自動生成一個netlist的文件夾,用于存放相應(yīng)的輸出文件。綜合工具選擇XST,HDL語言選擇Verilog類型,系統(tǒng)時鐘設(shè)的周期為100ns,即為10MHz。 “Clock Pin Location”欄的文本框中輸入系統(tǒng)時鐘輸入管腳,則會自動生成管腳約束文件(由于本例只是演示版,所以該項空閑)。此外,可選中“Create testbench”選項,自動生成設(shè)計的測試代碼。各項參數(shù)確認(rèn)無誤后,單擊“OK”鍵,保存參數(shù)。
?
1-4 系統(tǒng)參數(shù)設(shè)定對話框
6)設(shè)置關(guān)鍵模塊參數(shù)。雙擊“Gataway In”、“Gataway Out”模塊,會彈出圖1-5和圖 1-6所示的對話框。Gataway In模塊屬性可查看輸入數(shù)據(jù)位寬和量化規(guī)則。
?
圖1-5 Gataway In模塊屬性對話框/圖1-6Gataway Out模塊屬性對話框
7)運(yùn)行測試激勵。當(dāng)參數(shù)設(shè)置完成后,點擊工具欄的“run ”按鍵,即可運(yùn)行Simulink仿真,可以看到顯示器輸出為46,表明設(shè)計的功能是正確的。
8)生成HDL代碼。單擊 system Generator 窗口的“Generate”按鍵,System Generator可自動將設(shè)計轉(zhuǎn)化成HDL代碼。整個轉(zhuǎn)化過程的起始和結(jié)束提示界面分別如圖1-6和圖 1-7所示。
圖1-6 自動生成代碼過程的起始提示標(biāo)志/圖1-7 自動生成代碼過程的結(jié)束提示標(biāo)志
讀者可在相應(yīng)的文件夾netlist 里的 sysgen 子目錄中打開“my_dsp.v”文件,查看相應(yīng)的代碼,用戶可將其作為子模塊直接使用。
二、System Generator中的信號類型
System Generator是面向硬件設(shè)計的工具,因此數(shù)據(jù)類型只能是定點的,而Simulink中的基本數(shù)據(jù)類型是雙精度浮點型,因此Xilinx模塊和Simulink模塊連接時需要通過邊界模塊來轉(zhuǎn)換?!癎ateway In”模塊把浮點數(shù)轉(zhuǎn)換成定點數(shù),“Gateway Out”把定點數(shù)轉(zhuǎn)換成浮點數(shù)。此外,對于Simulink中的連續(xù)時間信號,還必須經(jīng)過“Gateway In”模塊的采樣轉(zhuǎn)換才能使用。
System Generator中的數(shù)據(jù)類型命名規(guī)則是非常簡易且便于記憶的形式,如Fix_8_6表示此端口為8比特有符號數(shù),其中6比特為小數(shù)部分。如果是無符號數(shù),則帶有“Ufix”前綴。在System Generator中,可通過選擇 “Format” 菜單中的“Port/Signal Display Port Data Types”命令,來顯示所有端口的數(shù)據(jù)類型,形象顯示整個系統(tǒng)的數(shù)據(jù)精度。
Xilinx模塊基本上都是多形態(tài)的,即可根據(jù)輸入端口的數(shù)據(jù)類型來確定輸出數(shù)據(jù)類型,但在有些情況下需要擴(kuò)展信號寬度來保證不丟失有效數(shù)據(jù)。此外,也允許設(shè)計人員自定義模塊的輸入、輸出數(shù)據(jù)的量化效果以及飽和處理。在圖8-14所示的“Gateway In”模塊屬性對話框中,“Output type”選擇數(shù)據(jù)為布爾型、有符號數(shù)還是無符號數(shù);“Number of bits”即為定點數(shù)的位寬;“Binary point”為小數(shù)部分的寬度;“Quantization”選擇定點量化模式;“Overflow”用于設(shè)定飽和處理模式;“Sample period”用于對連續(xù)時間信號的采樣。因此按照System Generator的數(shù)據(jù)形式命名規(guī)則,“Gateway In”模塊的數(shù)據(jù)類型為Fix/Ufix_(Number of bits)_(Binary point )。
此外,還有DSP48 instruction,顯示為“UFix_11_0”,是Xilinx針對數(shù)字信號處理的專用模塊,用于實現(xiàn)乘加運(yùn)算。
三、 自動代碼生成
System Generator能夠自動地將設(shè)計編譯為低級的HDL描述,且編譯方式多樣,取決于System Generator標(biāo)志中的設(shè)置。為了生成HDL代碼,還需要生成一些輔助下載的文件工程文件、約束文件等,和用于驗證的測試代碼(HDL testbench)。
1.編譯并仿真System Generator模塊
前面已經(jīng)提到要對一個System Generator的設(shè)計進(jìn)行仿真或者將其轉(zhuǎn)化成硬件,則設(shè)計中必須包含一個System Generator生成標(biāo)志。也可以將多個生成標(biāo)志分布于不同的層中(一層一個),在層狀結(jié)構(gòu)中,處于別的層下的稱為從模塊,不屬于從模塊的則為主模塊。但是特定的參數(shù)(如系統(tǒng)時鐘頻率)只能在主模塊中設(shè)置。
對于任一添加的模塊,都可以在System Generator模塊中指定其代碼生成方式和仿真處理形式,要編譯整個系統(tǒng),在頂層模塊中利用System Generator模塊生成代碼即可。
不同編譯類型的設(shè)定將會產(chǎn)生不同的輸出文件,可選的編譯類型包括兩個網(wǎng)表文件類型(HDL網(wǎng)表和NGC網(wǎng)表)、比特流文件類型、EDK導(dǎo)出工具類型以及時序分析類型等4類。
HDL網(wǎng)表類型是最常用的網(wǎng)表結(jié)構(gòu),其相應(yīng)的輸出結(jié)果包括HDL代碼文件、EDIF文件和一些用于簡化下載過程的輔助文件。設(shè)計結(jié)果可以直接被綜合工具(如XST等)綜合,也可以反饋到Xilinx物理設(shè)計工具(如ngdbuild、map、par和bitgen等)來產(chǎn)生配置FPGA的比特流文件。編譯產(chǎn)生的文件類型如ISE中是一致的。NGC網(wǎng)表類型的編譯結(jié)果和HDL網(wǎng)表類似,只是用NGC文件代替了HDL代碼文件。
比特流文件類型的編譯結(jié)果是直接能夠配置FPGA的二進(jìn)制比特流文件,并能直接在FPGA硬件平臺上直接運(yùn)行的。如果安裝了硬件協(xié)仿真平臺,可以通過選擇“Hardware Co-simulation > XtremeDSP Development Kit > PCI and USB”,生成適合XtremeDSP開發(fā)板的二進(jìn)制比特流文件。
EDK導(dǎo)出工具類型的編譯結(jié)果是可以生成直接導(dǎo)入Xilinx嵌入式開發(fā)工具(EDK)的工程文件以及不同類型的硬件協(xié)仿真文件。
時序分析類型的編譯結(jié)果是該設(shè)計的時序分析報告。
2.編譯約束文件
在編譯一個設(shè)計時,System Generator會根據(jù)用戶的配置產(chǎn)生相應(yīng)的約束文件,通知下載配置工具如何處理設(shè)計輸入,不僅可以完成更高質(zhì)量的實現(xiàn),還能夠節(jié)省時間。
約束文件可控的指標(biāo)包括:
系統(tǒng)時鐘的周期;
系統(tǒng)工作速度,和系統(tǒng)時鐘有關(guān)、設(shè)計的各個模塊必須運(yùn)行的速度;
管腳分配;
各個外部管腳以及內(nèi)部端口的工作速度。
約束文件的格式取決于System Generator模塊的綜合工具:對于XST,其文件為XCF格式;對于Synplify/Synplify Pro,則使用NCF文件格式。
系統(tǒng)時鐘在System Generator標(biāo)志中設(shè)定,編譯時將其寫入約束文件,在實現(xiàn)時將其作為頭等目標(biāo)。在實際設(shè)計中,常常包含速度不同的多條路徑,其中速度最高的采用系統(tǒng)時鐘約束,其余路徑的驅(qū)動時鐘只能通過系統(tǒng)時鐘的整數(shù)倍分頻得到。當(dāng)把設(shè)計轉(zhuǎn)成硬件實現(xiàn)時,“Gateway In”和“Gateway Out”模塊就變成了輸入、輸出端口,其管腳分配和接口數(shù)據(jù)速率必須在其參數(shù)對話框中設(shè)定,編譯時會將其寫入I/O時序約束文件中。
3.HDL測試代碼
通常System Generator設(shè)計的比特寬度和工作頻率都是確定的,因此Simulink仿真結(jié)果也要在硬件上精確匹配,需要將HDL仿真結(jié)果和Simulink仿真結(jié)果進(jìn)行比較,才能確認(rèn)HDL代碼的正確性。特別當(dāng)其包含黑盒子模塊時,這樣的驗證顯得格外重要。System Generator提供了自動生成測試代碼的功能,并能給出HDL代碼仿真正確與否的指示。
假設(shè)設(shè)計的名字是,雙擊頂層模塊的System Generator標(biāo)志,將Compilation選項設(shè)為HDL Netlist,選中Create Testbench選項,然后點擊Generate選項,不僅可以生成常用的設(shè)計文件,還有下面的測試文件:
_tb.vhd/.v文件,包含完整的HDL測試代碼;
Various.dat文件,包含了測試代碼仿真時的測試激勵向量和期望向量;
腳本Scripts vcom.do和vsim.do文件,用于在Modelsim中完成測試代碼的編譯和仿真,并將其結(jié)果和自動編譯產(chǎn)生的HDL測試向量進(jìn)行比較。
Various.dat文件是System Generator將通過“Gataway In/Out”模塊的數(shù)據(jù)保存下來而形成的,其中經(jīng)過輸入模塊的數(shù)據(jù)是測試激勵,而通過輸出模塊的數(shù)據(jù)就是期望結(jié)果。測試代碼只是簡單的封裝器,將測試激勵送進(jìn)生成的HDL代碼,然后對輸出結(jié)果和期望結(jié)果完成比較,給出正確指示。
四、 編譯MATLAB設(shè)計生成FPGA代碼
Xilinx公司提供了兩種方法將MATLAB設(shè)計.m文件轉(zhuǎn)化為HDL設(shè)計,一種就是利用AccelDSP綜合器;另一種就是直接利用MCode模塊。前者多應(yīng)用于復(fù)雜或高速設(shè)計中,常用來完成高層次的IP核開發(fā);而后者使用方便,支持MATLAB語言的有限子集,對實現(xiàn)算術(shù)運(yùn)算、有限狀態(tài)機(jī)和邏輯控制是非常有用的。本節(jié)內(nèi)容以介紹MCode模塊為主。
MCode模塊實現(xiàn)的是裝載在里面的.m函數(shù)的功能。此外,還能夠使用Xilinx的定點類型數(shù)對.m函數(shù)進(jìn)行評估。該模塊使用回歸狀態(tài)變量以保證內(nèi)部狀態(tài)穩(wěn)定不變,其輸入、輸出端口都由.m函數(shù)確定。
要使用MCode模塊,必須實現(xiàn)編寫.m函數(shù),且代碼文件必須和System Generator模型文件放在同一個文件夾中,或者處于MATLAB路徑上的文件夾中。下面用兩個實例來說明如何使用MCode模塊。
例1-1 使用MATLAB編寫一個簡單的移位寄存器完成對輸入數(shù)據(jù)乘8以及除以4的操作,并使用MCode將其編譯成System Generator直接可用的定點模塊。
.m 函數(shù)的生成是比較簡單的,我們只需要 new function ,然后將相應(yīng)的函數(shù)代碼輸入,并且保存即可。
1.相關(guān)的.m函數(shù)代碼為:
function [lsh3, rsh2] = xlsimpleshift(din)
% [lsh3, rsh2] = xlsimpleshift(din) does a left shift 3 bits and a
% right shift 2 bits. The shift operation is accomplished by
% multiplication and division of power of two constant.
lsh3 = din * 8;
rsh2 = din / 4;
2.將.m函數(shù)添加到下列三個位置之一:
模型文件存放的位置;
模型目錄下名字為private的子文件夾;
MATLAB路徑下。
然后,新建一個System Generator設(shè)計,添加MCode模塊,雙擊模塊,在彈出頁面中,通過Browse按鍵將.m函數(shù)和模型設(shè)計關(guān)聯(lián)起來,如圖1-8所示。 當(dāng)我們想修改MCode 代碼時候,我們只需要雙擊該模塊,然后彈出屬性窗口,選擇 Edit M-File 即可。
?
圖1-8 MCode模塊關(guān)聯(lián)界面示意圖
3.添加邊界模塊、Sytem Generator模塊、正弦波測試激勵以及示波器模塊構(gòu)成完整的設(shè)計,如圖1-9所示。
圖1-9 簡單移位模塊設(shè)計示意圖
4.運(yùn)行仿真,得到的結(jié)果如圖1-10所示,從中可以看出,設(shè)計是正確的,正確實現(xiàn)了.m文件的功能。左圖將信號放大了8倍,右圖將信號縮小了4倍。
?
圖1-10 簡單移位模塊仿真結(jié)果示意圖
5.自動生成代碼,得到的Verilog文件如下所列。
module myshift (
din,
dout1,
dout2
);
input [15:0] din;
output [15:0] dout1;
output [15:0] dout2;
wire [15:0] din_net;
wire [15:0] dout1_net;
wire [15:0] dout2_net;
assign din_net = din;
assign dout1 = dout1_net;
assign dout2 = dout2_net;
mcode_6b96190926 mcode (
.e(1'b0),
.lk(1'b0),
.lr(1'b0),
.in(din_net),
.sh3(dout1_net),
.sh2(dout2_net)
);
endmodule
評論