【Sync FIFO介绍及基于Verilog的实现】

Sync FIFO介绍及实现

  • 1 Intro
  • 2 Achieve
    • 2.1 DFD
    • 2.2 Intf
    • 2.3 Module

本篇博客介绍无论是编码过程中经常用到的逻辑–FIFO;该FIFO是基于单时钟下的同步FIFO;
FiFO分类:同步FiFO VS 异步FiFO;

1 Intro

FIFO可以自己实现,但是因为FiFO太常用,为了减少造轮子和出错率,基本上每个公司都有自己的CBB库,直接调用即可;
个人认为,自己作为入门者,学习尤其亲自实践造轮子,对自己的技能提升很有帮助;
FiFO是first in first out的数据行为;相比SRAM来说可能是少了灵活性,但是在设计逻辑上却是最经常用到FIFO的行为逻辑;
FIFO基于sram上wrapper控制逻辑的module;

2 Achieve

三种基本读写场景:

  • push && !pop
  • psh && pop
  • pop && !push

2.1 DFD

通过wr_ptr和rd_ptr来进行以动array的index;
!](https://img-blog.csdnimg.cn/direct/83dce5833ef1442aa970a44eec2e2af2.png)
在这里插入图片描述

2.2 Intf

下图是Sync_fifo的上下游接口框图;
在这里插入图片描述

2.3 Module

以下为伪代码实现,还未经过语法编译和功能验证,供大家思路参考

//--Auther	:colonel
//--Date		:2024-05-23
//--Function:sync_fifo meet
//--History	:Description
//--05/22	:Firstly create the file
//
module sync_fifo#(parameter DEPTH = 4,parameter WIDTH = 8,parameter PTR_WIDTH = 2
)(input clk,input rst_n,input push,input wire[WIDTH -1:0] data_in,output full, input pop,output empty,output reg[WIDTH -1:0] data_out 
);reg[WIDTH -1:0][DEPTH -1:0] fifo;		//sync_fifo based on the register
reg[PTR_WIDTH -1:0] cnt;reg[DEPTH -1:0] wr_ptr;
reg[DEPTH -1:0] rd_ptr;//--waddr 
always@(posedge clk or negedge rst_n) begin:waddr_logicif(!rst_n) beginwr_ptr <= 0;end else beginif(push && ! full) beginwr_ptr <= wr_ptr + 1;end else beginwr_ptr <= wr_ptr;endend
end//--raddr
always@(posedge clk or negedge rst_n) begin:raddr_logicif(!rst_n) beginrd_ptr <= 0;end else beginif(pop && !empty ) beginrd_ptr <= rd_ptr + 1;end else beginrd_ptr <= rd_ptr;endend
end//--wdata
integer i;
always@(posedge clk or negedge rst_n) beginif(!rst_n) beginfor(i=0;i<DEPTH;i=i+1) beginfifo[i] <= 0;endend else beginif(push) beginfifo[wr_ptr] <= data_in;end else beginfifo[wr_ptr] <= fifo[wr_ptr];endend
end//--rdata
always@(posedge clk or negedge rst_n) beginif(!rst_n) begindata_out <= 0;end else beginif(pop) begindata_out <= fifo[rd_ptr];end else begindata_out <= data_out;endend
end//--cnt logic
always@(posedge clk or negedge rst_n) beginif(!rst_n) begincnt <= 0;end else beginif(push && !pop && !full) begincnt <= cnt + 1;end else if(!push && pop && !empty) begincnt <= cnt - 1;end else begincnt <= cnt;endend
end//full && empty logic
assign empty = (cnt==0) ? 1:0; 
assign full = (cnt==DEPTH) ? 1:0; endmodule

【Reference】
[1] https://blog.csdn.net/zyp626/article/details/131620099

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

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

相关文章

使用pygame绘制图形

