1. IP基本设置

在Vivado中,打开IP Catalog,搜索“uart”:
Vivado IP核:AXI Uartlite的使用经验分享
双击“AXI Uartlite”,进入IP配置界面:
Vivado IP核:AXI Uartlite的使用经验分享
这里可以配置IP的具体参数,设置时钟频率、波特率等,完成后,生成IP即可。

2. IP的时序特点

点击下面的链接可以下载该IP核的官方指导文档:
https://china.xilinx.com/support/documentation/ip_documentation/axi_uartlite/v2_0/pg142-axi-uartlite.pdf

打开Vivado生成的IP文件(axi_uartlite_0_stub.v),可以看到这个IP的接口:
Vivado IP核:AXI Uartlite的使用经验分享
这个IP是基于AXI-Lite协议的(从IP命名也可以看出来)。可以发现,AXI-Lite的读/写通道,地址的位宽只有4bits,读/写数据的具体地址是如何分配的?阅读官方的指导文档可以找到答案:
Vivado IP核:AXI Uartlite的使用经验分享
由上表可知,4bits的读/写地址线被划分好了地址空间,分别对应4个寄存器。
且表格上方的文字包含两点重要信息

  • (1)AXI-Lite协议中的_wstrb信号,在此无效;
  • (2)由AXI端向IP核写数据时,IP会等待_awvalid和_wvalid这两个信号同时有效的时候,才会与Master进行握手,完成数据传输。

IP内的4个寄存器的情况下面详细介绍(基于技术文档)。

2.1 Rx FIFO

Vivado IP核:AXI Uartlite的使用经验分享
该寄存器为只读,若不小心向该寄存器写数据,将被IP忽略。

2.2 Tx FIFO

Vivado IP核:AXI Uartlite的使用经验分享
该寄存器为只写,若不小心发送了读请求,将返回一个0值。

2.3 Control Register (CTRL_REG)

Vivado IP核:AXI Uartlite的使用经验分享
Vivado IP核:AXI Uartlite的使用经验分享
上面的寄存器也是只写的,我们需要配置的只有3个bit,分别控制读、写两个FIFO的复位,以及启用interrupt功能(若启用,则在写数据时,TX端工作完成后,IP会输出一个interrupt的高电平)。

2.4 Status Register (STAT_REG)

Vivado IP核:AXI Uartlite的使用经验分享
这一寄存器为只读,读取该寄存器,可以获取IP内部的一些信息。这里不再多介绍,有需要可以自行阅读官方技术文档。

3. 仿真实例

编写Testbench对IP进行基本功能的仿真,AXI-Lite端的时序如下:
Vivado IP核:AXI Uartlite的使用经验分享
上面的测试中,首先对Control_Reg进行配置,打开interrupt功能,之后写入一个8bit的测试数据(8’haa)。可以发现,先后两次写数据时,_wstrb信号分别设置为4’h2何4’h0,但是并不影响实际的读写,可见IP内部确实屏蔽了_wstrb信号。

下面是宏观的波形(设置波特率为9600,实际的仿真时间很长,要 run 1~2ms):
Vivado IP核:AXI Uartlite的使用经验分享
可以发现,TX端向外写数据的行为是正确的(符合UART协议)。

测试IP核所用的Testbench上传到了GitHub(https://github.com/IC-Chicken/AXI-Uartlite-Simple-Testbench.git)。

相关文章: