片上存储器原型设计

Tags
On-chip Memory Architecture
Memory Interface Design
Digital Signal Processing Design
Last edited by
AI summary
本文讨论了片上存储器的原型设计,包括其分类、优缺点及应用场景,特别强调了FIFO的使用。片上存储器适用于缓存而非大规模数据存储,FIFO用于跨时钟域处理和带宽转换。文中还提供了FIFO的架构设计、读写状态判断及存储器读写程序设计的详细信息。
Last edited time
Nov 5, 2024 01:59 PM

第一节:On-chip-memery

存储器是数字电路设计中必不可少的电路,我们的设计电路的核心是数据,任何情况下数据始终是我们的电路设计的要素,只要有数据,就会存有储电路参与,对于数字电路设计者而言,熟悉掌握存储器的应用是基本技能
从数据电路设计的应用角度来说,存储器分为片上存储器(on-chip-memery)和片外存储器。
On-chip-memery:存储器被集成在设计电路中,对于FPGA而言,存储器在其内部,对于ASIC而言,存储器被集成在设计电路中。
优点:读写数据延迟小,随时读写,读写操作简单
缺点:由于是作为设计电路的一部分,因此占用设计资源,存储量非常小
片外存储器  :存储器独立于设计电路,2个独立电路需要特定的引脚连接
优点:存储量大,可以存储大批量数据
缺点:读写延迟较大,读写操作复杂

1.1 On-chip-memory

On-chip-memery由于作为设计电路一部分,占用设计资源,因此存储数据量非常小,如果存储数据量较大,不适合用片上存储器。
在实际应用选中,片上存储器在设计中用于缓存,而不是用于数据存储器
缓存:零时存储器,一般加快数据读写
数据存储器:真正用来存储数据
应用中存储器  =  缓存 +  数据存储器

1.1.1 On-chip-memery分类

notion image
Rom:一般用于lut(查找表)/复杂译码电路
Ram:  一般缓存数据,随机读写用双端口ram,顺序读写用fifo

1.1.2 On-chip-memery标准参考接口

写操作接口
wr_clk :写时钟
wr_en :写使能
wrdata[W-1:0] :写数据
读操作接口
rd_clk :读时钟
rd_en :读使能,有时可以忽略
rddata[W-1:0] :读数据
rdaddr[A-1:0]/读存储状态标志 :写地址/读状态标志

1.2 FIFO

这里重点介绍FIFO,在数字电路设计中FIFO是On-chip-memery中使用率最高的,它是双端口ram的一种特殊结构,它和双端口ram的本质区别是顺序读写。
对于ram的2种读写方式,有着本质的区别,操作要求如下:
随机读写:
写数据:往指定的地址空间写入数据,当我们往同一地址空间写数据,之后的数据会覆盖掉之前的数据。
读数据:从指定的地址空间读出数据,当我们从同一地址空间读取数据,数据会反复被读出
顺序读写:
写数据:从开始地址空间按顺序写数据,同一地址空间只能写一次数据,不支持数据覆盖
读数据:从开始的地址空间按书序读出数据,同一地址空间只能读出一次数据(必须有有效数),不支持反复读数据

1.2.1 FIFO应用场景

  1. 跨域处理
    1. notion image
      Clk1和clk2是2个不同的时钟,有可能是同步时钟,也有可能是异步时钟,我们把这2个电路系统叫做跨时钟域系统。
      如果clk1和clk2是相关时钟,这2个系统为同步跨时钟域,否则异步跨时钟域。
      无论是同步跨时钟域还是异步跨时钟域,为了保证2个电路系统能够稳定采样到数据,需要在这2个时钟域之间加缓存。
  1. 带宽转换
    1. 现在片上存储器读写支持带宽转换,但是数据位宽之间的比例必须是2n倍的关系,满足如下关系:
      K为2n是
      wrdata[k-1:0]        rddata[N*K-1:0]
      rddata[k-1:0]         wrdata[N*K-1:0]
      notion image
  1. 缓存
    1. 在数字电路设计中任何情况都必须保证总带宽匹配(读带宽>=写带宽),当总带宽匹配的情况下保证了数据的稳定性,但是即使总带宽匹配了,有可能会存在瞬时带宽不匹配,数据稳定性不能完全保证。
      总带宽 :是数字电路设计的关键指标,任何电路保证总带宽匹配,在我们规定时间时间内数据传输的带宽。
      notion image
      电路总带宽  =  XBITMAX/T (Xbit表示时间轴上T时间内最大数据量,T:突发周期)
      瞬时带宽:在突发周期内某一时间的带宽
      notion image
      最小深度计算
      burst_length:突发数据个数
      X,Y:读时钟周期里,每Y个时钟周期会有X个数据读出FIFO
      r_clk:读时钟
      w_clk:写时钟
      读数据有效频率=    r_clk*(X/Y)
      写时钟周期  =1/w_clk
      一个写周期内可以读出的数据个数  =  (1/w_clk  *  r_clk*(X/Y))
      在突发周期内读出的数据个数      =  bl*(1/w_clk  *  r_clk*(X/Y))
      在突发周期内未读出的数据个数 =  bl- bl*(1/w_clk  *  r_clk*(X/Y))
      =  bl- bl*( r_clk /w_clk    *(X/Y))
      Fifo最小深度 =  2*bl- 2*bl*( r_clk /w_clk    *(X/Y))

第二节:FIFO原型设计

需求:
  1. 不支持带宽转换
  1. 数据位宽8位
  1. 深度为16

2.1 架构设计

notion image

2.2 关于读写状态判断

notion image

2.3 存储器读写程序设计

功能:存储块读写
notion image
信号名
描述
写数据相关
wr_clk
写时钟
wr_en
写使能
wrdata[7:0]
写数据
wraddr[3:0]
写地址
full
写状态标志
读数据相关
rd_clk
读时钟
rd_en
读使能
rddata[7:0]
读数据
rdaddr[3:0]
读地址
empty
读状态标志

2.4 写地址计算与状态判断

notion image
功能:计算写地址,判断写状态
信号名
描述
系统相关
rst_n
系统复位
写操作相关
wr_en
写使能
wr_clk
写时钟
输出写地址与状态
wraddr[3:0]
存储块写地址
full
当full==1表示满
存储块状态判断有关地址
wraddr_e[4:0]
扩位后写地址
rdaddr_e[4:0]
扩位后读地址

2.5 读地址计算与状态判断

notion image
功能:计算存储块读地址,判断状态
信号名
描述
系统相关
rst_n
系统复位
写操作相关
rd_en
读使能
rd_clk
读时钟
输出写地址与状态
rdaddr[3:0]
存储块读地址
当empty ==1表示空
存储块状态判断有关地址
wraddr_e[4:0]
扩位后写地址
rdaddr_e[4:0]
扩位后读地址

2.6 原型验证

  1. 写fifo验证
    1. notion image
  1. 读FIFO正常输出模式验证
    1. notion image
      notion image
  1. 读fifo超前输出模式验证
    1. 由于FIFO读数据时顺序读,因此数据可以超前输出
      notion image
      notion image
  1. 边写边读验证
    1. notion image

第三节:vivado工具

notion image
Loading...