FIFO_IP核介绍和测试

2023-11-09


前言

FIFO 的英文全称是 First In First Out,即先进先出。FPGA 使用的 FIFO 一般指的是对数据的存储具有先进先出特性的一个缓存器,常被用于数据的缓存,或者高速异步数据的交互也即所谓的跨时钟域信号传递。

它与 FPGA 内部的 RAM 和 ROM 的区别是没有外部读写地址线,采取顺序写入数据,顺序读出数据的方式,使用起来简单方便,由此带来的缺点就是不能像 RAM 和 ROM 那样可以由地址线决定读取或写入某个指定的地址。

本章我们将对 Vivado 软件生成的 FIFO IP 核进行读写测试,来向大家介绍 Xilinx FIFO IP 核的使用方法。


提示:以下是本篇文章正文内容,下面案例可供参考

一、简介各端口含义

FIFO 各端口含义:
输入端口:
wr_clk 写时钟
rd_clk 读时钟
din 输入数据
wr_en 写使能
rd_en 读使能

输出端口:
dout 输出数据
full 满标记
wr_ack 写应答
empty 空标记
valid 输出有效标记
rd_data_count 读计数
wr_data_count 写计数
almost_full 快满标记
overflow 写溢出标记
almost_empty 快空标记
underflow 读溢出标记

具体使用FIFO 的配置中会说明。
————————————————

二、创建同步FIFO IP核

1.1创建IP
1
1.2 设置同步FIFO IP核相关参数
2
数字1处为IP核的名称,可以根据自己需求修改。
数字2处为IP核总线类型,Native类型用于非SOC逻辑设计,其它两种用于SOC逻辑设计,通常选择Native类型。
数字3处为FIFO的时钟组成和存储结构,从上到下依次为单时钟块RAM、单时钟分布式RAM、单时钟移位寄存器、单时钟内建FIFO、双时钟块RAM、双时钟分布式RAM、双时钟内建FIFO。其中的单时钟即同步FIFO,双时钟即异步FIFO。同步FIFO 是指读时钟和写时钟为同一个时钟,异步FIFO 是指读写时钟不一致,读写时钟是互相独立的。
————————————————
1.3 Native Ports选项卡
3
上图中Read Mode处用于设置读FIFO时的读模式。当FIFO配置为单时钟块RAM时,选择Standard FIFO时当读使能信号rd_en拉高时,下一个时钟周期才会输出数据,而选择First Word Fall Through时,当读使能信号rd_en拉高时,数据就会输出,不用等待一个时钟周期。
上图中Data Port Parameters处用于设置读写端口的数据总线的宽度以及FIFO的深度。从上到下依次是写数据宽度、写数据深度、读数据宽度 、读数据深度(自动生成)。
上图中Reset Pin处为是否采用复位引脚。注意复位信号为高电平有效。
上图中Reset Type处为是否为异步复位。
上图中Full Flags Reset Value处为复位时Full Flags的状态为0还是为1。
上图中Dout Reset Value处为复位时Dout数据线的状态。
————————————————

1.4 Status Flags选项卡
4
1.5 Data Counts选项卡
5
“Data Counts”选项卡用于设置FIFO 内数据计数的输出信号,此信号表示当前在FIFO 内存在多少个有效数据。

1.6 Summary选项卡

6
该选项卡为FIFO最终的配置以及资源占用情况

1.7 生成FIFO

7

三、FIFO IP核TB测试

