赞
踩
本文是我在FPGA教学系列文章中第一次解读Xilinx的官方文档,所以我先介绍阅读官方文档的方法,这个很重要,适用于一切官方IP。然后再略解读axi-uartlite这个IP。这里先给出该文档的下载链接,凡是我上传的官方文档一律是0积分下载。
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、仿照例子工程的配置和连接方式移植到自己的工程。
1、总览
Axi-uartlite的用户端使用的是AXI总线协议,AXI总线是Xilinx的FPGA内部最常用的总线,几乎所有的外部接口类的IP都可以搭配AXI总线,ISE时代还有PLB总线,后者现在用得很少了。暂时不懂AXI的萌新不要担心,只需知道这是一种总线协议就可以了,我另外写了一篇AXI总线快速学习的文章,链接在这里。该IP的结构框图如下图。
该IP由3部分组成,AXI接口部分、内部寄存器部分和UART部分,图中标识都很清楚,唯一可能不认识的就是BRG,表示波特率产生器。注意,这里使用的AXI接口是AXI-Lite,是简化型(也可以叫做轻量型)的AXI接口,这种简化型的AXI接口一般用于配置寄存器和连接外部低速接口,如果遇到像PCIE这种高速接口,则需要使用完全型的AXI接口。
2、内部寄存器定义
内部寄存器只有4个,具体如下表所示,每个寄存器都是32位的。这里需要注意的是接收FIFO和发送FIFO都是16个字符深度,之所以叫“字符深度”是因为UART的一个字符所包含的位数不一定。
寄存器名 | 地址 | 属性 | 说明 |
RX_FIFO | 0x00 | R | 接收FIFO,根据字符的位数确定出有效位数,低位有效,高位保留。 |
TX_FIFO | 0x04 | W | 发送FIFO,同上。 |
CTRL_REG | 0x08 | W | 控制寄存器。 第0位(最低位)写1清空发送FIFO,第1位写1清空接收FIFO,务必记住清空之后要重新写0。第4位写1表示有效中断信号。其他位都保留。 |
STAT_REG | 0x0C | R | 状态寄存器。 第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。
可以配置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,可以得到如下图所示波形。
欢迎网友们在留言中指正文中的错误。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。