首页 > 其他分享 >从0搭建一个FIFO模块-01(基础知识)

从0搭建一个FIFO模块-01(基础知识)

时间:2024-11-14 17:41:07浏览次数:1  
标签:01 双口 FPGA 二进制 FIFO 基础知识 数据 时钟

1. FIFO介绍

  1. 基本概念

FIFO(First In, First Out)是一种常用的数据结构,用于存储和处理数据。它的工作原理与排队的顺序类似,遵循"先进先出"的原则。即,第一个进入FIFO的数据会是第一个被取出的数据。在FPGA设计中,可以使用AM作为FIFO的存储单元,再通过控制逻辑来管理读写操作和指针的更新。

  1. FIFO的作用

在FPGA中,主要有以下几个作用

  1. 数据缓冲:在处理数据流时,FIFO可用于平衡速度不一致的两个系统之间的数据流。例如,处理器和外设之间的数据传输。

  2. 异步数据传输:在不同的时钟域之间传递数据时,可以使用FIFO来暂存数据,以便顺利地进行传输。

  3. 流水线处理:在硬件设计中,FIFO常用于多阶段流水线设计中,作为各阶段之间的数据缓冲区。

  4. 为什么要自己设计FIFO

我们知道,在进行FPGA开发中,FIFO的实现大多采用IP核的形式实现,这样可以大大减少开发周期,但是IP核的形式由于是一个黑盒,会导致项目的不可控及代码移植问题,同时自己设计FIFO有利于我们深入理解FPGA开发,同时对于IC设计等领域,FIFO的电路实现也是一项必备的技能。

  1. 其他必须的知识点

    1. 格雷码

在设计FIFO之前,需要用到格雷码(gray code),因此需要对其进行了解。

我们知道,在计算机等架构中,数据是以二进制形式保存并参与计算的,例如10 dec = 1010 bin,通常称之为自然二进制。Gray码是一种特殊的二进制编码方式,它与普通的二进制码不同,主要的特点是:相邻的两个数在二进制表示中只有一位发生变化。3位宽的gray码表示如下

td {white-space:nowrap;border:1px solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;}
十进制 自然二进制 Gray码
0 000 000
1 001 001
2 010 011
3 011 010
4 100 110
5 101 111
6 110 101
7 111 100

可以发现Gray 码的关键特点是相邻的两个值在二进制表示中只有一位二进制位的不同。这意味着当从一个数字过渡到下一个数字时,只有一个位改变,从而避免了多个位同时变化时可能引入的误差。

在数字电路中,亚稳态问题一直是工程师所需要尽量减少的,特别在跨时钟域的问题上,而Gray码这种每次只变化一个位(对应在FPGA硬件上表现为只有一个寄存器进行反转),这样就能大大减小发生亚稳态的概率,从而保证电路的稳定性。

  1. 双口RAM(Dual Port Memory Module)结构

在FPGA中实现FIFO,其基本存储结构是双口ram,以lattice双口RAM IP核为例,其结构如下图所示:

双口ram可以同时以不同的时钟速率对数据同时的分别进行写入和读出,其操作时序图如下图:

可以看到,以写为例,在写时钟的上升沿,写入地址和数据,并至少持续一个写入时钟周期,同时在该周期的时钟的下降沿,写使能信号wr_en_i拉高,并持续至第二个时钟的上升沿,这样一个数据就被存储到Addr_0中了。读操作是在读时钟的上升沿给到读地址Addr_0,同时在该读周期的时钟下降沿,读使能拉高,这样在下一个读时钟周期,地址Addr_0中的数据被读出在rd_data_o数据线中。

标签:01,双口,FPGA,二进制,FIFO,基础知识,数据,时钟
From: https://www.cnblogs.com/dy-stairmed/p/18546506

