在学习跨时钟域处理的时候,有一种方法是用异步FIFO来处理跨时钟域处理的。那么在这之前先看看同步FIFO实现。

所谓同步FIFO,就是读写时钟是同一个时钟频率。本次实现是通过计数器的形式来实现满空标志。具体实现如下:

module fifo_sync(input           clk         ,input          rst_n       ,input  [7:0]   datain      ,  //输入数据input          wr          ,  //写请求input           rd          ,  //读请求output  reg [7:0]   dataout     ,  //输出数据output         empt        ,  //空标志output          full           // 满标志
);//定义寄存器
reg     [3:0]       cnt;  //计数器用于计算FIFO中存放了多少数据,方便提供满空标志
reg     [3:0]       wr_ptr, rd_ptr;  //读写指针
reg     [7:0]       fifo_mem    [15:0];  //定义16个8位的寄存器用于存放数据,FIFO管道//定义状态
parameter  S0 = 2'b00, S1 = 2'b01, S2 = 2'b10, S3 = 2'b11;//用一段式状态机简单实现FIFO
always @(posedge clk or negedge rst_n) beginif(!rst_n) begincnt <= 0;wr_ptr <= 0;rd_ptr <= 0;dataout <= 0;endelse begincase ({rd,wr})S0 : begin   //空闲cnt <= cnt;wr_ptr <= wr_ptr;rd_ptr <= rd_ptr;dataout <= 0;endS1 : begin   //写FIOFif(!full) beginfifo_mem[wr_ptr] <= datain;wr_ptr <= wr_ptr + 1'b1;rd_ptr <= rd_ptr;cnt <= cnt + 1'b1;dataout <= 0;endend S2 : begin   //读FIFOif(!empt) begindataout <= fifo_mem[rd_ptr];rd_ptr <= rd_ptr + 1'b1;wr_ptr <= wr_ptr;cnt <= cnt - 1'b1;end end S3 : begin  //同时读写FIFOif(!full) beginfifo_mem[wr_ptr] <= datain;wr_ptr <= wr_ptr + 1'b1;end if(!empt) begindataout <= fifo_mem[rd_ptr];rd_ptr <= rd_ptr + 1'b1;end end default : ;endcaseend
end //满空标志信号产生
assign full = (cnt == 4'd15);
assign empt = (cnt == 4'd0 );endmodule

简单的测试:

`timescale 1ns/1ns
module fifo_sync_tb();reg   clk;
reg     rst_n;
reg [7:0] datain;
reg     wr, rd;wire [7:0]   dataout;
wire    empt;
wire    full;initial begin
clk = 1'b1;
rst_n = 1'b0;
datain = 0;
wr = 1'b0;
rd = 1'b0;
#50
rst_n = 1'b1;
#40
wr = 1'b1;
#20
rd = 1'b1;
#20
rd = 1'b0;
#170
wr = 1'b0;
#200
rd = 1'b1;
#40
rd = 1'b0;
#500
$stop;
end always #5 clk = ~clk;always @(posedge clk) begindatain <= datain + 1'b1;
end fifo_sync fifo(.clk     (clk        ),.rst_n        (rst_n      ),.datain       (datain     ),  //输入数据.wr           (wr         ),  //写请求.rd            (rd         ),  //读请求.dataout   (dataout    ),  //输出数据.empt     (empt       ),  //空标志.full      (full       )   // 满标志
);endmodule

异步fifo_同步FIFO设计实现相关推荐

  1. 硬件架构的艺术:同步FIFO设计

    目录 1. 概述 2. 同步FIFO设计 2.1 同步FIFO结构 2.2 同步FIFO空满信号产生 2.2.1 时序逻辑产生空满 2.2.1.1 fifo满信号产生 2.2.1.2 fifo空信号产 ...

  2. 同步FIFO设计verilog设计及仿真

    同步FIFO设计 1.功能定义: 用16*8 RAM实现一个同步先进先出(FIFO)队列设计.由写使能端控制该数据流的写入FIFO,并由读使能控制FIFO中数据的读出.写入和读出的操作由时钟的上升沿触 ...

  3. 任意深度同步FIFO设计总结(非2次幂)

    同步FIFO属于是最基本的模块之一了,但是对于任意深度(非2次幂与2次幂均可以)的同步FIFO可能有些难度,但是只要了解格雷码的性质就能解决.接下来将介绍整个设计的思考流程,不单单是给出解决方法. 对 ...

  4. 同步fifo的串并_同步FIFO设计Spec(示例代码)

    为什么要写Spec文档: 记得刚进公司实习的时候,导师安排我写一个SM4算法AHB接口模块,要求写代码前 写出详细的设计文档,详细到什么程度呢,看着文档就能把代码写好,作为一个只 在学校写过数字钟的小 ...

  5. fifo的rdata_同步FIFO设计

    本文从微信公众号--数字IC小站,​转载,欢迎关注,微信公众号更新更多更快带选通信号的同步FIFO(重发)​mp.weixin.qq.com ​我们常见的同步FIFO一般都是固定位宽输入,固定位宽输出 ...

  6. 基于 FPGA 的高级数字电路设计(7)单口 RAM、同步 FIFO、异步 FIFO 设计

    一.单口 RAM 设计 module BRAM_PORTA( input clka, input ena, input wea, input [3:0] addra, input [15:0] din ...

  7. FPGA基础知识极简教程(3)从FIFO设计讲起之同步FIFO篇

    博文目录 写在前面 正文 FPGA/ASIC中的FIFO 同步FIFO的设计 参考资料 交个朋友 写在前面 个人博客首页 注:学习交流使用! 正文 FPGA/ASIC中的FIFO FIFO缓冲区如何用 ...

  8. 可能是最简单的同步fifo 的设计

    文章目录 可能是最简单的同步fifo 设计 什么是FIFO FIFO的分类 设计FIFO的关键 FIFO空满判断方法 本次同步FIFO设计的基本参数 具体代码实现过程 可能是最简单的同步fifo 设计 ...

  9. 01 【Verilog实战】同步FIFO的设计(附源码RTL/TB)

    虚拟机:VMware -14.0.0.24051 环 境:ubuntu 18.04.1 脚 本:makefile(点击查看) 应用工具:vcs 和 verdi 写在前面 这个专栏的内容记录的是个人学习 ...

最新文章

  1. 面试鹅厂,我三面被虐的体无完肤。。。
  2. python yaml
  3. [转] python中的高效迭代器函数
  4. tableview cell自适应撑高
  5. (转)UIWebView的基本用法,适合新手
  6. easyui三级联动 html,jQuery使用EasyUi实现三级联动下拉框效果实例分享
  7. win10安装马上6的问题
  8. 手机通讯录整理excel2csv2vcf
  9. 《RSSHub Radar》可以帮助你快速发现和订阅当前网站RSS的浏览器扩展
  10. QEMU同步脏页原理
  11. pycharm电脑上怎么下载-Pycharm下载和安装图文教程[超详细]
  12. 成为UiBot Store推广员,解锁全新赚钱方式
  13. fatal: unable to access github.com schannel failed to receive handshake, SSL/TLS connection failed
  14. 双通道中频信号数字下变频及相位差估计(FPGA)
  15. idea构建post请求_在IDEA中快速测试API接口
  16. 自我管理-管理者的职责
  17. c语言编译器运行窗口,Gcc编译器下载C语言编译器窗口(带有安装教程)v1
  18. (DeepID)Deep Learning Face Representation from Predicting 10,000 Classes
  19. matlab入门总结,MATLAB基础公式小结(一)
  20. django社区物品转让平台 计算机专业毕业设计源码40507

热门文章

  1. Linux 12.10 ISO下载地址
  2. CROC-MBTU 2012, Elimination Round (ACM-ICPC) E. Mishap in Club
  3. 【AutoML白皮书】:感知、认知、决策算法布局提升企业决策水平.pdf(附下载链接)...
  4. 【报告分享】全面解码美妆消费者心智-阿里妈妈.pdf(附下载链接)
  5. 炸裂!微信支付的架构太牛了!(微信跨平台开发框架)
  6. 【报告分享】2020美妆行业短视频营销报告.pdf(附下载链接)
  7. php远程服务器配置,php远程服务器上的配置肿么弄??
  8. linux 连接两个异构网,用cheops-ng管理Linux异构网络(图)
  9. python return的理解_python 浅析对return的理解
  10. cs231n作业1——knn