参考链接&#xff1a;https://www.geeksforgeeks.org/pygame-tutorial/?reflbp 在窗口中绘制单个图形 import pygame from pygame.locals import * import sys pygame.init()window pygame.display.set_mode((600,600)) window.fill((255,255,255))# pygame.draw.rect(wind…

高开高走的续作,可不止《庆余年2》

说起最近霸屏的影视剧&#xff0c;莫过于《庆余年2》。火爆全网的讨论度总归是没有辜负观众们五年的等待&#xff0c;在五月的影视市场独占鳌头已成定局。张若昀、陈道明、李沁等一众演员稳定发挥&#xff0c;剧情节奏随着故事发展渐入佳境&#xff0c;评分一路高涨。 对影视作…

# 探索深度学习的基础:神经元模型

文章目录 前言神经元模型的基本概念简单代码示例&#xff1a;实现一个基本神经元从单个神经元到深度学习网络结论 前言 深度学习的进展在很大程度上得益于神经元模型的发展。这些模型&#xff0c;受到人脑神经元启发&#xff0c;形成了深度神经网络的基础。本文将对深度学习中…

ZYNQ ARM IIC EMIO读写ADXL345三轴陀螺仪

1 三轴陀螺仪介绍 ADXL345是一款小而薄的超低功耗3轴加速度计,分辨率高(13位),测量范围达 16g。数字输出数据为16位二进制补码格式,可通过SPI(3线或4线)或I2C数字接口访问。ADXL345非常适合移动设备应用。它可以在倾斜检测应用中测量静态重力加速度,还可以测量运动或冲击导…

iCloud 照片到 Android 指南:帮助您快速将照片从 iCloud 传输到安卓手机

​ 概括 iOS 和 Android 之间的传输是一个复杂的老问题。将 iCloud 照片传输到 Android 似乎是不可能的。放心。现在的高科技已经解决了这个问题。尽管 Apple 和 Android 不提供传输工具&#xff0c;但您仍然有其他有用的选项。这篇文章与您分享了 5 个技巧。因此&#xff0c;…

SpringBoot(八)之JdbcTemplate

SpringBoot&#xff08;八&#xff09;之JdbcTemplate 文章目录 SpringBoot&#xff08;八&#xff09;之JdbcTemplate1.添加依赖项&#xff1a;2. 配置数据库连接3.创建表信息4. 创建数据模型5. 创建 Repository6.测试,创建TestController spring-boot-starter-jdbc 是 Spring…

Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现

目录 一、用Springboot读取本地工作目录的文件和文件结构 1.1、需求介绍 1.2、后端传递数据 1.2.1、语言框架 1.2.2、本地工作目录示范 1.2.3、后端代码 ①controller层 ②service层 ③响应的数据 二、总结 一、用Springboot读取本地工作目录的文件和文件结构 1.1、…

Win10玩红警黑屏有声音的解决方法

Win10玩红警黑屏怎么解决&#xff1f;红色警戒&#xff0c;可以说是一款深受青少年朋友喜爱的网游&#xff0c;但是&#xff0c;当我们在使用win10电脑运行红色警戒的时候免不了会出现不兼容、权限不足等问题。相信玩过红警的小伙伴都有遇到过黑屏的问题&#xff0c;那该怎么解…

SpringBoot基础入门:快速构建RESTfulAPI

Spring Boot基础入门&#xff1a;快速构建RESTful API 在当前的软件开发领域&#xff0c;微服务架构已经成为一种流行的设计模式。Spring Boot作为一款基于Spring框架的开源项目&#xff0c;它简化了基于Spring的应用开发过程&#xff0c;使得开发者可以快速搭建和部署微服务。…

网络统一监控运维管理解决方案(ppt原件方案)

网络统一监控运维管理解决方案 1. 构建完善的网络运维体系&#xff1a;通过组织、流程、制度的完善、支撑手段的建设&#xff0c;构建低成本高效率的IT运营体系&#xff0c;推动IT运营工作自动化、智能化、一体化化发展。 2. 构建网络一体化监控能力&#xff1a;构建从设备、…

