学术咨询

让论文发表更省时、省事、省心

基于XC7Z010的自定义IP方法

时间:2021年04月28日 分类:电子论文 次数:

摘 要:Zynq7000系列基于Xilinx全可编程的可扩展处理平台结构是一种SoC芯片,集成了Cortex-A9双核ARM和FPGA。Xilinx公司为大家提供许多的IP核,在Vivado的IP Catalog中可以查看,有时这些IP核复杂,或者不能完全满足用户需求,因此Xilinx公司为用户提供用户

  摘 要:Zynq7000系列基于Xilinx全可编程的可扩展处理平台结构是一种SoC芯片,集成了Cortex-A9双核ARM和FPGA。Xilinx公司为大家提供许多的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_CLK0。

  2.5) 打开DDR Configration选项。

  这个界面上是选择DDR芯片的名称和一些参数。此界面在Memory Part选项中需要选择跟开发板上DDR3型号一样的名称,AX7020开发板选择MT41J256M16 RE-125。

  配置完成点击OK退到Vivado的开发环境。

  3 自定义IP方法

  1) 创建自定义IP。

  1.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==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) 点击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 External。

  3)在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 硬件导入SDK

  1) 导出硬件的方法是选择菜单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<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 总结

  本文介绍了xilinx公司自定义IP的方法,以及使用自定义IP进行开发的方法,其操作简便,实用性高,可满足用户的个性化要求,封装好的IP核在后续的开发工程中可以直接调用,增强程序的可读性,简化开发过程。

  参考文献:

  [1] xilinx,Serial RapidIO Gen2 Endpoint v4.0 LogiCORE IP Product Guide,2015

  [2] TI,SRIO Programming and Performance Data on Keystone DSP,2011

  作者:余佩