fpga 同步fifo

news/2024/11/16 17:49:26/

FIFO
基础知识

FIFO(First In First Out,即先入先出),是一种数据缓存器,用来实现数据先入先出
的读写方式。在 FPGA 或者 ASIC 中使用到的 FIFO 一般指的是对数据的存储具有先入先出
特性的缓存器,常被用于多比特 数据跨时钟域的转换、读写数据带宽不同步等场合。
FIFO 本质上是由 RAM 加读写控制逻辑构成的一种先进先出的数据缓冲器,其与普通
存储器 RAM 的 区别在于 FIFO 没有外部读写地址线,使用起来非常简单,但 FIFO 只能顺
序写入数据,并按顺序读出数 据,其数据地址由内部读写指针自动加 1 完成,不能像普通
存储器那样可以由地址线决定读取或写入某个指定的地址,不过也正是因为这个特性,使得
FIFO 在使用时并不存在像 RAM 那样的读写冲突问题。
根据 FIFO 工作的时钟域,可以将 FIFO 分为同步 FIFO 和异步 FIFO。
同步 FIFO 是指读时钟和写时钟 为同一个时钟,在时钟沿来临时同时发生读写操作,常
用于两边数据处理带宽不一致的临时缓冲。
异步 FIFO 是指读写时钟不一致,读写时钟是互相独立的,一般用于数据信号跨时钟阈
处理。
在这里插入图片描述

`timescale 1ns / 1psmodule top_fifo(input   wire  clk  ,input   wire  rst_n,output  wire  tx   );reg [7:0] cunt ;wire      wr_en;
wire [7:0]dout ;
wire      full ;
wire      empyt;
wire      tx   ;
wire      busy ;
reg  [3:0]cunt_t; 
wire      vled ;
always @(posedge clk or negedge rst_n) beginif(!rst_n)cunt<=0;else if(cunt==11) cunt<=cunt;  //只写入一次elsecunt<=cunt+1;    
end
assign wr_en=(cunt<11)?1:0;  //只写入一次
always @(posedge clk) beginif(!rst_n)cunt_t<=0;else if(busy==0&&wr_en==0)begin //tx中state是空闲状态并且wr_en已经写入if(cunt_t==3)               //每次只读出一位所以每次读取只记一次                cunt_t<=cunt_t;elsecunt_t<=cunt_t+1;endelsecunt_t<=0;
end
assign rd_en=(cunt_t==1)?1:0;    //因为要想一位一位读出就需要rd_en每次读一位只制高1个时钟周期
assign vled =(cunt_t==2&dout<10)?1:0;fifo_generator_0 u_fifo (.clk  (clk    ),      // input wire clk.srst (~rst_n ),    // input wire srst 复位信号 高电平复位.din  (cunt   ),      // input wire [7 : 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            空标志
);tx#(/*parameter*/  .CLK_DIV (50_000_000) ,/*parameter*/  .BIT     ( 115200 )   
)u_tx(/*input        */ . clk  (clk  ),/*input        */ . rst_n(rst_n),/*input   [7:0]*/ . data (dout ),/*input        */ . vled (vled ),/*output  reg  */ . tx   (tx   ),. busy (busy )  );endmodule

http://www.ppmy.cn/news/1547501.html

相关文章

远程控制步骤

当远在千里之外的朋友想求助你帮他找到他电脑上的文件、或者是给他安装软件时。但是你给他说了他又找不到&#xff0c;那么这时你就可以通过控制对方的电脑去做一系列的操作。 如何远程控制对方的电脑非常关键。 方法一&#xff08;Windows自带远程桌面功能&#xff09;&#…

利用正则表达式批量修改文件名

首先&#xff0c; 我们需要稍微学习一下正则表达式的使用方式&#xff0c;可以看这里&#xff1a;Notepad正则表达式使用方法_notepad正则匹配-CSDN博客 经过初步学习之后&#xff0c;比较重要的内容我做如下转载&#xff1a; 元字符是正则表达式的基本构成单位&#xff0c;它们…

离线语音识别自定义功能怎么用?

一、离线语音识别 随着人工智能的飞速发展&#xff0c;离线语音识别技术成为了一项备受瞩目的创新。离线语音识别技术能够将人的语音转化为可理解的文本&#xff0c;无需依赖网络连接&#xff0c;极大地提升了语音识别的便捷性和实用性。 与传统的云端语音识别相比&#xff0c;…

【go从零单排】File Paths文件路径

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在 Go 中&#xff0c;处理文件路径通常使用 path/filepath 包。这个包提供了一系…

达梦数据库迁移j脚本

国产环境使用达梦数据库的越来越多&#xff0c;除了使用管理工具&#xff0c;还是可以使用脚本。 下面简单记录下&#xff0c;我在迁移中遇到的问题&#xff1a; 备份脚本 使用此脚本可以一次备份一个数据 backup_one_db.sh #!/bin/bashexport DB$1 export PASS<your_p…

杰控通过 OPCproxy 获取数据发送到服务器

把数据从 杰控 取出来发到服务器 前提你在杰控中已经有变量了&#xff08;wincc 也适用&#xff09; 打开你的opcproxy 软件包 opcvarFile 添加变量 写文件就写到 了 opcproxy.ini中 这个文件里就是会读取到的数据 然后 opcproxy.exe发送到桌面快捷方式再考回来 &#…

【Qt】Qt在窗口中加载Web界面的方法汇总

1、Qt WebEngine 1)Qt版本:Qt5.4以上; 2)平台要求(https://doc.qt.io/archives/qt-5.9/qtwebengine-platform-notes.html): 例如:Windows下只能使用 MSVC 编译器,不支持MinGW编译器,会报错(: error: Unknown module(s) in QT: webenginewidgets) 并且不能用在Qt编…

SQL 审核在 CloudQuery 的四大场景应用

数据库作为数据的核心载体&#xff0c;其安全性和稳定性对业务的影响至关重要。而在我们日常业务中&#xff0c;SQL 编写不当是引起数据库故障的一个重要原因&#xff0c;轻则影响数据库性能&#xff0c;重则可能直接导致「雪崩」。因此&#xff0c;SQL 审核作为 SQL 代码投入生…