zynq系列之(二)GPIO和BRAM读写操作,另附小技巧(要看到最后)

一、接zynq系列之(一)的工程,把AXI GPIO和AXI Bram模块添加到Block Design里面,并且通过C程序来实现GPIO对LED灯的控制和BRAM数据的读写

1. 右击空白处输入GPIO和BRAM,添加GPIO和BRAM模块。

2. 完成后,单击Run Connection Automation,Vivado软件会自动帮你把连线连接好。

选中All Automation,并点OK。

3. 双击GPIO模块进行参数设置,比如设置GPIO的输入输出、位宽、初始值灯,BRAM模块通过Address Editor来着寻址空间。

4. 最开始AXI地址分配用默认分配即可,默认GPIO寻址空间为64K,BRAM寻址空间为8K。

5. 右击空白处,选择Validate Design,或者快捷键F5来检查Block Design是否有连接和设置错误。

6. 右击system.bd选中Create HDL Wrapper…,可以发现生成之后的system_wapper.v多出来gpio_rtl_0_tri_o这个output 信号,后面对这个信号约束到LED引脚上,就可以通过程序控制GPIO来操作LED灯的闪亮了。

7. 生成约束文件,单击Add Sources,并选择Add or create constraints,点击Next添加一个引脚约束文件,命名为pins.xdc,并填入约束信息。

由于开发板上之后两个LED灯,所以本工程的GPIO设置的位宽为2,方向为output。

8. 生成bit并烧录到开发板上。

9. 把..\project_1\project_1.sdk\目录下的所有文件都删除掉,然后重新export hardware文件,并Luanch SDK打开SDK软件。

10. 生成新的软件工程的时候注意最后一步选择Peripheral Tests例程,然后点击Finish。

11. 找到teestperihp.c,只保留主函数main()里面的GpioOutExample进行GPIO测试。

  1. 运行debug as -> Launch on Hardware,并点击运行按钮会发现板子上的灯闪烁了一下。

13. 进入到GpioOutputExample(XPAR_AXI_GPIO_0_DEVICE_ID,2)函数中发现是XGpio_DiscreteWrite()这个函数对GPIO进行了写操作,赋值1或者0。

通过设置断点可以查看赋值为1时点亮了LED灯,赋值为0时LED熄灭,从而实现了通过GPIO来控制LED的闪亮。回到步骤3,可以通过设置GPIO为Input来实现对GPIO接口的读操作。

14. 我们通过对XGpio_DiscreteWrite()这个函数的层层追溯,发现实际的外设操作是通过xil_io.h文件里面的Xil_out32()这个函数来操作的,那么我们直接操作这个函数是不是就可以对外设操作了读写了?答案是的!

15. 首先在xparameters.h里面找到GPIO的AXI总线地址定义XPAR_AXI_GPIO_0_BASEADDR,然后在testperiph.c里面添加#include "xil_io.h",并在main()里面加入Xil_Out32(XPAR_AXI_GPIO_0_BASEADDR, 0x3 or 0x0) 就可以对GPIO进行赋值操作了,观察LED灯可以发现和例程里面的赋值操作一样。

这就是对外设操作的一个小技巧,理论上任何AXI外设都可以如此操作,下面用Xil_out32和Xil_In32对BRAM进行读写操作。

16. 在xparameters.h里面找到BRAM的AXI总线地址定义XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR,然后在testperiph.c的main()里面加入如下代码,运行后通过加入断点看到a的值果然变为了0x12345678,说明对BRAM的读写操作成功了。

以上就是关于GPIO和BRAM外设的读写操作,限于篇幅Linux下的操作等后续介绍到用Petalinux生成系统启动文件(Boot.bin和Image.ub)的时候再加入。

后续章节会着重介绍PL,从一些简单的逻辑程序到典型IP的应用都会持续更新。其实做zynqFPGA开发会用一些特定的IP非常非常重要,比如数字信号处理的FIR、FFT、DDS、Cordic,视频编解码H.264,通信编解码RS、Turbo、LDPC,高速接口204B/C、PCIE、CPRI和DDR,甚至一些Xilinx专用算法IP等等,后面会选一些IP给介绍一下。总之,作为一个FPGA工程师不能仅仅局限在会写Verilog代码即可的要求中,要扩大知识面,逻辑、数字、算法、软件、数字硬件、模拟硬件、系统设计、架构设计,一步一步的去探索,成为一个FPGA系统工程师!

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章