FIFO控制器设计——日常学习

1 FIFO相关概念

   FIFO是First in first out 的缩写,是一种先进先出的数据缓存器,它与普通存储器的区别是没有外部读写地址线。这样使用起来就非常简单,但缺点是只能顺序写入数据,顺序读出数据,其数据地址由内部读写指针自动加1完成,不能像普通的存储器那样由地址线决定读取或写入某个具体的存储单元。

2 使用FIFO的情况

  FIFO 一般用于不同时钟域之间的数据传输,比如一端为串行输入的图像数据,另一端为处理器以并行方式读取的图像数据,由于两端读写速率不一致,需要先行将串行数据进行串并转换缓存写入FIFO中,达到一定的条件,MCU在一次性将所有缓存数据读走(直到FIFO的状态变成空为止)。

3 FIFO相关的一些参数及端口信号

  FIFO的宽度:它指的是FIFO一次读写操作的数据位,专用FIFO芯片的宽度是固定的,也有可选择的,如果用FPGA自己实现一个FIFO,其数据位,也就是宽度可以自己定义。
  FIFO的深度,它指的是FIFO可以存储多少个N位的数据。如1个8位的FIFO,深度是16,那就是可以存储16个8位的数据;深度为1024,就可以存储1024个8位的数据。
  满标志:输出信号,FIFO已经满的时候,由FIFO的状态电路送出一个信号,以阻止继续向FIFO中写数据照成溢出。
  空标志:输出信号,FIFO已空的时候,由FIFO的状态电路送出一个信号,以阻止继续从FIFO中读出数据而造成无效数据的读出。
  读使能:输入信号,读出数据时的使能信号
  读时钟:输入信号,读数据时所需要的时钟信号,在每个有效时钟沿来临时如果读使能信号有效则读数据。
  读出数据:输出信号,读操作时反映在输出端口上的有效数据。

  写使能:输入信号,写入数据时的使能信号
  写时钟:写入数据所需要的时钟
  写入数据:输入信号,待写入数据,写操作时将端口上的数据写入FIFO。

  读指针:指向下一个要读出的数据的存储单元的地址,读完后自动加1
  写指针:指向下一个要写入数据的存储单元的地址,写完后自动加1

读写指针其实就是读写的地址,只不过这个地址不是任意选择,而是连续的。

4 FIFO的分类

  根据FIFO工作的时钟域,可以将FIFO分为同步FIFO和异步FIFO。同步FIFO是指读时钟和写时钟为同一个时钟,异步FIFO是指读写时钟不一致,是相互独立的。

5 设计指标 FIFO

  1. 分别实现同步和异步FIFO
  2. FIFO深度为1024,宽度为8
  3. FIFO的实现基于FPGA内的双端口RAM,而非寄存器

6 代码设计

