Vivado软核microblaze用gpio控制led
软件版本:vivado2017.2
芯片型号:xc7a35tcsg325-2
AXI通用输入/输出(GPIO)核心提供了一般性AXI的目的输入/输出接口。
优点:操作简便
缺点:速度慢
然后介绍下AXI GPIO(2.0)这个IP。在下面我们也用到了这个IP。
特点:1.支持AXI_lite 接口规格。
2.支持单/双通道。通道的宽度可配置。
3.支持可配置,可编程的端口类型:输入/输出。
4.支持中断
内部寄存器说明:
地址 寄存器名称 访问类型 描述
0x0000 GPIO_DATA R/W 通道1 AXI GPIO数据寄存器。
0x0004 GPIO_TRI R/W 通道1 AXI GPIO三态控制寄存器。
0x0008 GPIO2_DATA R/W 通道2 AXI GPIO数据寄存器。
0x000C GPIO2_TRI R/W 通道2 AXI GPIO三态控制。
0x011C GIER R/W 全局中断使能寄存器。
0x0128 IP IER R/W IP中断使能寄存器(IP IER)。
0x0120 IP ISR R/TOW IP中断状态寄存器。
我们在IP配置的时候可以选择是选用单通道,还是双通道(下面我们用的是单通道)。
数据寄存器:我们需要发送或者接收的数据。
三态控制寄存器:只有我们在IP配置的时候把端口选择为三态的时候,往寄存器写1时,相应的I/O端口配置为输入端口;往寄存器写0时相应的I/O端口配置为输出端口。
其他详细内容可看官方文档:https://www.xilinx.com/support/documentation/ip_documentation/axi_gpio/v2_0/pg144-axi-gpio.pdf
然后接下来就来说说详细的操作过程:
1. 在vivado下新建一个工程,然后打开block design。然后我们就可以像画原理图一样把设计给画出来了。而且一句代码都不用写!
Block design的方便之处就是不像以前那样写那么多繁琐的代码。大部分主流的IP都可以找到,而且,你还可以将自己写的代码封装成一个IP,放在block design里面用,可以说是非常方便。具体如何封装可自行百度,这里不再累赘。
2. 添加microblaze。
双击它就可以进行配置了。
红线部分是使能microblaze的debug工具。这个选项一定要勾上,这样我们才可以在SDK里面进行调试。
3. 保存。点击上面蓝色字体:Run Block Automation。这样软件就可以自动帮你添加缺少的IP并连线。
如果我们需要在SDK里面打印,可以把Debug Module改成Debug & UART。 OK。
然后,我们发现突然多了这么多东西,这些都是microblaze需要搭配的IP,然后我们再点击蓝色字体Run Connection Automation。
这时候发现有两个复位,我们可以手动的把两个合成一个,方便引脚约束。
改完之后,只剩下一个时钟和复位了。
这里提醒一下,diff_clock_rtl连的是差分时钟,如果板子用的是单端时钟,可以在clk_wiz_1里面修改,如下图:
4. 然后我们再添加GPIO来连接led。方法还是一样,在ip里面搜索“GPIO”。
因为我的板子上有三个led,所以我就在IP里面把输出端口位宽改为3即可。
再点击蓝色字体,自动连线。
最后的结果就是这样了。
如果需要uart打印功能,也可以将uart的ip核添加进来。我的板子上面没有串口,就不演示了。
5. 保存。
6. 点击tool -> validate design.
7. 没有错误后,点击Generate Block Design。
8. 这样block design的内容就完成了。这时候我们需要用verilog将bd文件包裹起来。
右击bd,点击create HDL wrapper。就会自动生成一个顶层文件。
9. 在生成bit文件之前,我们还需要绑定引脚。
打开Schematic。
红色为我修改的部分。点击保存就可以自动生成xdc文件了。
10. 生成bit文件。等待。。。。。。
11. 生成bit文件后,点击File -> export -> Export Hardware,选中bit文件,OK。
12. 点击File -> Launch SDK.打开SDK软件。
13. 在SDK里面点击 File -> New -> New Application Project.生成一个项目。
microblaze给GPIO分配的基地址为0x40000000,GPIO的数据寄存器的地址为0x0000,所以往0x40000000+0x0000这个地址里面写数据就是望GPIO的数据寄存器里面写数据了。其他寄存器一个道理。
15. 将bit先下载到板子上。
16. Program FPGA。
17. 点击 Run-> Run Configuration,双击GDB生成elf文件(如果有就不需要)
如果我们需要串口打印数据,可以把下面的勾打上,在C代码使用print函数,但是还要加上xil_printf.h这个库。这里我们不需要打印就不勾了。
18. 点击run就可以了。分别往GPIO口写入0或者1,看灯是否亮或者灭。
博主QQ:1435197677