当前位置:   article > 正文

UART接口的FPGA实现(三)——(如何阅读Xilinx的IPcore文档)解读axi-uartlite官方文档_xilinx uart ip

xilinx uart ip

本文是我在FPGA教学系列文章中第一次解读Xilinx的官方文档,所以我先介绍阅读官方文档的方法,这个很重要,适用于一切官方IP。然后再略解读axi-uartlite这个IP。这里先给出该文档的下载链接,凡是我上传的官方文档一律是0积分下载。

一、如何阅读Xilinx的IPcore文档

Xilinx的IPcore的官方文档都是统一的结构,一共分为下面7个章节。

1、Overview(总览)

本章节对这个IPcore的大致特性和应用场合介绍下。

2、Product Specification(产品详细说明)

这个章节主要是介绍IPcore所占资源、支持的FPGA型号,最重要的内容是介绍IPcore的外部接口和内部寄存器的定义。

3、Designing with the Core(如何使用这个Core进行设计)

对这个IPcore如何使用做出说明,重点介绍该IPcore的信号线和时钟连法,一些不常用的概念,外部接口的相关波形时序图一般出现在这一章。

4、Design Flow Steps(设计流程步骤)

主要介绍这个IPcore的配置图形界面中每个选项卡的含义,这一章也可能会有波形时序图

5、Example Design(设计例子)

主要是对这个IPcore的例子工程做介绍,这个例子工程是在vivado中使用右键点击生成出的IPcore,然后点选“generate example design”生成的,注意不是所有的IP都有例子工程,但是一般稍微复杂点的都有。

6、Test Bench(测试平台)

例子工程的testbench的大致介绍。

7、Appendix(附录)

一般没啥看的。

以下是本人的经验总结,供萌新参考,大神可忽略。

我认为学习IPcore的过程就是生成例子工程并把例子工程仿真跑起来,然后对着官方文档理解例子工程的过程。对于简单的IPcore文档,页数比较少,可以从头看到尾,但不推荐。特别是对于一些复杂的IP,从头看到尾很耽搁时间,一般遵循下面的几步:1、大致阅读下第一章;2、大致了解下外部接口和配置选项卡;3、生成例子工程运行仿真并看懂例子工程;4、仿照例子工程的配置和连接方式移植到自己的工程。

二、axi-uartlite官方文档解读

1、总览

Axi-uartlite的用户端使用的是AXI总线协议,AXI总线是Xilinx的FPGA内部最常用的总线,几乎所有的外部接口类的IP都可以搭配AXI总线,ISE时代还有PLB总线,后者现在用得很少了。暂时不懂AXI的萌新不要担心,只需知道这是一种总线协议就可以了,我另外写了一篇AXI总线快速学习的文章,链接在这里。该IP的结构框图如下图。

图1 axi-uartlite的结构框图

该IP由3部分组成,AXI接口部分、内部寄存器部分和UART部分,图中标识都很清楚,唯一可能不认识的就是BRG,表示波特率产生器。注意,这里使用的AXI接口是AXI-Lite,是简化型(也可以叫做轻量型)的AXI接口,这种简化型的AXI接口一般用于配置寄存器和连接外部低速接口,如果遇到像PCIE这种高速接口,则需要使用完全型的AXI接口。

2、内部寄存器定义

内部寄存器只有4个,具体如下表所示,每个寄存器都是32位的。这里需要注意的是接收FIFO和发送FIFO都是16个字符深度,之所以叫“字符深度”是因为UART的一个字符所包含的位数不一定。

表1 axi-uartlite的寄存器定义
寄存器名地址属性说明
RX_FIFO0x00R接收FIFO,根据字符的位数确定出有效位数,低位有效,高位保留。
TX_FIFO0x04W发送FIFO,同上。
CTRL_REG0x08W

控制寄存器。

第0位(最低位)写1清空发送FIFO,第1位写1清空接收FIFO,务必记住清空之后要重新写0。第4位写1表示有效中断信号。其他位都保留。

STAT_REG0x0CR

状态寄存器。

第0位为1表示接收FIFO有数据,为0表示空。

第1位为1表示接收FIFO装满了,为0表示没有装满。

第2位为1表示发送FIFO为空,为0表示有数据,因此这位默认值是1。

第3位为1表示接收FIFO装满了,为0表示没有装满。

第4位为1表示中断有效,为0表示中断无效,和CTRL_REG的第4位对应。

第5位为1表示overrun错误(注1),为0表示没有这个错误。

第6位为1表示frame错误(注2),为0表示没有这个错误。

第7位为1表示奇偶校验错误,为0表示没有这个错误。其他位都保留。

注1:overrun错误就是如果接收fifo满了还在接收。

注2:frame错误就是停止位是0的错误。

3、IP配置界面

配置界面如下图,本文使用的是vivado2018.02。

图2 axi-uartlite的配置选项卡

可以配置AXI时钟(对于这个IPcore就是输入时钟),UART传输波特率,UART的字符位宽,奇偶校验这些信息。

三、运行例子工程

打开vivado,新建一个工程(随便选个芯片),点击Flow Navigator窗口中的IP Catalog,在新弹出的窗口中搜索uart,找到AXI uartlite,双击就可以打开上面的界面。配置好之后就会在Sources窗口中生成一个后缀为.xci的IP文件,然后右键该IP文件,点选“generate example design”,就可以生成例子工程。

例子工程打开之后,我们可以用vivado自带的仿真器运行仿真,也可以用modelsim运行仿真,都是通过点击Flow Navigator窗口中的SIMULATION->Run Simulation。如果使用modelsim运行,则需先编译仿真库,点击菜单栏Tools->Compile Simulation Libraries就可以编译仿真库。点击菜单栏Flow->Settings->Simulation Settings就可以更改默认仿真器。使用modelsim仿真时,在工程目录\axi_uartlite_0_ex\axi_uartlite_0_ex.sim\sim_1\behav\modelsim(或许你的工程名不叫axi_uartlite_0_ex)下会有vivado自动生成的仿真脚本,一般也是.do文件。Vivado自动生成的仿真脚本一般情况下仿真时间是不够的,需要手动修改仿真时间,这里把仿真时间改成1ms,可以得到如下图所示波形。

图3 axi-uartlite例子工程仿真波形

 

欢迎网友们在留言中指正文中的错误。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/461682
推荐阅读
相关标签
  

闽ICP备14008679号