module fifo_serial(clk,wen,rst,full,empty,data_in,data_out
);input clk;			// 外部输入时钟input wen;			// 外部输入写使能,低有效input ren; 			// 外部输入读使能,低有效input rst;			// 外部输入复位信号,低有效input [7:0]data_in;	// 外部输入待写入数据output full;output empty;output [7:0] data_out; // 外部读出的数据reg [9:0] waddr;reg [9:0] raddr;reg [10:0] count;// FIFO中有效数据个数,如果为0则FIFO为空状态;如果为1024,则FIFO为满状态;wire wen_wire;wire ren_wire;// 在写使能并且没有满的情况下,写指针加1;如果已经满了,则写指针不变always@(posedge clk or negedge rst)if(rst==1'b0) waddr <= 10'd0;else if(wen == 1'b0 && full != 1'b1)waddr <= waddr + 1'b1;else waddr <= waddr;// 在读使能并没有空的情况下,读指针加1;如果已经满了,则读指针不变	always@(posedge clk or negedge rst)if(rst == 1'b0)raddr <= 10'd0;else if(ren == 1'b0 && empty != 1'b1)raddr <= raddr + 1'b1;elseraddr <= raddr;// 从上面这段代码产生FIFO内有效数据计数器always@(posedge clk or negedge rst)if(rst == 1'b0)count <= 11'd0;else begincase({wen, ren})2'b00:begincount <= count;end2'b01:beginif(full == 1'b0)count <= count + 1;elsecount <= count;end 2'b10:beginif(empty == 1'b0)count <= count + 1;elsecount <= count;enddefault:begincount <= count;endendcaseend// FIFO 中有效数据个数,如果为0则FIFO为空状态
assign empty=(count==11'd0)?1'b1:1'b0;// FIFO 中有效数据个数,如果为1024则FIFO为满状态
assign full = (count==11'd1024)?1'b1:1'b0;// 在写使能有效并且已经满的情况下,不产生对双端口RAM的写操作
assign wen_wire = (full == 1'b1)? 1'b1:wen;// 在读使能有效并且已经空的情况下,不产生对双端口RAM的读操作
assign ren_wire = (empty == 1'b1)?1'b1:ren;// 下面为例化的双端口RAM
dpram1k u1(.WD(data_in),.RD(data_out),.WEN(wen_wire),.REN(ren_wire),.WADDR(waddr),.RADDR(raddr),.RWCLK(clk),.RESET(rst)
);

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

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

相关文章

VUE中直接播放海康威视RTSP/RTMP/ISC平台/NVR视频流

摄像头监控视频在网页中播放的工作&#xff0c;现在大部分摄像头厂商如海康威视、大华、华为等都支持标准的RTSP协议&#xff0c;RTSP协议的优势是实时性高、流畅度度高&#xff0c;同时支持H.265和H.264&#xff0c;清晰度也更高&#xff0c;对于要求比较高的安防、交通等领域…

Java基础知识总结(33)

获取Class对象的方式 Class.forName public class ClassForName {public static void main(String[] args) throws ClassNotFoundException {Class clazz Class.forName("java.lang.String");Class studentClass Class.forName("cn.college.reflect",f…

Python 约瑟夫环问题

据说著名历史学家 Josephus有过以下的故事&#xff1a;Josephus及他的朋友共41人围成一个圆圈&#xff0c;由第1个人开始报数&#xff0c;每数到3该人就必须出去&#xff0c;然后再由下一个人重新报数&#xff0c;直到圆圈上少于3人为止。Josephus 将朋友与自己安排在第16个与第…

Python抓取京东、淘宝商品数据(属性详情,sku价格抓取)

抓取京东、淘宝等电商平台的商品数据&#xff08;包括属性详情、SKU价格等&#xff09;通常涉及到网络爬虫技术。这些平台都有自己的反爬虫机制&#xff0c;因此抓取数据需要谨慎操作&#xff0c;避免对平台造成不必要的负担或违反其使用条款。 公共参数 名称类型必须描述key…

12-Factor应用方法论

12-Factor应用方法论是由Heroku的创始人Adam Wiggins提出的&#xff0c;旨在指导开发者构建应用以适应现代云平台&#xff0c;实现高的可移植性、伸缩性和可维护性。这个方法论特别适合设计和开发软件即服务&#xff08;SaaS&#xff09;应用。 以下是12-Factor应用方法论的详…

【数据结构】AVL 树

文章目录 1. AVL 树的概念2. AVL 树节点的定义3. AVL 树的插入4. AVL 树的旋转5. AVL 树的验证6. AVL 树的删除7. AVL 树的性能 前面对 map / multimap / set / multiset 进行了简单的介绍【C】map & set&#xff0c;在其文档介绍中发现&#xff0c;这几个容器有个共同点是…

汽车电子行业知识:什么是数字钥匙?

文章目录 1. 什么是数字钥匙&#xff1f;2. 数字钥匙有哪些类型&#xff1f;3. 汽车数字钥匙4. 数字钥匙包含哪些技术5. 汽车数字钥匙的发展趋势 1. 什么是数字钥匙&#xff1f; 数字钥匙通常指的是一种安全工具&#xff0c;它使用数字代码或密码来授权对特定系统或服务的访问。…

【御控物联】JavaScript JSON结构转换(13):对象To数组——多层属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、案例之《JSON对象 To JSON数组》三、代码实现四、在线转换工具五、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0c;生成新的JS…

Samba服务安装以及小米摄像头同步

Samba服务安装以及小米摄像头同步 安装Samba添加samba用户创建共享文件夹配置文件修改启动并配置开机启动防火墙以及端口修改小米摄像头同步常见问题1.找不到nas存储设备2.同步只能创建文件夹&#xff0c;不同步数据 安装Samba sudo yum install samba添加samba用户 #如果要添…

用 ipset 和 iptables 保护 sip 端口

这里假设 sip 端口是 5060 和 5080 cat china.sh&#xff0c;and ./china.sh #!/bin/bash apt install -y ipset ipset destroy china ipset create china hash:net maxelem 65536 ipset flush china wget --no-check-certificate -O- http://ftp.apnic.net/apnic/stats/apnic…

火鸟门户拖拽专题可视拖拽面板快速创建网站,无需懂代码,形式灵活,功能强大

可视化拖拉面板简介 可视化拖拽面板是一种消耗代码即可创建网站的工具。它提供了一个分析的界面&#xff0c;用户可以通过拖拽预先设计的组件来构建页面。这种方式可以大大降低网站开发的效率&#xff0c;让不懂代码的人也能轻松创建自己的网站。 可视化拖拉面板的优势 可视…

「51媒体网」媒体邀约现场采访的优势有哪些?

传媒如春雨&#xff0c;润物细无声的&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体邀约现场采访的优势主要表现在以下几个方面&#xff1a; 实时报道与传播&#xff1a;现场采访能够让媒体了解活动的真实性&#xff0c;此外&#xff0c;到场报道媒体可以实时迅速将…

文献学习-25-综合学习和适应性教学:用于病理性胶质瘤分级的多模态知识蒸馏

Comprehensive learning and adaptive teaching: Distilling multi-modal knowledge for pathological glioma grading Authors: Xiaohan Xing , Meilu Zhu , Zhen Chen , Yixuan Yuan Source: Medical Image Analysis 91 (2024) 102990 Key words: 知识蒸馏、模态缺失、胶质瘤…

交易所上币:区块链项目上线交易所流程

一、了解交易所/申请上币 在区块链项目上线交易所之前,首先需要对交易所进行充分的了解,包括交易所的基本信息、交易规则、飞BTC5186上币标准等。还需要了解交易所的申请上币流程,以便为后续的操作做好准备。 1.1 选择合适的交易所 在众多的交易所中 飞(BTC5186),如何选择一个…

【C++】 vector <string> 的超详细解析!!!

目录 一、前言 二、 vector <string> 的个人理解和总结 三、vector <string> 的初始化 四、vector <string> 的输入 \ 输出 五、vector <string> 中的注意事项 六、常考面试题 七、共勉 一、前言 在【C】中&#xff0c;vector 是一个动态数组…

xshell7连接ubuntu18.04

&#x1f3a1;导航小助手&#x1f3a1; 1.查看ubuntu IP2.开启openssh-server3.静态IP设置4.Xshell连接 1.查看ubuntu IP 输入下面命令查看IP ifconfig -a可以看到网卡是ens33&#xff0c;IP为192.168.3.180。 2.开启openssh-server 1、执行下句&#xff0c;下载SSH服务 s…

学习JavaScript Bom(文档对象模型)

一.Bom 是什么&#xff1f; DOM&#xff08;文档对象模型&#xff09;和 BOM&#xff08;浏览器对象模型&#xff09;&#xff08;关于浏览器操作的API&#xff09;是 JavaScript 编程中常用的两种操作对象模型。DOM 操作 HTML 文档&#xff0c;而 BOM 则负责处理浏览器窗口和工…

物联网学习2、MQTT 发布/订阅模式介绍

MQTT 发布/订阅模式 发布订阅模式&#xff08;Publish-Subscribe Pattern&#xff09;是一种消息传递模式&#xff0c;它将发送消息的客户端&#xff08;发布者&#xff09;与接收消息的客户端&#xff08;订阅者&#xff09;解耦&#xff0c;使得两者不需要建立直接的联系也不…

Mac - Keychron K3 Pro 功能键改键 -via 改键配置 For Mac

前言 Keychron K3 Pro键盘连接Mac使用&#xff0c;顶部一排功能键&#xff0c;默认是Mac的多媒体功能键。F1&#xff5e;F12功能键&#xff0c;需要按&#xff1a;Fn F1&#xff5e;F12。 而在我的日常工作中&#xff0c;常用的是F1&#xff5e;F12&#xff0c;期望F1~F12功…

PHP函数、文件包含简介

一、函数 函数本质就是一段代码 在函数的代码中&#xff0c;通常是用于完成一个需要重复执行的操作 同故宫使用函数&#xff0c;可以将哪些需要重复执行的操作&#xff0c;定义成一个函数名&#xff0c;当需要执行这些操纵的时候&#xff0c;直接调用这个函数名就可以 通过函数…