時間:2021年04月28日 分類:電子論文 次數(shù):
摘 要:Zynq7000系列基于Xilinx全可編程的可擴(kuò)展處理平臺結(jié)構(gòu)是一種SoC芯片,集成了Cortex-A9雙核ARM和FPGA。Xilinx公司為大家提供許多的IP核,在Vivado的IP Catalog中可以查看,有時這些IP核復(fù)雜,或者不能完全滿足用戶需求,因此Xilinx公司為用戶提供用戶可以創(chuàng)建屬于自己的IP核,系統(tǒng)化定制,簡化設(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處理器,整個處理器的搭建都以處理器為中心,整個處理器子系統(tǒng)中集成了內(nèi)存控制器和大量的外設(shè),使CortexTM-A9的核在Zynq-7000中完全獨(dú)立于可編程邏輯單元,即Zynq-7000系列芯片包含ARM的PS部分,和FPGA部分(PL),其中PS集成了兩個Cortex™-A9處理器,AMBA®互連,內(nèi)部存儲器,外部存儲器接口和外設(shè)。返些外設(shè)主要包括USB總線接口,以太網(wǎng)接口,SD/SDIO接口,I2C總線接口,CAN總線接口,UART接口,GPIO等。PS和PL部分可以協(xié)同工作,也可以獨(dú)立工作。
計(jì)算機(jī)評職知識:計(jì)算機(jī)應(yīng)用研究期刊投稿領(lǐng)域和要求
為方便用戶開發(fā)使用,xilinx公司提供了許多IP核,有時候這些接口時序復(fù)雜,不利于實(shí)際應(yīng)用,因此,xilinx公司還提供了自定義IP的方法來滿足用戶的個性需求,同時提供了典型的接口ip供用戶使用。利用自定義IP的方法實(shí)現(xiàn)PS-PL通信接口是使用Xilinx提供的IP封裝工具,將用戶代碼封裝成為標(biāo)準(zhǔn)AXI總線形式模塊,將模塊以圖形化的方式加入頂層文件中并進(jìn)行AXI總線的自動連接,這種方式為用戶提供了系統(tǒng)化、個性化的服務(wù)。
2 建立新的系統(tǒng)工程
本文使用黑金開發(fā)板介紹自定義IP的方法,黑金開發(fā)板使用的芯片為Xilinx公司的xc7z020clg400-2。具體方法如下:
1)在Vivado開發(fā)環(huán)境里新建了一個名稱為test_IP工程,并生成一個名為system的Block Diagram文件,再在該原理圖中添加ZYNQ7 Processing System內(nèi)核系統(tǒng)。
2)雙擊Diagram界面里的ZYNQ Processing System,打開ZYNQ系統(tǒng)的配置界面。
其中Page Navigator界面下有8個子項(xiàng),分布為Zynq Block Design, PS-PL Configuration, Peripheral I/O Pins, MIO Configration, Clock Configuration, DDR Configuration, SMC Timing Calculation, Interrupts。這些頁面選項(xiàng)對應(yīng)的是ZYNQ的不同同硬件模塊的配置,其中PS_PL頁面提供了PS到PL的相關(guān)接口配置信息以及PS部分一些配置信息;Peripheral I/O Pins頁面主要是對一些通用外設(shè)接口的配置;MIO Configruation頁面主要是對MIO已經(jīng)EMIO的分配控制;Clock Configruation頁面主要是對PS端時鐘資源的配置和管理;DDR Configration頁面主要是對DDR控制器一些參數(shù)的配置;Interrupts頁面主要是對中斷進(jìn)行配置管理。
2.1) 點(diǎn)擊Peripheral I/O Pins選項(xiàng)。
在AX7020開發(fā)板上, MIO48和MIO49是連接到UART芯片上,是作為串口通信使用的。因此這里配置成UART1的功能,點(diǎn)擊MIO48,49對應(yīng)的UART1, 方框的顏色會發(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)中沒有用到PL部分外設(shè),所以就沒有PL的外設(shè)需要掛到AXI的總線上,也就部需要AXI GP0的Master總線了,因此這里把FCLK_RESET0_N和M AXI GP0 interface的選頃去掉。
2.4) 點(diǎn)擊Clock Configuration頃。
這個界面會顯示ZYNQ系統(tǒng)的一些時鐘,比如輸入時鐘是33.33333Mhz, 與開収板上癿PS癿系統(tǒng)時鐘是一樣是。CPU的工作時鐘是666.666666Mhz, DDR的工作時鐘是533.333333Mhz,這些時鐘頻率默認(rèn)。
由于本實(shí)驗(yàn)中沒有用到PL部分外設(shè),所以可以把PL的FCLK_CLK0前面的選項(xiàng)去掉,不會產(chǎn)生FCLK_CLK0。
2.5) 打開DDR Configration選項(xiàng)。
這個界面上是選擇DDR芯片的名稱和一些參數(shù)。此界面在Memory Part選項(xiàng)中需要選擇跟開發(fā)板上DDR3型號一樣的名稱,AX7020開發(fā)板選擇MT41J256M16 RE-125。
配置完成點(diǎn)擊OK退到Vivado的開發(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個。默認(rèn)選項(xiàng),點(diǎn)擊Next;
1.5)點(diǎn)擊Finish完成。
2)添加自定義IP核的功能。
2.1)打開IP Catalog界面,右鍵選中test_IP_ip_v1.0, 然后選擇Edit in IP Packager選項(xiàng);
2.2) 點(diǎn)擊OK, 軟件會自動打開另外一個Vivado窗口對用戶自定義的IP核進(jìn)行編輯;
2.3)雙擊頂層文件test_IP_ip_v1_0.v打開,在“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) 在雙擊打開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信號的代碼如下:
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) 再對前面沒有打鉤d File Groups點(diǎn)擊Merge changes from File Groups Wizard來更新文件和驅(qū)動。 選擇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)自動連接端口,點(diǎn)擊Run Block Automation選項(xiàng)。 選中timer_cnt,reg SX_PRF,reg SX_TR這三個管腳,右鍵選擇Make External。
3)在Source窗口中選中system.bd,右鍵打開選擇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,啟動SDK開發(fā)環(huán)境。
2)在SDK環(huán)境里重新新建一個名為ip_test 工程和BSP庫工程,頃目使用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)行開發(fā)的方法,其操作簡便,實(shí)用性高,可滿足用戶的個性化要求,封裝好的IP核在后續(xù)的開發(fā)工程中可以直接調(diào)用,增強(qiáng)程序的可讀性,簡化開發(fā)過程。
參考文獻(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
作者:余佩