原创 Vivado嵌入式系统设计(2)——在PL内添加外设

2017-9-23 14:39 2232 17 17 分类: FPGA/CPLD


新建一个zynq_2的文件夹,将上个实验的工程的文件全部拷贝到这个文件夹。

打开这个工程

(一) 添加两个GPIO实例

 下面将使能 AXI_M_GP0 接口、FCLK_RESET0_NFCLK_CLK0端口,从IP Catalog 中选择并添加2GPIO例化到PS中。在 Source 标签下,展开system_wrapper,在展开项中,选择并双击system.bd文件,调用IP集成器。(也可以在Flow Navigator 窗口下,在IP Integrator 下,单击 Open Block Design)。

 在Diagram窗口下,双击ZYNQ块符号,打开ZYNQ配置。单击32b GP AXI Master Ports

 在Diagram窗口下,双击ZYNQ块符号,打开ZYNQ配置。单击32b GP AXI Master Ports。弹出PS-PL Configuration界面。在该界面中,选中AXI GP0 interface后的复选框。

 


  展开General Enable Clock Resets,选中FCLK_RESET0_N后的复选框。

  选择页面左侧的Clock Configuration 标签。在右侧窗口中,展开PL Fabric Clock。在展开项中找到并选中FCLK_CLK0后的复选框(所对应的时钟频率100M)。

  单击OK按钮,可以看到新添加了M_AXI_GP0接口;新添加了M_AXI_GP0_ACLKFCLK_CLK0  FCLK_RESET0_N端口。


  单击Diagram左侧一列工具栏内添加IP按钮,在搜索框输入g,找到AXI GPIO IP核。双击添加到设计中。



点击 axi_gpio_0块图标。在Block Properties 窗口内,将Name后面的名字改为 switches



  双击axi_gpio_0块图标,打开配置对话框。(由于在建立工程时已经选择了Zedboard,提供了用于zedboard的板级支持包,所以vivado知道板子可以利用的资源)。

  按照如下参数配置。


单击 IP Configuration标签,按如下配置。


  单击OK按钮。在Diagram窗口的最上面出现Designer Assistance is available 。单击右侧的 Run Connection Automation,弹出一个对话框,选中switches




可以看到连接完成的系统结构,图中新添加了2个模块。

  1. rst_processing_system7_0_100M (Processor System Reset IP 核例化的名字)
  2. processing_system7_0_axi_periph (AXI Interconnect IP核的例化名字)


单击 Diagram 左侧添加IP的按钮,在弹出的额搜索框内输入g,双击AXI GPIO将其添加到设计中。

单击新添加的模块,在 Block Properties 的窗口内,将Name 后面的名字改为 buttons

双击新加的模块,按如下配置。


双击 AXI Interconnect 块图标,弹出配置对话框,将 Number of Master Interfaces 后的值改为2



  单击新的AXI GPIO 块的 S_AXI 端口,出现一个指针箭头,拖拽并一直按着鼠标左键。出现 Found 1 interface 消息,在 AXI InterconnectM01_AXI 端口右边出现一个勾,表示这是一个有效的连接端口,拖拽鼠标到这个端口。这样新的GPIO模块和AXI端口相连接。

类似,连接下面的端口

  1. buttons s_axi_aclk——Zynq7 Processing System FCLK_CLK0
  2. buttons s_axi_aresetn——Processor System reset Peripheral_aresetn[0:0]
  3. AXI Interconnect M01_ACLK——Zynq7 Processing System FCLK_CLK0[0:0]
  4. AXI Interconnect M01_ARESETN[0:0]——Processor System Reset Peripheral_aresetn[0:0]


  选择 Address Editor 标签。在该标签窗口,可以看到为switches自动分配了地址,但没有为buttons分配地址。选中buttons,单击鼠标右键,出现浮动菜单,执行菜单命令 Assign Address



(二)连接外部GPIO外设

  前面添加的按键和开关控制器buttonsswitches,将连接到zedboard的相应的引脚,用于控制外部设备。该连接过程可以手工完成,也可以使用设计助手。相应的引脚约束信息由zedboard板给出。


