時(shí)間:2021年04月28日 分類:電子論文 次數(shù):329
摘 要:Zynq7000系列基于Xilinx全可編程的可擴(kuò)展處理平臺(tái)結(jié)構(gòu)是一種SoC芯片,集成了Cortex-A9雙核ARM和FPGA。Xilinx公司為大家提供許多的IP核,在Vivado的IP Catalog中可以查看,有時(shí)這些IP核復(fù)雜,或者不能完全滿足用戶需求,因此Xilinx公司為用戶提供用戶可以創(chuàng)建屬于自己的IP核,系統(tǒng)化定制,簡(jiǎn)化設(shè)計(jì)。本文講述了Zynq7000系列芯片如何在Vivado中建立AXI總線類型的IP核,實(shí)現(xiàn)自定義IP核,并試驗(yàn)。
關(guān)鍵詞:Z7 自定義IP AXI總線
1 引言
Zynq-7000系列芯都有完整的ARM處理子系統(tǒng),其包含了雙核的CortexTM-A9處理器,整個(gè)處理器的搭建都以處理器為中心,整個(gè)處理器子系統(tǒng)中集成了內(nèi)存控制器和大量的外設(shè),使CortexTM-A9的核在Zynq-7000中完全獨(dú)立于可編程邏輯單元,即Zynq-7000系列芯片包含ARM的PS部分,和FPGA部分(PL),其中PS集成了兩個(gè)Cortex™-A9處理器,AMBA®互連,內(nèi)部存儲(chǔ)器,外部存儲(chǔ)器接口和外設(shè)。返些外設(shè)主要包括USB總線接口,以太網(wǎng)接口,SD/SDIO接口,I2C總線接口,CAN總線接口,UART接口,GPIO等。PS和PL部分可以協(xié)同工作,也可以獨(dú)立工作。
計(jì)算機(jī)評(píng)職知識(shí):計(jì)算機(jī)應(yīng)用研究期刊投稿領(lǐng)域和要求
為方便用戶開(kāi)發(fā)使用,xilinx公司提供了許多IP核,有時(shí)候這些接口時(shí)序復(fù)雜,不利于實(shí)際應(yīng)用,因此,xilinx公司還提供了自定義IP的方法來(lái)滿足用戶的個(gè)性需求,同時(shí)提供了典型的接口ip供用戶使用。利用自定義IP的方法實(shí)現(xiàn)PS-PL通信接口是使用Xilinx提供的IP封裝工具,將用戶代碼封裝成為標(biāo)準(zhǔn)AXI總線形式模塊,將模塊以圖形化的方式加入頂層文件中并進(jìn)行AXI總線的自動(dòng)連接,這種方式為用戶提供了系統(tǒng)化、個(gè)性化的服務(wù)。
2 建立新的系統(tǒng)工程
本文使用黑金開(kāi)發(fā)板介紹自定義IP的方法,黑金開(kāi)發(fā)板使用的芯片為Xilinx公司的xc7z020clg400-2。具體方法如下:
1)在Vivado開(kāi)發(fā)環(huán)境里新建了一個(gè)名稱為test_IP工程,并生成一個(gè)名為system的Block Diagram文件,再在該原理圖中添加ZYNQ7 Processing System內(nèi)核系統(tǒng)。
2)雙擊Diagram界面里的ZYNQ Processing System,打開(kāi)ZYNQ系統(tǒng)的配置界面。
其中Page Navigator界面下有8個(gè)子項(xiàng),分布為Zynq Block Design, PS-PL Configuration, Peripheral I/O Pins, MIO Configration, Clock Configuration, DDR Configuration, SMC Timing Calculation, Interrupts。這些頁(yè)面選項(xiàng)對(duì)應(yīng)的是ZYNQ的不同同硬件模塊的配置,其中PS_PL頁(yè)面提供了PS到PL的相關(guān)接口配置信息以及PS部分一些配置信息;Peripheral I/O Pins頁(yè)面主要是對(duì)一些通用外設(shè)接口的配置;MIO Configruation頁(yè)面主要是對(duì)MIO已經(jīng)EMIO的分配控制;Clock Configruation頁(yè)面主要是對(duì)PS端時(shí)鐘資源的配置和管理;DDR Configration頁(yè)面主要是對(duì)DDR控制器一些參數(shù)的配置;Interrupts頁(yè)面主要是對(duì)中斷進(jìn)行配置管理。
2.1) 點(diǎn)擊Peripheral I/O Pins選項(xiàng)。
在AX7020開(kāi)發(fā)板上, MIO48和MIO49是連接到UART芯片上,是作為串口通信使用的。因此這里配置成UART1的功能,點(diǎn)擊MIO48,49對(duì)應(yīng)的UART1, 方框的顏色會(huì)發(fā)成綠色。如此MIO48,49的管腳功能就固定了,只能作為UART的功能。其中MIO48為串口發(fā)送,MIO49為串口接收。
2.2)點(diǎn)擊PS-PL Configuration選項(xiàng)。
在Gemeral目錄下,可以看到UART1的波特率115200,因此選擇115200,可以根據(jù)需要更改。 因?yàn)楸緦?shí)驗(yàn)中沒(méi)有用到PL部分外設(shè),所以就沒(méi)有PL的外設(shè)需要掛到AXI的總線上,也就部需要AXI GP0的Master總線了,因此這里把FCLK_RESET0_N和M AXI GP0 interface的選頃去掉。
2.4) 點(diǎn)擊Clock Configuration頃。
這個(gè)界面會(huì)顯示ZYNQ系統(tǒng)的一些時(shí)鐘,比如輸入時(shí)鐘是33.33333Mhz, 與開(kāi)収板上癿PS癿系統(tǒng)時(shí)鐘是一樣是。CPU的工作時(shí)鐘是666.666666Mhz, DDR的工作時(shí)鐘是533.333333Mhz,這些時(shí)鐘頻率默認(rèn)。
由于本實(shí)驗(yàn)中沒(méi)有用到PL部分外設(shè),所以可以把PL的FCLK_CLK0前面的選項(xiàng)去掉,不會(huì)產(chǎn)生FCLK_CLK0。
2.5) 打開(kāi)DDR Configration選項(xiàng)。
這個(gè)界面上是選擇DDR芯片的名稱和一些參數(shù)。此界面在Memory Part選項(xiàng)中需要選擇跟開(kāi)發(fā)板上DDR3型號(hào)一樣的名稱,AX7020開(kāi)發(fā)板選擇MT41J256M16 RE-125。
配置完成點(diǎn)擊OK退到Vivado的開(kāi)發(fā)環(huán)境。
3 自定義IP方法
1) 創(chuàng)建自定義IP。
1.1)點(diǎn)擊菜單Tools->Create and Package IP;
1.2)點(diǎn)擊next,選擇Create a new AXI4 peripheral選項(xiàng);
1.3)顯示IP的名字,版本和描述等信息。這里可以修改了IP的名字即test_IP和存放位置;
1.4)顯示AXI總線接口名字,接口是Slave, 數(shù)據(jù)寬度是32位,IP內(nèi)部的寄存器數(shù)量為4個(gè)。默認(rèn)選項(xiàng),點(diǎn)擊Next;
1.5)點(diǎn)擊Finish完成。
2)添加自定義IP核的功能。
2.1)打開(kāi)IP Catalog界面,右鍵選中test_IP_ip_v1.0, 然后選擇Edit in IP Packager選項(xiàng);
2.2) 點(diǎn)擊OK, 軟件會(huì)自動(dòng)打開(kāi)另外一個(gè)Vivado窗口對(duì)用戶自定義的IP核進(jìn)行編輯;
2.3)雙擊頂層文件test_IP_ip_v1_0.v打開(kāi),在“users to add ports here”位置添加管腳端口定義,如下:
output wire SX_PRF,
output wire SX_TR,
input wire sys_clk,;
2.4) 在頂層文件test_IP_ip_v1_0.v的程序?qū)苣_進(jìn)行例化,如下:
.SX_PRF(SX_PRF),
.SX_TR(SX_TR),
.sys_clk(sys_clk),;
2.5) 在雙擊打開(kāi)rtc_ip_v1_0_s00_AXI.v文件,在以下癿位置添加的管腳端口定義如下:
output wire SX_PRF,
output wire SX_TR,
input wire sys_clk,;
2.6)在“Add user logic here”位置添加實(shí)現(xiàn)產(chǎn)生TR和PRF信號(hào)的代碼如下:
reg[18:0] timer_cnt;
reg SX_PRF1;
reg SX_TR1;
always@(posedge sys_clk)
if(slv_reg0==32'd1)
begin
if(timer_cnt >= 19'd265000)
timer_cnt<= 1'd0;
timer_cnt = timer_cnt + 1'd1;
case(timer_cnt)
19'd0: begin SX_PRF1<=1'b1;SX_TR1<=1'b1;end
19'd1000: begin SX_PRF1<=1'b0;SX_TR1<=1'b0;end
19'd7500: begin SX_PRF1<=1'b1;end
19'd8500: begin SX_PRF1<=1'b0;end
19'd40000: begin SX_PRF1<=1'b1;end
19'd41000: begin SX_PRF1<=1'b0;end
19'd265000: begin SX_PRF1<=1'b1;SX_TR1<=1'b1;end
default:begin SX_PRF1 <= SX_PRF1; SX_TR1 <= SX_TR1; end
endcase
end
else
begin
SX_PRF1<= 0;
SX_TR1<= 0;
timer_cnt <= 0;
end
assign SX_TR=SX_TR1;
assign SX_PRF=SX_PRF1;
2.7) 點(diǎn)擊Save All Files,編譯文件;
2.8)雙擊IP-XACT下的component.xml文件,返回到Package IP-test_IP_ip窗口,點(diǎn)擊Port and Interfaces頃,點(diǎn)擊Merge changes from Ports and Interface Wizard。
2.9) 再對(duì)前面沒(méi)有打鉤d File Groups點(diǎn)擊Merge changes from File Groups Wizard來(lái)更新文件和驅(qū)動(dòng)。 選擇Review and Package選項(xiàng),然后點(diǎn)擊Re-Package IP結(jié)束IP核的設(shè)置。關(guān)閉IP核的Vivado工程,回到系統(tǒng)工程界面。
4 添加約束文件
1)在Diagram窗口,右鍵點(diǎn)擊空白處,選擇Add IP,選擇test_IP_ip_v1.0雙擊添加。
2)點(diǎn)擊Run Connection Automation選項(xiàng), 選中All Automation,使系統(tǒng)自動(dòng)連接端口,點(diǎn)擊Run Block Automation選項(xiàng)。 選中timer_cnt,reg SX_PRF,reg SX_TR這三個(gè)管腳,右鍵選擇Make External。
3)在Source窗口中選中system.bd,右鍵打開(kāi)選擇Generate Output Projects和Create HDL Wrapper選項(xiàng)
4)在xdc文件中添加管腳約束,如下:
set_property IOSTANDARD LVCMOS33 [get_ports SX_PRF]
set_property IOSTANDARD LVCMOS33 [get_ports SX_TR]
set_property IOSTANDARD LVCMOS33 [get_ports sys_clk]
set_property PACKAGE_PIN U18 [get_ports sys_clk]
set_property PACKAGE_PIN R14 [get_ports SX_TR]
set_property PACKAGE_PIN P14 [get_ports SX_PRF]
5) 點(diǎn)擊Generate bitstream生成比特流文件。
5 硬件導(dǎo)入SDK
1) 導(dǎo)出硬件的方法是選擇菜單File->Export->Export Hardware,把bit文件也一起導(dǎo)出。硬件導(dǎo)出后,選擇菜單File->Launch SDK,啟動(dòng)SDK開(kāi)發(fā)環(huán)境。
2)在SDK環(huán)境里重新新建一個(gè)名為ip_test 工程和BSP庫(kù)工程,頃目使用helloworldd 工程模板。
3)修改ip_test工程的helloworld.c如下。
#include
#include "platform.h"
#include "xparameters.h"
void print(char *str);
int main()
{
int i,j;
init_platform();
while(1)
{
for(i=0;i<1000;i++)
for(j=0;j<10000;j++);
Xil_Out32(XPAR_SX11_IP_0_S00_AXI_BASEADDR,0);
for(i=0;i<1000;i++)
for(j=0;j<10000;j++);
Xil_Out32(XPAR_SX11_IP_0_S00_AXI_BASEADDR,1);
print("Hello World\n\r");
}
cleanup_platform();
return 0;
}
6 總結(jié)
本文介紹了xilinx公司自定義IP的方法,以及使用自定義IP進(jìn)行開(kāi)發(fā)的方法,其操作簡(jiǎn)便,實(shí)用性高,可滿足用戶的個(gè)性化要求,封裝好的IP核在后續(xù)的開(kāi)發(fā)工程中可以直接調(diào)用,增強(qiáng)程序的可讀性,簡(jiǎn)化開(kāi)發(fā)過(guò)程。
參考文獻(xiàn):
[1] xilinx,Serial RapidIO Gen2 Endpoint v4.0 LogiCORE IP Product Guide,2015
[2] TI,SRIO Programming and Performance Data on Keystone DSP,2011
作者:余佩
闂備礁鎲$划宀勬嚐椤栨鐟拔旀担鍝ョ獮闂佸搫绋侀崑鍡涘春閿涘嫮纾肩€光偓閸愨晝銆愰梺鐟板级婵炲﹪鐛€n喖绠涙い蹇撴川椤︼拷1缂傚倷璁查埀顒冩珪缁屾寧銇勯弮鈧崹鍨嚕椤掑嫬鐐婇柍鍝勫€婚弳鐘崇箾鏉堝墽绋荤紒顔肩箻閸┾偓妞ゆ巻鍋撻柟閿嬪灩濡叉劕鈹戠€n亞顦ч梺鍛婄懄閿曘垽鎮¢埡鍛€垫繛鎴炲▕濡绢喗绻濋埀顒€鐣烽崶銊ョ毇闂佸憡娲﹂崜娑㈡偉闁秵鐓ユ繛鎴炨缚閻掑嘲鈹戦埥鍡楀籍闁诡垰娲﹂幏鍛喆閸曞灚袧闂傚倸鍊搁崐鐟搬缚濞嗘挸绠柟娈垮枛閸ㄦ繈鏌熼鍡楀枤濞兼繈姊洪幐搴b槈闁兼椿鍨甸妵鎰板磼濠婂嫬浠掗梺闈涒康闂勫嫮绮婚幒鎳酣宕堕妸褏鐤勫┑鐐茬墔閸楄櫕淇婇幘顔芥櫢闁跨噦鎷�
闂傚倷娴囧Λ鍕偋閸℃侗鏁嬫い鏃堟暜閸嬫挸鈽夐幎鑺ヮ€嶅┑鐘亾鐎规洖娲︽刊濂告煟閹寸倖鎴︽倵椤曗偓閺屻劌鈽夊Ο渚缂備緡鍠氭繛鈧鐐查叄瀵挳鎮欏顔界€梺鑽ゅТ濞层倗鈧凹浜畷锝嗙節閸パ咁槴闂佸搫顦冲▔鏇犵矓閸ф鐓熼柕蹇婃櫇閸樻粎绱掓潏銊х疄鐎规洘顨婃俊鎼佸Ω瑜忛悾铏圭磽娴e壊鍎忔い鎴濇閳ь剙鐏氬銊╁焵椤掑倹鏆╅柛妯犲洦鍤愰柣鏃傚帶绾偓闂婎偄娲﹂幐姝岊枀闂備焦瀵х粙鎴︽嚐椤栫偛闂柧蹇涒偓娑氬墾闂佺懓顕崑鐐烘偉闁秵鍋i柟閭﹀灱濞兼劖淇婇悙鎻掆偓鍨潖鐠囩潿搴敄閽樺澹曢梺璺ㄥ櫐閹凤拷
闂備礁鎲¢懝楣冩儗閸岀偑鈧倿顢曢敃鈧弰銉╂煟閺冨洦顏犻柛鈺嬬磿缁辨帒鐣濋崘鈺冦€愰梺鐟板级婵炲﹪鐛幒妤€惟闁靛ǹ鍎抽ˇ銊╂⒑閸濆嫮澧㈤柛鐘查叄瀹曞綊寮崼鐔告珫闁诲繒鍋犲Λ鍕倵婵犳碍鐓涢悗锝庡亜婵本銇勯弮鈧崹鍨嚕椤掑嫬鐐婃い蹇撳閻涒晠姊绘担鐟扮祷缂佽鐗撻崺鈧い鎴炲椤﹂绱撳鍡橆棃闁硅櫕鎹囧畷銊р偓娑櫭肩划顖氣攽椤旂偓鍤€闁稿﹤鐖奸崺鈧い鎴f硶閸斿秵绻濋埀顒勬晸閻樿尙顦繝鐢靛Т閸婅崵绮e▎鎴犵<閻庯綆鍘奸崝鍨亜閳哄鐣遍弫鍫ユ煕鐏炲墽鐭岀紓鍫ヤ憾閺屾盯骞嬪┑鍥舵!闁汇埄鍨扮紞濠囧箠閿熺姴绠涢柍瑙勫劤娴滈箖鏌ㄩ悤鍌涘
闂備礁鎼崐绋棵洪妸鈺傚仧闂佸灝顑戠槐锝夋煕閺囥劌浜介柛姘e亾闂佽崵濮村ú銈団偓姘间邯瀹曪絾绻濋崶褍鐝橀悗骞垮劚閹冲酣锝為妶澶嬬叆婵炴垶岣块悞鎼佹煕婵犲偆鍎戦柟椋庡Т閻o繝鎮ч崼婵冨亾閸楃倣娑㈠级閹稿寒妫為梺缁樻尰閻燂妇绮欐径鎰闁归绀侀弲娆撴煟鎼达絾顏熺紒杈ㄦ礃閻忔瑩姊洪幐搴b槈闁活剝鍋愰崚鎺撳閺夋垹顦╅柡澶屽仧婢ф宕h箛娑欑厸闁逞屽墰閹叉挳宕熼銏╂闂佽崵鍠愰悷銈囨閵堝洦顫曟繝闈涱儏缁犵敻鏌熼悧鍫濐棆鐟滈偊鍨堕幃璺侯潩閻撳簼绨奸柣銏╁灡閹稿啿顕i妸鈺佺濞达絽婀遍弳鐘绘⒑閸涘﹤鐏╁┑顔煎槻椤斿繑绺界粙璇俱儵鏌ㄩ悤鍌涘
闂備浇銆€閸嬫捇鏌i悢鍝勵暭婵犮垺鐗犲濠氬醇閵忕姳鍝楅柣搴㈣壘绾绢參骞忛悩娲绘晣闁绘梻鍎よ闂佽崵濮村ù鍌炲储妤e喛缍栭柡宥庡幗閸庢﹢鏌¢崒娑卞劌闁告柨鎳橀弻銈夊级閹稿骸娅ら梺鍝勵儏閸熸壆鍒掗埡鍛亹濞撴凹鍨板▓褔鏌i悢椋庢闁稿鎹囬弻銊モ槈濡偐浼囬梺鐐藉劜钃辩紒灞藉船閳规垿宕堕妸褉鍋撻鍓х<闁哄啫鍊稿皬缂備焦顨呴ˇ闈涚暦閸洘鍋愬〒姘煎灠濞堁囨煟閻旈娈遍柛瀣崌閺屾洟宕遍弴鐔恒偘濡炪倖娲忛崹褰掑煝閺冨牆鍗抽柣妯虹仛閹綁姊婚崒姘簽闁革綇缍侀妴鍌涚鐎n偄娈岄悗鍏夊亾闁告洏鍔屾禍楣冩煃瑜滈崜姘辩矚闁稁鏁婇柣鎰靛墯濞呮棃姊洪懖鈺傜効婵炲懏娲滈埀顒佽壘濡稓鍒掑▎鎴炲晳闁靛牆鍊告禍楣冩煥閻曞倹瀚�
闂備焦鎮堕崕鏉懳涢崟顖氳埞閻庢稒锚缁剁偤鏌″搴″箻鐟滈偊鍨堕弻鈥愁吋娴f彃浜鹃柧蹇e亜椤忣垳绱撴担鍓叉Ч闁搞劌缍婇幃銉ッ洪鍕彉闂佺粯鍨跺玻鍧楀焵椤掑鐏i柛鎺撳笚閵堬綁宕橀敐鍛濠殿喗锕╅崑澶愬储椤掑嫭鐓犻悹鍥ㄥ絻閼稿湱鈧鍠涘畷鐢稿箯閻樻椿鏁囬柣妯虹-閺嗙姵绻涢幋鐐村鞍闁瑰憡鎮傞、娆忣吋閸モ晝顦╅梺鍝勫缁绘帒危椤栫偞鐓涢柛灞剧瀹告繈鏌e┑鍫濆幋闁轰礁绉撮悾婵嬪焵椤掑嫬鐏虫俊顖濆吹閳瑰秵绻濋棃娑冲伐妞ゅ繋鍗抽弻锟犲磼濮橆厾鈹涢梺浼欓檮缁诲嫰骞忛悩娲绘晣闁绘劕寮堕悵顖滅磼缂併垹寮鹃柛鐘愁殜閸┾偓妞ゆ埈鍏涚拋鏌ュ磻閹惧瓨濯村瀣捣閹冲洦绻涢幋鐐村鞍缁炬澘绉归崺鈧い鎴厸鐠佹煡宕戦幘缁樻櫢闁跨噦鎷�
濠电偠鎻紞鈧繛澶嬫礋瀵偊濡舵径濠勫€炴繛瀵稿Т椤戝棝顢撴惔銊︾厸闁割偁鍨归弸搴ㄦ煕閵婏附顥堥柡灞芥噹椤繃娼忛妸锔筋吂闂備浇妗ㄩ懗鑸垫櫠濡も偓閻e灚鎷呯憴鍕妳闂佽鍎冲﹢杈╃不婵犳碍鍋犳繛鎴炨缚閻掔兘鎮楀顓炩枙鐎殿噮鍓熷畷鍫曞Ω瑜嶅銊╂⒒娴g懓绲荤紒瀣濡叉劕鈹戠€n偄娈ч悗鐟板婢瑰棛鎹㈡担绯曟闁圭偓濞婇妤呮煕閵堝骸寮柟顔ㄥ洤閱囨繝闈涙处閻濇粓姊洪悜鈺傛珖閺嬵亪鏌熼鑺ュ磳闁哄苯鑻濂稿椽娴e墣鈺呮⒑缂佹ḿ鐭婃繛璇х稻缁岃鲸绻濋崶褏鐣冲銈嗙墦閸婃绮堟径鎰厵缂備焦锚婵洤顭胯婵炩偓婵﹨妫勯鍏煎緞婵犲喚浠ч梻渚€娼уΛ鎾箯閿燂拷
闂備礁鎼崯銊╁礉鐏炴枻鑰挎い蹇撴閺嗘粍銇勯弮鍥у惞缂佸锕弻銈夊级閹稿骸娅i梺姹囧妸閸ㄨ崵鍒掑▎鎰窞闁告稑饪撮崑銊╂⒑閸︻厾甯涢柛鏃€甯掗~婵嬫晝閸屾稑娈滈悗瑙勬礀濞诧妇绮eΔ鍛厸鐎广儱鎳忔径鍕節閳ь剟鏁撻悩鑼槴婵犵數濮撮崯顐︼綖瀹€鈧槐鎺斺偓锝庡幗绾爼姊洪纰卞殶缂佽鲸甯¢幃銈夊磼濠婂拋妲峰┑鐐舵彧缁插墽鍒掕箛娑樼劦妞ゆ巻鍋撻柟铏戠€靛ジ鍩¢崨顓狀槯閻庡箍鍎遍悧鍐磻閹捐纾归柣鏇氱濞堚晠姊洪崫鍕殭闁绘牜鍘ц灋闁秆勵殕閺咁剟鎮橀悙鏉戝姢闁诲繑顨婇弻娑㈠Ψ瑜嶉瀷濡炪倖娲忛崐婵嬬嵁濞嗗浚鍚嬮柛鏇ㄥ幘閳绘洟鏌f惔婵堢シ濠㈢懓鐗撳畷浣冾樄闁哄苯鎳橀崺鈧い鎺戝€婚惌娆撴偡娴i潧鈧劙宕戦幘缁樻櫢闁跨噦鎷