IP核之fifo

一.FIFO简介

FIFO (First In First Out,即先入先出),是一种数据缓冲器,用来实现数据先入先出的读写方式。

二,FIFO实现原理

FIFO是采用一种先入先出的实现原理
就如图按照D1到D10的顺序输入那么读取的时候也是按照D1到D10的顺序读取.
在这里插入图片描述

三,FIFO应用场景

FIFO存储器主要是作为缓存,应用在同步时钟系统和异步时钟系统中,在很多的设计中都会使用;如:多比特数据做跨时钟域处理、前后带宽不同步等都用到了FIFO。
比如下边图1就是多比特数据做跨时钟域处理
图2为带宽不同的数据处理
在这里插入图片描述

四,同步FIFO的配置与调用

  1. 首先在右侧搜索并选择FIFO
    在这里插入图片描述
  2. 在弹出的界面选择保存路径和Verilog
    在这里插入图片描述
  3. 选择位宽和深度,并选择异步或同步FIFO
    在这里插入图片描述
  4. FIFO中的输入输出管脚选择
    在这里插入图片描述
  5. 普通同步FIFO或先出数据FIFO模式
    普通FIFO读取数据会比读取使能满一个周期
    先出数据FIFO会和使能同步
    在这里插入图片描述
  6. 性能选择
    上一检测:输入满后禁止输入
    下一检测:读取空后禁止读取
    在这里插入图片描述
  7. 生成文件
    默认勾选这两个
    在这里插入图片描述
  8. 代码调用
/**************************************功能介绍***********************************
Date	: 
Author	: WZY.
Version	: 
Description: fifo功能测试
*********************************************************************************///---------<模块及端口声名>------------------------------------------------------
module fifo( input 	wire			    clk		,input 	wire				rst_n	,input   wire    [7:0]       data    ,input   wire                rd_req  ,input   wire                wr_req  ,output  wire                empty   ,output  wire                full    ,output  wire    [7:0]       po_data ,output  wire    [7:0]       usedw     //数据个数
);								 
//---------<参数定义>--------------------------------------------------------- //---------<内部信号定义>-----------------------------------------------------scfifo_8x256	scfifo_8x256_inst (.clock  ( clk ),.data   ( data ),.rdreq  ( rd_req ),.wrreq  ( wr_req ),.empty  ( empty ),.full   ( full),.q      ( po_data ),.usedw  ( usedw ));    endmodule

五.仿真观察

仿真代码