【C语言】冒泡排序详解

前言 排序&#xff0c;就是将一组数据按特定的规则调换位置&#xff0c;使这组数据具有某种顺序关系&#xff0c;一般就是递增或递减。 在接触C语言不久&#xff0c;我们就会遇到其中一种有名的排序算法——“冒泡排序”&#xff0c;不知道你是否已经掌握了&#xff0c;如果还…

【Go语言入门学习笔记】Part3.指针和运算符、以及基本输入

一、前言 仍然好多和C语言类似&#xff0c;计算机的学生应该是很容易入门这一环节&#xff0c;我还在最后的输入中看到了一些些Java输入的影子&#xff0c;而自动的变量类型推断更是有Python那个味道&#xff0c;正可谓几百家之所长了。 二、学习代码 package mainimport (&q…

鸿蒙系统和安卓系统通过termux搭建Linux系统—Centos

目录 1. 前言 2. 效果图展示 3. 安装termux 4. 安装Centos系统 4.1 更换源 4.2 拉取镜像 4.3 启动centos 5.结尾 1. 前言 大家好&#xff0c;我是jiaoxingk 今天这篇文章让你能够在手机或者平板上使用Linux-Centos系统 让你随时随地都能操作命令行进行装13 2. 效果图展示…

节省时间与精力:用BAT文件和任务计划器自动执行重复任务

文章目录 1.BAT文件详解2. 经典BAT文件及使用场景3. 使用方法4. 如何设置BAT文件为定时任务5. 实例应用&#xff1a;自动清理临时文件 BAT文件&#xff0c;也就是批处理文件&#xff0c;是一种在Windows操作系统中自动执行一系列命令的文本文件。这些文件的扩展名为 .bat。通过…

[力扣题解] 1971. 寻找图中是否存在路径

题目&#xff1a;1971. 寻找图中是否存在路径 思路 并查集 代码 class Solution { private:int n 200005;int father[200005] {0};void init(){int i;for(i 0; i < n; i){father[i] i;}}int find(int u){if(u father[u]){return u;}else{return father[u] find(fa…

就业班 第三阶段(CICD) 2401--5.15 day2 自动化构建打包、部署(Jenkins + maven+ gitlab+tomcat)

一、平滑发布与灰度发布 **什么叫平滑&#xff1a;**在发布的过程中不影响用户的使用&#xff0c;系统不会因发布而暂停对外服务&#xff0c;不会造成用户短暂性无法访问&#xff1b; **什么叫灰度&#xff1a;**发布后让部分用户使用新版本&#xff0c;其它用户使用旧版本&am…

golang内置模块os常用操作函数 按功能分类整理

go语言中我们最常用的一个内置模块os模块&#xff0c;这个里面的函数虽然很多&#xff0c;但是分类整理后其实也就环境变量&#xff0c;用户&#xff0c;目录&#xff0c;文件进程和错误类型这几类&#xff0c;本文按照功能分类整理方便记忆和使用。 func Exit(code int) 退出当…

【吊打面试官系列】Java高并发篇 - ReadWriteLock 是什么 ?

大家好&#xff0c;我是锋哥。今天分享关于 【ReadWriteLock 是什么 &#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; ReadWriteLock 是什么 &#xff1f; 首先明确一下&#xff0c;不是说 ReentrantLock 不好&#xff0c;只是 ReentrantLock 某些时候有局限。 …

Excel工作表单元格单击选中事件,VBA动态计算同类数值总和

Excel工作表单元格单击选中事件,VBA动态计算同类数值总和(VX公众号:Excel潘谆白说VBA) 文章目录 前言一、运行效果二、代码前言 面对每月的消费账单,面对月底待还的信用卡或花呗,面对不足三位数的余额,你是否怀疑过账单自己的消费。你是否因此开始记账,每个月记流水,想知…