Vivado软核microblaze用gpio控制led(详细)

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。
 Vivado软核microblaze用gpio控制led(详细)_第1张图片
双击它就可以进行配置了。
 Vivado软核microblaze用gpio控制led(详细)_第2张图片
红线部分是使能microblaze的debug工具。这个选项一定要勾上,这样我们才可以在SDK里面进行调试。
3.    保存。点击上面蓝色字体:Run Block Automation。这样软件就可以自动帮你添加缺少的IP并连线。
 Vivado软核microblaze用gpio控制led(详细)_第3张图片
如果我们需要在SDK里面打印,可以把Debug Module改成Debug & UART。 OK。

Vivado软核microblaze用gpio控制led(详细)_第4张图片 
然后,我们发现突然多了这么多东西,这些都是microblaze需要搭配的IP,然后我们再点击蓝色字体Run Connection Automation。
 Vivado软核microblaze用gpio控制led(详细)_第5张图片
这时候发现有两个复位,我们可以手动的把两个合成一个,方便引脚约束。
 Vivado软核microblaze用gpio控制led(详细)_第6张图片
改完之后,只剩下一个时钟和复位了。
这里提醒一下,diff_clock_rtl连的是差分时钟,如果板子用的是单端时钟,可以在clk_wiz_1里面修改,如下图:

Vivado软核microblaze用gpio控制led(详细)_第7张图片

4.    然后我们再添加GPIO来连接led。方法还是一样,在ip里面搜索“GPIO”。
因为我的板子上有三个led,所以我就在IP里面把输出端口位宽改为3即可。
 Vivado软核microblaze用gpio控制led(详细)_第8张图片
再点击蓝色字体,自动连线。
 

Vivado软核microblaze用gpio控制led(详细)_第9张图片
最后的结果就是这样了。
如果需要uart打印功能,也可以将uart的ip核添加进来。我的板子上面没有串口,就不演示了。
5.    保存。
6.    点击tool -> validate design.
7.    没有错误后,点击Generate Block Design。
8.    这样block design的内容就完成了。这时候我们需要用verilog将bd文件包裹起来。
右击bd,点击create HDL wrapper。就会自动生成一个顶层文件。
9.    在生成bit文件之前,我们还需要绑定引脚。
 Vivado软核microblaze用gpio控制led(详细)_第10张图片
打开Schematic。
 Vivado软核microblaze用gpio控制led(详细)_第11张图片
红色为我修改的部分。点击保存就可以自动生成xdc文件了。
10.    生成bit文件。等待。。。。。。
11.    生成bit文件后,点击File -> export -> Export Hardware,选中bit文件,OK。
 Vivado软核microblaze用gpio控制led(详细)_第12张图片
12.    点击File -> Launch SDK.打开SDK软件。
13.    在SDK里面点击 File -> New -> New Application Project.生成一个项目。

Vivado软核microblaze用gpio控制led(详细)_第13张图片

SDK会自动把Halloworld代码加载进来。
Vivado软核microblaze用gpio控制led(详细)_第14张图片

14.    我们直接在代码里面修改就好。
Vivado软核microblaze用gpio控制led(详细)_第15张图片

microblaze给GPIO分配的基地址为0x40000000,GPIO的数据寄存器的地址为0x0000,所以往0x40000000+0x0000这个地址里面写数据就是望GPIO的数据寄存器里面写数据了。其他寄存器一个道理。

15.    将bit先下载到板子上。
16.    Program FPGA。

Vivado软核microblaze用gpio控制led(详细)_第16张图片
 
17.    点击 Run-> Run Configuration,双击GDB生成elf文件(如果有就不需要)

Vivado软核microblaze用gpio控制led(详细)_第17张图片
 
如果我们需要串口打印数据,可以把下面的勾打上,在C代码使用print函数,但是还要加上xil_printf.h这个库。这里我们不需要打印就不勾了。

Vivado软核microblaze用gpio控制led(详细)_第18张图片
 
18.    点击run就可以了。分别往GPIO口写入0或者1,看灯是否亮或者灭。

博主QQ:1435197677

 


 

你可能感兴趣的:(FPGA)