`timescale 1ns/1nsmodule fifo_tb ();
//产生激励
reg         clk	    ;
reg         rst_n   ;
reg  [7:0]  data    ;
reg         rd_req  ;
reg         wr_req  ;
//参数定义
parameter  CYCLE = 20 ;
reg [1:0]   cnt ;wire          empty    ;
wire          full     ;
wire  [7:0]   po_data  ;
wire  [7:0]   usedw    ;
//产生时钟
always #(CYCLE/2) clk = ~clk ;
//cnt
always @(posedge clk or negedge rst_n) beginif (!rst_n) begincnt <= 2'd0;endelse if (cnt == 2'd3) begincnt <= 2'd0;endelse begincnt <= cnt + 1'd1;end
end
//写使能
always @(posedge clk or negedge rst_n) beginif (!rst_n) beginwr_req <= 1'b0;endelse if (cnt == 2'd3&&rd_req == 1'b0) beginwr_req <= 1'd1;endelse beginwr_req <= 1'd0;end
end
//data
always @(posedge clk or negedge rst_n) beginif (!rst_n) begindata <= 8'd0;endelse if (data == 8'd255&&wr_req == 1'b1) begindata <= 8'd0;endelse if (wr_req == 1'b1) begindata <= data + 1'b1;end
end
//读使能
always @(posedge clk or negedge rst_n) beginif (!rst_n) beginrd_req <= 1'b0;endelse if (full == 1'b1) beginrd_req <= 1'b1;endelse if (empty == 1'b1) beginrd_req <= 1'b0;end
endfifo fifo_inst( .clk		(clk),.rst_n	    (rst_n),.data       (data),.rd_req     (rd_req),.wr_req     (wr_req), .empty      (empty),.full       (full),.po_data    (po_data),.usedw      (usedw)//数据个数
);initial beginclk = 1'b1;rst_n = 1'b0;#20rst_n = 1'b1;endendmodule

测试波形
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/57210.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

el-table合并表头、动态合并列、合并尾部合计

在有些情况下&#xff0c;我们会有合并表头、合并列、合并尾部合计的需求&#xff0c;这篇文章是为了记录&#xff0c;如何进行合并&#xff0c;方便日后翻阅。 效果图 el-table合并表头 el-table合并列&#xff08;动态合并&#xff09; el-table合并尾部合计 el-table合并表…

看门狗文章

1. iwdg.c #include "stm32f4xx.h" #include "iwdg.h"//prer&#xff1a;预分频值 //rlr&#xff1a;自动重装载值 void IWDG_Init(unsigned char prer,unsigned int rlr)//IWDG初始化 {IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);…

知网期刊《中阿科技论坛》简介及投稿须知

知网期刊《中阿科技论坛》简介及投稿须知 主管单位&#xff1a;宁夏回族自治区科学技术厅 主办单位&#xff1a;宁夏回族自治区对外科技交流中心(中国一阿拉伯国家技术转移中心) 刊  期&#xff1a;月刊 国际刊号&#xff1a;ISSN 2096-7268 国内刊号&#xff1a;CN 64-…

SystemVerilog scheduler

文章目录 简介调度器simulation regionPreponed regionActive regionInactive regionNBA(Non-blocking Assignment Events region)Observed regionReactive regionRe-Inactive Events regionRe-NBA RegionPostponed Region PLI region:Pre-active regionPre-NBA regionPost-NBA…

空地协同智能消防系统——无人机、小车协同

1 题目 1.1 任务 设计一个由四旋翼无人机及消防车构成的空地协同智能消防系统。无人机上安装垂直向下的激光笔&#xff0c;用于指示巡逻航迹。巡防区域为40dm48dm。无人机巡逻时可覆盖地面8dm宽度区域。以缩短完成全覆盖巡逻时间为原则&#xff0c;无人机按照规划航线巡逻。发…

面试热题(字符串相加)

给定两个字符串形式的非负整数 num1 和num2 &#xff0c;计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库&#xff08;比如 BigInteger&#xff09;&#xff0c; 也不能直接将输入的字符串转换为整数形式。 输入&#xff1a;num1 "11"…

Linux下C/C++的gdb工具与Python的pdb工具常见用法之对比

1、gdb和pdb分别是什么&#xff1f; 1.1、gdb GDB&#xff08;GNU Debugger&#xff09;是一个功能强大的命令行调试工具&#xff0c;由GNU项目开发&#xff0c;用于调试C、C等编程语言的程序。它在多个操作系统中都可以使用&#xff0c;包括Linux、MacOS和Windows&#xff0…

SpringSecurity5.7+最新案例 -- 授权 --

一、前提 书接上回 SpringSecurity5.7最新案例 – 用户名密码验证码记住我 本文 继续处理SpringSecurity授权 … 目前由 难 -> 简&#xff0c;即自定义数据库授权&#xff0c;注解授权&#xff0c;config配置授权 二、自定义授权 0. 数据准备 SET NAMES utf8mb4; SET …

开窗积累之学习更新版

1. 开窗使用1之 count range between current row and current row 将相同排序字段的值进行函数计算 selectsku_id,substr(create_date,1,7) date_month,order_id,create_date,sku_num*price,sum(sku_num*price) over (partition by sku_id order by substr(create_date,1,7)…

js-3:DOM常见的操作有哪些?

1、DOM 文档对象模型&#xff08;DOM&#xff09;是HTML和XML文档的编程接口。 它提供了对文档的结构化的表述&#xff0c;并定义了一种方式&#xff0c;可以使从程序中对该结构进行访问&#xff0c;从而改变文档的结构&#xff0c;样式跟内容。 任何HTML和XML文档都可以用DOM表…

R语言3_安装SeurateData

环境Ubuntu22/20, R4.1 在命令行中键入&#xff0c; apt-get update apt install libcurl4-openssl-dev libssl-dev libxml2-dev libcairo2-dev libgtk-3-dev # libcairo2-dev :: systemfonts # libgtk :: textshaping进入r语言交互环境&#xff0c;键入&#xff0c; instal…

RaabitMQ(三) - RabbitMQ队列类型、死信消息与死信队列、懒队列、集群模式、MQ常见消息问题

RabbitMQ队列类型 Classic经典队列 这是RabbitMQ最为经典的队列类型。在单机环境中&#xff0c;拥有比较高的消息可靠性。 经典队列可以选择是否持久化(Durability)以及是否自动删除(Auto delete)两个属性。 Durability有两个选项&#xff0c;Durable和Transient。 Durable表…