XPM_ASYNC_FIFO学习笔记

一、概述

软件:vivado
器件:vu9p
参考文档:ug974
简介:XPM,Xilinx Parameterized Macros,赛灵思参数化宏,其实就是类似“原语”调用那样,vivado会直接将其识别为对应的模块(目前有CDC跨时钟处理器,FIFO以及BRAM三种)

二、快速上手

步骤如下:
1新建工程及.v文件xpm_async_fifo.v
2.找到Language Templates(界面左侧)–> Verilog–> Xilinx Parameterized Macros(XPM)–> XPM–> XPM_fifo–> Asynchronous FIFO,复制到.v中,如下图
XPM_ASYNC_FIFO学习笔记
3.写个完整的module(xpm_async_fifo),把接口和参数对接到 XPM 例化模块中,如下图
XPM_ASYNC_FIFO学习笔记
XPM_ASYNC_FIFO学习笔记
XPM_ASYNC_FIFO学习笔记
XPM_ASYNC_FIFO学习笔记
4.编写“异步fifo”的读写tb,对xpm_async_fifo进行仿真
XPM_ASYNC_FIFO学习笔记
PS:如何用questa,modelsim等第三方仿真器对vivado工程仿真?
1.用vivado编译器件库;
vivado-----tools-----Compile Simulation Libraries,选择将要使用的仿真器simulator以及编译后的器件库存放地址等。
2.设置仿真器
Vivado GUI的左侧 Settings-----Project Settings----Simulation,选择对应的simulator和器件库地址,点OK
3.启动仿真

三、接口描述

XPM_ASYNC_FIFO学习笔记

3.1参数

XPM_ASYNC_FIFO学习笔记
XPM_ASYNC_FIFO学习笔记
XPM_ASYNC_FIFO学习笔记
XPM_ASYNC_FIFO学习笔记

3.2接口

XPM_ASYNC_FIFO学习笔记
XPM_ASYNC_FIFO学习笔记

四、使用注意

1.fifo深度根据 READ_MODE 有不同的真实值
2.根据深度不同,WR_DATA_COUNT_WIDTH和RD_DATA_COUNT_WIDTH有取值范围要求
3.根据深度不同,PROG_FULL_THRESH和PROG_EMPTY_THRESH有取值范围要求
4.读写端口可以位宽不同
5.CDC_SYNC_STAGES*RD_CLK 表达了写busy和读busy的上升沿时间差,有取值范围要求,一般不改变
6.建议rst信号用脉冲复位
7.注意两个busy信号,如果在busy的时候读写操作会导致上溢或下溢信号的拉高
8.RD_DATA_COUNT和WR_DATA_COUNT数值有时候会跳跃,不准,建议不使用
9.时序延迟等信息由于情况太多,请参照ug974