连接外部GPIO外设的步骤如下:

  1. Diagram视图中,忽略该提示,将手工创建一个端口,并且连接到buttons实例;
  2. 鼠标右键单击 buttons 实例的GPIO端口,出现浮动的端口。执行 make external。该命令用于创建外部名字为gpio的端口,并且连接到外设;
  3. 选择switches 模块的sws_8bits 端口,在其属性窗口内将其名字改为switches;
  4. 选择buttons模块的GPIO端口,在其属性窗口内将其名字改为buttons;(由上游的宽度自动确定gpio接口宽度)
  5. vivado 主界面菜单中,Tools ,Validate Design ;或者在 Diagram 左侧的一列工具栏内单击按钮,完成对设计的验证。

设计完成的系统结构




(三)设计约束

  在Source 窗口内,右键单击system.bd 文件,在浮动菜单内,执行Create HDL Wrapper,更新HDL文件。弹出Create HDL Wrapper 对话框,在该对话框内,选中 Let Vivado manage wrapper and auto-update 前面的复选框。然后进行综合,然后打开综合后的设计。

  在快捷栏下拉框下,选择I/O Planning 选项。展开button_tri_i,可以看到已经为该控制器分配了引脚,引脚信息也包含在板级支持包内。当IP自动连接到端口时,自动分配引脚,Switches_tri_i也自动分配了引脚。




(四)生成比特流和导出硬件到SDK

  在vivado Flow Navigator 窗口下找到并展开 Program and Debug 选项。在展开项中,找到并双击Generate Bitstream .

       Vivado 当前工程主界面菜单下,执行菜单命令,File,Export,Export Hardware。弹出 Export Hardware 对话框,在该对话框中吗,必须选中 Include bitstream 前面的复选框(因为设计中使用了ZYNQPL部分)。然后执行 File, Launch SDK


(五)生成测试程序

  在SDK主界面左侧的Project Explorer 窗口下,分别选中mem_testmem_test_bsp,单击鼠标右键,出现浮动菜单。执行 Delete。这样就删除了前一个工程所生成的应用工程和板级支持包。

  同样的,在Project Explorer 窗口下,选中 system_wrapper_hw_platform_0 ,单击鼠标右键,出现浮动菜单,执行Delete,这样就删除了前一个工程生成的硬件平台信息。

  在SDK主界面菜单下,执行 File,New, Board Support Package。弹出一个对话框,单击Finish按钮,弹出Board Support Package Settings对话框,单击OK,自动编译BSP工程。



SDK主界面的菜单下,执行命令 FileNewApplication Project.弹出的对话框按如下配置 



  点击 Next 按钮, 弹出New Project-Template 对话框,在Available Templates 下面选择 Empty Application。单击 Finish 按钮,在后台运行库生成器并且生成xparameter.h文件

  在SDK主界面的 Project Explorer 窗口下,展开 TestApp,src。选中src,单击鼠标右键,出现浮动菜单。执行Import,展开General 选项,选择File System。单击Next,按下图


其中TestAPP.c的代码如下:

#include "xparameters.h"
#include "xgpio.h"

int main(void)
{
XGpio dip,push;
int psb_check,dip_check;

xil_printf("--Start of the Programm--\r\n");

XGpio_Initialize(&dip,XPAR_SWITCHES_DEVICE_ID);
XGpio_SetDataDirection(&dip,1,0xffffffff);

XGpio_Initialize(&push,XPAR_BUTTONS_DEVICE_ID);
XGpio_SetDataDirection(&push,1,0xffffffff);

while(1)
{
psb_check = XGpio_DiscreteRead(&push,1);
xil_printf("Push Buttons Status %x\r\n",psb_check);
dip_check = XGpio_DiscreteRead(&dip,1);
xil_printf("DIP Switch Status %x\r\n",dip_check);

sleep(1);
}

}  


(六)验证设计 按照前面的方法,连接PCZedboard直接的JTAGUART,并且给板子上电。选择Terminal 标签,按以前的参数配置 UART

  SDK 主界面的菜单下,执行,Xilinx ToolsProgram FPGA,在弹出的对话框中,单击Program按钮,将比特流文件下载到FPGA。当编程完成后,zedboard 板上的DONE LED(蓝色)变亮。

      SDK主界面左侧的Project Explorer窗口下,选择TestApp,单击鼠标右键,出现浮动菜单。执行Run AsLaunch on Hardware(GDB).将应用程序下载到FPGA,执行ps7_initTestApp.elf





PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
17
关闭 站长推荐上一条 /3 下一条