`timescale 1ns / 1ps
//

// Create Date: 2022/12/22 15:59:39
// Module Name: fifo_tb
// Name: 小王在努力...
// Revision:Vivado 2018.3
// Revision 0.01 - File Created

//


module fifo_tb();
   reg clk;
   reg rst;
   reg [15:0]din;
   reg wr_en;
   reg rd_en; 
   wire [15:0]dout;
   wire full;
   wire empty;
   wire wr_rst_busy;
   wire rd_rst_busy;
  fifo fifo (
  .clk(clk),                  // input wire clk
  .rst(rst),                  // input wire rst
  .din(din),                  // input wire [15 : 0] din
  .wr_en(wr_en),              // input wire wr_en
  .rd_en(rd_en),              // input wire rd_en
  .dout(dout),                // output wire [7 : 0] dout
  .full(full),                // output wire full
  .empty(empty),             // output wire empty
  .wr_rst_busy(wr_rst_busy),  // output wire wr_rst_busy
  .rd_rst_busy(rd_rst_busy)  // output wire rd_rst_busy
);

   

   initial clk = 1;
   always #10 clk = ~clk;
   initial begin  
        rst = 1;   
        din = 0;  
        wr_en = 0;
        rd_en = 0;
        #201;
        rst = 0;   //低电平有效
        #200;
        repeat(500) begin
           wr_en = 1;
           #20;
           din = din + 1; 
        end
        wr_en = 0;
        #199;
        repeat(500) begin
            rd_en = 1;
            #20;
        end
        rd_en = 0;
        #200000;
        $stop;
        end
endmodule

四、FIFO IP核仿真结果

仿真结果展示

五、同步复位和异步复位比较

【Verilog】 同步复位和异步复位比较

同步异步比较

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FIFO_IP核介绍和测试 的相关文章

  • Linux 实操篇-实用指令

    Linux 实操篇 实用指令 指定运行级别 基本介绍 运行级别说明 0 关机 1 单用户 找回丢失密码 2 多用户状态没有网络服务 3 多用户状态有网络服务 4 系统未使用保留给用户 5 图形界面 6 系统重启 常用运行级别是3 和5 也可
  • 第二节:数据类型——number和string

    上节回顾 undefined为window的属性 有些程序会在函数开始置定义一个var undefined 这是因为undefined是window的一个属性 当你判断某一个东西是不是undefined的时候 计算机会到window中整体去
  • Oracle 创建、暂停、更改、删除 定时任务job

    oracle job 用来在数据库层面 定时执行存储过程或者是 SQL 语句 创建 暂停 修改 删除 job 查询 当前库中运行的 job SELECT t FROM dba jobs t 创建一个 定时任务 job declare job

随机推荐

  • 【Django快速开发实战】(52~76)使用Django创建一个基础应用:职位管理系统

    52 生产环境要注意哪些事项 生产环境的应用部署 单元测试 老师的testcase test views py from django test import TestCase from django test import Client
  • 卷积神经网络原理简述

    1 CNN原理 卷积神经网络主要应用在图像识别领域中 是指非某类网络的集合 其中包含了多种不同类型的结构 不同网络结构 其性能一般也会有所不同 通过对CNN几种典型架构的研究 我们可以发现这些网络创造者们极富创意 其中许多架构十分精巧 他们
  • Java从入门到实战总结-4.1、数据库基础

    Java从入门到实战总结 4 1 数据库基础 文章目录 Java从入门到实战总结 4 1 数据库基础 第一章 数据库简介 1 1 简介 1 2 常见数据库管理系统 1 3 三大范式 规范 1 4 MySQL安装和卸载 1 4 1 windo
  • 使用cisco 2500路由器实现ADSL接入

    使用cisco 2500路由器实现ADSL接入 此案例配置共分7步 第一步 配置vpdn vpdn enable 启用路由器的虚拟专用拨号网络 d vpdn group office 建立一个vpdn组 request dialin 初始化
  • 【Causality】结构因果下的反事实基本框架

    在之前 博主整理了因果关系之梯第二层 干预的定义 意义 用法 详见以下链接 但干预的目标是找到研究中处理的某个总效应或者在某些样本群体中的效应 平均因果效应 到目前为止我们无法在特定时间谈论个性化的因果关系 而在实际的任务中 我们通过训练集
  • echart 图谱_vue + echarts 实现有层级关系图的图谱

    因为接下来要做的事是一个关系图的东西 所以自己先写一个小demo 特次记录一下 主要实现的点有如下 节点的颜色的更改 自定义提示框配置 以及在里面的点击事件 提示框中的点击事件可以获取到vue实例 图列的自定义 先上效果图 截屏2020 1
  • 记录一些IDEA常用的快捷键和技巧 二(界面布局)

    创建项目 会开启一个进入默认布局界面 如下图 左边依次为 Project视图 Favorites视图以及Structure视图 其中主要关注Project视图 创建Package要注意 将project 右上角齿轮勾选 Flatten Pa
  • 小白入门级知识点:移动app安全测试怎么做?

    随着科技时代的进步和智能手机的普及 现代人离不开手机已经是常态化 一旦手机不在身边便会失去安全感 提到安全一词 我们在使用手机app软件时 安全至关重要 软件里包含的个人信息 资料等等都和安全挂钩 那么在软件测试中移动app安全测试应该怎么
  • python实现线程池

    参照c 的线程池 使用python的threading库实现线程池 import threading import time 线程池的任务 包含一个可调用对象和一个参数数组 class ThreadTask object def init
  • [uC/OS-III] 22. 互斥量

    1 互斥量的基本概念 互斥量又称互斥信号量 本质也是一种信号量 不具备传递数据功能 是一种特殊的二值信号量 它和信号量不同的是 它支持互斥量所有权 递归访问以及防止优先级翻转的特性 用于实现对临界资源的独占式处理 任意时刻互斥量的状态只有两
  • Linux常用基本命令

    目录 1 帮助命令 man 获取帮助信息 type 查看命令是内置命令还是外部命令 help 获取帮助信息 2 文件目录类 pwd 显示当前目录的绝对路径 ls 列出目录中的内容 cd 进入相对应的目录中 mkdir 创建文件夹子 rmdi
  • 安全与加密

    1 使用对称加密算法 实现敏感数据加密 1 1 什么是对称加密 Symmetric encryption
  • (Qt Installer Framework)程序简易打包教程

    Qt Installer Framework 程序简易打包教程 Qt Installer Framework程序简易打包教程 第一步下载Qt Installer Framework 第二步 打包程序安装和环境变量的配置 第三步准好要打包的程
  • C/C++中this指针作用

    this 指针是一个隐含于每一个成员函数中的特殊指针 它指向正在被该成员函数操作的那个对象 当对一个对象调用成员函数时 编译程序先将对象的地址赋给 this 指针 然后调用成员函数 每次成员函数存取数据成员时 由隐含使用 this 指针 当
  • Umi + React + Ant Design Pro 项目实践(六)—— ProLayout 应用

    打开 umirc ts 文件 import defineConfig from umi export default defineConfig plugins umijs plugins dist react query reactQuer
  • Linux增加swap空间的方法

    windows下有虚拟内存 Linux下有swap 如果在安装linux时没有分配足够的swap 可以在Linux下进行增加 具体有两种方法 1 建立一个swap分区 2 建立一个swap文件 一 建立一个swap分区 可以利用磁盘的还未分
  • 使用Torch nngraph实现LSTM

    什么是RNN RNN 多层反馈RNN Recurrent neural Network 循环神经网络 神经网络是一种节点定向连接成环的人工神经网络 这种网络的内部状态可以展示动态时序行为 不同于前馈神经网络的是 RNN可以利用它内部的记忆来
  • 数据挖掘技术(一)预处理

    1 数据预处理 数据预处理技术包括 聚集 抽样 维规约 特征子集选择 特征创建 离散化和二元化 变量变换 属性的类型 标称 定性的 值仅仅是不同的名字 即只提供足够的信息以区分对象 如雇员ID 性别 序数 定性的 值提供足够信息确定对象的序
  • 浙大超厉害计算机硕士生导师

    1 人工智能所 陈德人 教授 计算机图形学与CAD CIMS与虚拟制造 电子商务与信息集成技术 406 87952297 drchen cs zju edu cn 博导 2 人工智能所 陈刚 教授 CIMS 网络安全 协同设计 数据库 50
  • FIFO_IP核介绍和测试

    FIFO IP核介绍和测试 前言 一 简介各端口含义 二 创建同步FIFO IP核 三 FIFO IP核TB测试 四 FIFO IP核仿真结果 五 同步复位和异步复位比较 前言 FIFO 的英文全称是 First In First Out