相关文章

  • MBR40150FCT-ASEMI大功率肖特基MBR40150FCT
    编辑:llMBR40150FCT-ASEMI大功率肖特基MBR40150FCT型号:MBR40150FCT品牌:ASEMI封装:TO-247正向电流:40A反向电压:150V正向压降:0.95V~1.90V引线数量:3芯片个数:2芯片尺寸:MIL漏电流:10ua恢复时间:35ns浪涌电流:300A芯片材质:正向电压:1.90V封装尺寸:如图特性:快恢复二极管工作结......
  • SBT40100VFCT-ASEMI低压降肖特基SBT40100VFCT
    编辑:llSBT40100VFCT-ASEMI低压降肖特基SBT40100VFCT型号:SBT40100VFCT品牌:ASEMI封装:TO-220F特性:插件二极管正向电流:40A反向耐压:100V恢复时间:35ns引脚数量:3芯片个数:2芯片尺寸:MIL浪涌电流:300A漏电流:10ua工作温度:-65℃~150℃包装方式:500/盘;5000/箱备受欢迎的SBT40100V......
  • [OpenWRT] /dev/sda: Unknown USB bridge [0x0bda:0x9201 (0xf200)] Please specify d
     >>smartctl--testshort/dev/sdasmartctl7.22020-12-30r5155[aarch64-linux-5.10.176](localbuild)Copyright(C)2002-20,BruceAllen,ChristianFranke,www.smartmontools.org/dev/sda:UnknownUSBbridge[0x0bda:0x9201(0xf200)]Pleasespecifyde......
  • 洛谷P11183 [ROIR 2018 Day2] 大数据处理
    涉及知识点:动态开点线段树,贪心前言很妙很感性直观的贪心,做完神清气爽。题意Link有一个长为\(2^k\)的序列,编号从\(0\)开始,你要在上面染色,每次只能染色\([k2^i,(k+1)2^i-1]\)的区间(\(0\leqi<k\)),问最少要染色多少次才能变成给定的目标序列。目标序列以形如\((x_1,y_1),(......
  • 发布的一篇文章-001.md
    监测ES健康情况索引的分片状态curl-XGET"http://192.10.1.111:9200/_cat/shards"这个_cat/shards命令的返回结果显示了Elasticsearch集群中各个索引的分片状态。以下是对每一行的解释:返回结果解释public_domain_data_test0020pSTARTED2......
  • 【题解】洛谷P1712: [NOI2016] 区间
    P1712[NOI2016]区间我对尺取法并不敏感,所以感觉有点难度,我们想到按照区间长度排序加入使得满足单调性,直到有一个区间的覆盖次数达到了m就可以计算了,而这个就是尺取法,单调性使得我们答案总是最优的。覆盖次数就可以用线段树做,而且数据范围很大需要离散化,计算答案时注意把答案带......
  • Ynoi2014 等这场战争结束之后
    题目大意有\(n\)个点,点有点权,维护一个完全持久化的数据结构并支持:将点\(x\)和\(y\)之间连接一条边。询问点\(x\)所在的连通块的第\(k\)小权值。数据范围:\(1\len,q\le10^5,0\lea_i\le10^9\)。时间限制:500ms,空间限制:20MB思路写一种比较简单的做法。先不考......
  • CICD01 Git, GitLab, 部署方式 ubuntu使用
    版本管理系统Git和GitLab1DevOps简介1.3持续集成、持续交付和持续部署CICDCICD:持续集成,持续交付,持续部署1.6常见的软件部署模式生产中蓝绿部署和金丝雀用的比较多1.6.1蓝绿部署Blue-greenDeployments一个和生产环境一样的预发布环境,和生产环境......
  • 「AT_diverta2019_2_e」Balanced Piles 题解
    题意描述有一个长度为\(N(2\leN\le10^6)\)的数组,一开始所有元素均为\(0\)。设\(M\)为当前数组中的最大元素,\(m\)是当前数组中的最小元素,你可以执行若干次以下操作:选择一个大小为\(m\)的元素,把他变为\(x\),其中\(M\lex\leM+D\)且\(m<x\)。求有多少种操作方法......
  • COMP2011J - Object Oriented Programming
    Beijing-DublinInternationalCollegeCOMP2011J-ObjectOrientedProgrammingIndividualAssignment:DefenderAssignmentDetailsDuedate:6thofDecember2024Language:SolutionmustbecompletedinJavaGameDescriptionDefenderisaclassicarcadega......