type
status
date
slug
summary
tags
category
Property
Nov 30, 2023 02:46 PM
icon
password
属性
属性 1
描述
Origin
URL

1.设计思想:

1.同步FIFO的写时钟和读时钟为同一个时钟,FIFO内部所有逻辑都是同步逻辑,常常用于交互数据缓冲。 2.典型同步FIFO有三部分组成:(1)FIFO写控制逻辑;(2)FIFO读控制逻辑;(3)FIFO存储实体(如Memory、Reg)。 3.FIFO写控制逻辑主要功能:产生FIFO写地址、写有效信号,同时产生FIFO写满、写错等状态信号; 4.FIFO读控制逻辑主要功能:产生FIFO读地址、读有效信号,同时产生FIFO读空、读错等状态信号。
 
notion image

2.基本概念

  1. 同步FIFO的“同步”是什么意思?
  1. FIFO是什么,有什么用?
  1. 接口都有什么
    1. notion image
  • 同步:时钟间有确定的倍数关系或确定的相位关系
  • FIFO:Frist-in-first-out,先进先出,是一种数据缓存器,实现速率匹配。
  • 既然是数据缓冲器,那么缓冲器的大小,存储深度,读写地址和存储器空满状态都需要确定。
一般FIFO使用循环指针(计数溢出自动归零)。一般可以称写指针为头head,读指针为尾tail。初始化时,读写指针指向同一数据地址。
·FIFO:先进先出(First-in-first-out) ·FIFO的深度:同一块数据内存的犬小 ·FIFO的宽度 ·写指针:Write-pointer ·读指针:Read-pointer ·写数据端口 ·读数据端口 ·FIFO空、FIFO满
·同步:数据写入FIFO的时钟和数据读出FIFO的时钟是同步的(synchronous) ·异步:数据写入FIFO的时钟和数据读出FIFO的时钟是异步的(asynchronous)
 
一般FIFO使用循环指针(计数溢出自动归零)。一般可以称写指针为头head,读指针为尾tail。 初始化时,读写指针指向同一数据地址。 下图可见,FIFO初始化时,WP和RP指针指向同一数据单元。
WP指向下一个将要写入的数据单元,RP指向将要读出的数据单元。
notion image
初始化时,WP和RP指针指向同一数据单元。WP指向下一个将要写入的数据单元,RP指向将要读出的数据单元,两者是一个追赶过程。可以设置一个计数器,
只写,来一个数据,写一个,写地址,+1,计数器+1,写满为止;
只读,来一个,读出一个数据,读地址+1,计数器-1;
同时读写,计数器值不变,读写地址均+1。+

使用fifo_counter记录FIFORAM中的数据个数:

1.等于0时,给出empty信号
2.等于BUF_LENGTH时,给出full信号

fifo_counter:

1.写而未满时增加1
2.读而未空时减1
3.同时发生读写操作时,fifo_counter不变
读写指针宽度 1.与地址宽度相当 2.地址增加而溢出后,自动变成0
3.循环指针(此处地址变化:0-7-0-7-0)

3.SPEC

(1) Function description
同步FIFO实现了对write/read的控制,其接口解决了接口两端数据速率不匹配的问题。
(2) Feature list
支持存储宽度、深度可配置
时钟工作频率为1MHz
(3) Block diagram
notion image
模块主要分为读/写接口、读/写指针、读写指针的比较逻辑和array存储阵列四部分。
  1. 读/写接口:为模块提供读写数据和读写使能信号;
  1. 读写指针:主要标志读写指针当前array的地址
  1. 比较逻辑:
 
  • 使用element counter(elem_cnt)记录FIFO RAM 中的数据个数:▷ 等于0时,给出empty信号;等于BUF_LENGTH时,给出full信号
  • elem _ cnt :
  • ▷ 写而未满时增加1
  • ▷ 读而未空时减1
  • ▷ 同时发生读写操作时,elem_cnt不变
(4) Interface description
notion image
(5) Timing
notion image
分为三部分,写操作,读操作,读写操作。
 
DUT代码1:
TB1:
 
RTL1
TB2:
 

5.波形分析

写阶段
notion image
  • 复位之后,进行写操作,直至写满,产生满标志后,不再写入新数据。
  • 读阶段 
notion image
  • 进行读操作,直至读空,产生空标志后,不再读出新数据。
  • 同时读写阶段
notion image
  • 先进行写操作,写入三个新数据之后,同时进行读写操作,期间写入新数据和读出数据,但是elem_cnt计数器不再变化,动态平衡。

(2)小结

设计思路:
先分析需求,定义接口,画出具体的实现框图;
按照协议和理解,画出相应时序图;
看图写程序,验证仿真波形是否与时序图对应。  
同步FIFO设计要点
是什么时候产生空满标志位,即怎么衡量array被写满或者被读空。
在这里,我使用了4bit的elem_cnt表示,通过elem_cnt的值表示当前array存储阵列的资源使用情况。
0表示没有数据,即空状态;8表示写满,因为array的存储深度就是8。
在spec中提到实现FIFO可配置,在这里只实现了宽度为32bit,深度为8的同步fifo设计,初步验证仿真波形与时序图相对应。
 

参考资料

 
异步FIFOIC 面试常问问题
  • Twikoo
  • Waline
  • Giscus
  • Cusdis
  • Utterance
Conor
Conor
一个野生的技术宅
公告
type
status
date
slug
summary
tags
category
Property
Nov 25, 2023 06:32 AM
icon
password
属性
属性 1
描述
Origin
URL
🎉持续更新中🎉