
基于XC7Z010的自定义IP方法.docx
8页基于XC7Z010的自定义IP方法 摘 要:Zynq7000系列基于Xilinx全可编程的可扩展处理平台结构是一种SoC芯片,集成了Cortex-A9双核ARM和FPGAXilinx公司为大家提供许多的IP核,在Vivado的IP Catalog中可以查看,有时这些IP核复杂,或者不能完全满足用户需求,因此Xilinx公司为用户提供用户可以创建属于自己的IP核,系统化定制,简化设计本文讲述了Zynq7000系列芯片如何在Vivado中建立AXI总线类型的IP核,实现自定义IP核,并试验关键词:Z7 自定义IP AXI总线1 引言Zynq-7000系列芯都有完整的ARM处理子系统,其包含了双核的CortexTM-A9处理器,整个处理器的搭建都以处理器为中心,整个处理器子系统中集成了内存控制器和大量的外设,使CortexTM-A9的核在Zynq-7000中完全独立于可编程逻辑单元,即Zynq-7000系列芯片包含ARM的PS部分,和FPGA部分(PL),其中PS集成了两个Cortex™-A9处理器,AMBA互连,内部存储器,外部存储器接口和外设返些外设主要包括USB总线接口,以太网接口,SD/SDIO接口,I2C总线接口,CAN总线接口,UART接口,GPIO等。
PS和PL部分可以协同工作,也可以独立工作为方便用户开发使用,xilinx公司提供了许多IP核,有时候这些接口时序复杂,不利于实际应用,因此,xilinx公司还提供了自定义IP的方法来满足用户的个性需求,同时提供了典型的接口ip供用户使用利用自定义IP的方法实现PS-PL通信接口是使用Xilinx提供的IP封装工具,将用户代码封装成为标准AXI总线形式模块,将模块以图形化的方式加入顶层文件中并进行AXI总线的自动连接,这种方式为用户提供了系统化、个性化的服务2 建立新的系统工程本文使用黑金开发板介绍自定义IP的方法,黑金开发板使用的芯片为Xilinx公司的xc7z020clg400-2具体方法如下:1)在Vivado开发环境里新建了一个名称为test_IP工程,并生成一个名为system的Block Diagram文件,再在该原理图中添加ZYNQ7 Processing System内核系统2)双击Diagram界面里的ZYNQ Processing System,打开ZYNQ系统的配置界面其中Page Navigator界面下有8个子项,分布为Zynq Block Design, PS-PL Configuration, Peripheral I/O Pins, MIO Configration, Clock Configuration, DDR Configuration, SMC Timing Calculation, Interrupts。
这些页面选项对应的是ZYNQ的不同同硬件模块的配置,其中PS_PL页面提供了PS到PL的相关接口配置信息以及PS部分一些配置信息;Peripheral I/O Pins页面主要是对一些通用外设接口的配置;MIO Configruation页面主要是对MIO已经EMIO的分配控制;Clock Configruation页面主要是对PS端时钟资源的配置和管理;DDR Configration页面主要是对DDR控制器一些参数的配置;Interrupts页面主要是对中断进行配置管理2.1) 点击Peripheral I/O Pins选项在AX7020开发板上, MIO48和MIO49是连接到UART芯片上,是作为串口通信使用的因此这里配置成UART1的功能,点击MIO48,49对应的UART1, 方框的颜色会发成绿色如此MIO48,49的管脚功能就固定了,只能作为UART的功能其中MIO48为串口发送,MIO49为串口接收2.2)点击PS-PL Configuration选项在Gemeral目录下,可以看到UART1的波特率115200,因此选择115200,可以根据需要更改 因为本实验中没有用到PL部分外设,所以就没有PL的外设需要挂到AXI的总线上,也就部需要AXI GP0的Master总线了,因此这里把FCLK_RESET0_N和M AXI GP0 interface的选顷去掉。
2.4) 点击Clock Configuration顷这个界面会显示ZYNQ系统的一些时钟,比如输入时钟是33.33333Mhz, 与开収板上癿PS癿系统时钟是一样是CPU的工作时钟是666.666666Mhz, DDR的工作时钟是533.333333Mhz,这些时钟频率默认由于本实验中没有用到PL部分外设,所以可以把PL的FCLK_CLK0前面的选项去掉,不会产生FCLK_CLK02.5) 打开DDR Configration选项这个界面上是选择DDR芯片的名称和一些参数此界面在Memory Part选项中需要选择跟开发板上DDR3型号一样的名称,AX7020开发板选择MT41J256M16 RE-125配置完成点击OK退到Vivado的开发环境3 自定义IP方法1) 创建自定义IP1.1)点击菜单Tools->Create and Package IP;1.2)点击next,选择Create a new AXI4 peripheral选项;1.3)显示IP的名字,版本和描述等信息这里可以修改了IP的名字即test_IP和存放位置;1.4)显示AXI总线接口名字,接口是Slave, 数据宽度是32位,IP内部的寄存器数量为4个。
默认选项,点击Next;1.5)点击Finish完成2)添加自定义IP核的功能2.1)打开IP Catalog界面,右键选中test_IP_ip_v1.0, 然后选择Edit in IP Packager选项;2.2) 点击OK, 软件会自动打开另外一个Vivado窗口对用户自定义的IP核进行编辑;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的程序对管脚进行例化,如下:.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”位置添加实现产生TR和PRF信号的代码如下:reg[18:0] timer_cnt;reg SX_PRF1;reg SX_TR1;always@(posedge sys_clk)if(slv_reg0==32d1)beginif(timer_cnt >= 19d265000)timer_cnt<= 1d0;timer_cnt = timer_cnt + 1d1;case(timer_cnt)19d0: begin SX_PRF1<=1b1;SX_TR1<=1b1;end19d1000: begin SX_PRF1<=1b0;SX_TR1<=1b0;end19d7500: begin SX_PRF1<=1b1;end19d8500: begin SX_PRF1<=1b0;end19d40000: begin SX_PRF1<=1b1;end19d41000: begin SX_PRF1<=1b0;end19d265000: begin SX_PRF1<=1b1;SX_TR1<=1b1;enddefault:begin SX_PRF1 <= SX_PRF1; SX_TR1 <= SX_TR1; endendcaseendelsebeginSX_PRF1<= 0;SX_TR1<= 0;timer_cnt <= 0;endassign SX_TR=SX_TR1;assign SX_PRF=SX_PRF1;2.7) 点击Save All Files,编译文件;2.8)双击IP-XACT下的component.xml文件,返回到Package IP-test_IP_ip窗口,点击Port and Interfaces顷,点击Merge changes from Ports and Interface Wizard。
2.9) 再对前面没有打钩d File Groups点击Merge changes from File Groups Wizard来更新文件和驱动 选择Review and Package选项,然后点击Re-Package IP结束IP核的设置关闭IP核的Vivado工程,回到系统工程界面4 添加约束文件1)在Diagram窗口,右键点击空白处,选择Add IP,选择test_IP_ip_v1.0双击添加2)点击Run Connection Automation选项, 选中All Automation,使系统自动连接端口,点击Run Block Automation选项 选中timer_cnt,reg SX_PRF,reg SX_TR这三个管脚,右键选择Make External3)在Source窗口中选中system.bd,右键打开选择Generate Output Projects和Create HDL Wrapper选项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) 点击Generate bitstream生成比特流文件。
5 硬件导入SDK1) 导出硬件的方法是选择菜单File->Export->Export Hardware,把bit文件也一起导出硬件导出后,选择菜单File->Launch SDK,启动SDK开发环境2)在SDK环境里重新新建一个名为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<1。









![2019版 人教版 高中语文 必修 上册《第一单元》大单元整体教学设计[2020课标]](http://img.jinchutou.com/static_www/Images/s.gif)


