首页 > 其他分享 >同步FIFO设计

同步FIFO设计

时间:2023-12-18 17:35:42浏览次数:17  
标签:同步 SRAM RAM 计数器 fifo 地址 FIFO 设计

  • FIFO有一个读口和一个写口,读写时钟一致是同步FIFO,时钟不一致就是异步FIFO
  • IP设计中通常使用的是同步FIFO
  • 异步FIFO通常使用在跨时钟域设计中

RAM(Random Access Memory)的设计

FIFO中的数据可以存储在寄存器中或者SRAM中,FIFO的容量比较小的时候,使用register,FIFO容量比较大的时候使用的是SRAM

  • SRAM通常是Memory Compiler进行产生的
  • SRAM不需要手动写仿真模型
  • RAM在时钟的驱动下,可以从两个端口同时进行读写操作
  • 写操作:写数据、写地址、写使能
  • 读操作:读地址、读使能,读取完成之后,会返回读数据

双端口RAM的Verilog代码(仿真模型)


  • 将RAM的位宽、深度进行参数化设计,方便后续进行修改
  • 首先要定义一个存储空间,用于存储数据
  • SRAM是已经综合好的block,其中布局布线已经完成
  • 在进行DC综合的时候,会将定义的存储体综合为寄存器或者sram(如果有相应的库文件),使用sram,面效比会比较好;register作为存储体的时候,容量小的时候,面积比较小,并且在下一个周期读出其中的值
  • 使用register作为存储体,使用组合逻辑在当拍就可以得到数据
//1.
always@ (posedge clk) begin
  if(read_en)
    read_data <= memory[read_addr];
end

//2.
// 当拍就可以得到memory的值
wire [DATA_WIDTH-1:0] read_data_next;
assign read_data_next = memory[read_addr];

always @(posedge clk) begin
  if(read_en)
    read_data <= read_data_next;
end

同步FIFO设计

  • FIFO包含两部分,一部分是存储体,另一部分是fifo ctrl
  • fifo是不会存在根据地址取值的,fifo - 先入先出,所以端口没有地址,地址通过其中的fifo ctrl进行控制
  • 没有读地址和写地址
  • fifo满了之后,不能写入数据,fifo为空的时候,不能向外读取数据,关键是full和empty信号的产生
  • fifo上下游模块看到fifo的状态之后,满不写,空不读;在fifo内部也需要进行控制

方法1

  • 需要维护读指针和写指针

  • 产生一个写使能,需要给一个地址给到写使能,写指针加1;产生一个读使能,读指针加1
  • 产生空满信号:用一个计数器,表示当前fifo中一共存有多少数据,写使能来的时候,计数器加1,读使能来的时候,计数器减1,写使能和读使能同时来的时候,计数器不变
  • 当counter为容量减一的时候,来了一个写使能,会变为满
  • 当counter为1的时候,来了一个读使能,会变为空



// 满信号产生
if((!write_allow) && (Fcounter == 9'b0))
  empty <= 1;
else if((!write_allow) && (Fcounter == 9'b1 && (read_allow))
  empty <=1;
else 
  empty <= 1'b0;


  • counter的值要覆盖所有的RAM地址范围
parameter COUNTER_WIDTH = 9;
reg Fcounter [COUNTER_WDITH-1:0]; // 只能表示0-511,表示不了512这个数
reg Fcounter [COUNTER_WDITH:0]; // 9bit可以表示512这个数

方法2

方法1多例化了一个计数器,计数器需要占据一定的资源和面积


  • 读写指针的空间扩大一倍,使用除最高位之外的其他位寻址sram

标签:同步,SRAM,RAM,计数器,fifo,地址,FIFO,设计
From: https://www.cnblogs.com/Icer-newer/p/17911406.html

相关文章

  • 《实现领域驱动设计》笔记——架构
    DDD的一大好处便是它并不需要使用特定的架构。由于核心域位于限界上下文中,我们可以在整个系统中使用多种风格的架构。有些架构包围着领域模型,能够全局性地影响系统,而有些架构则满足了某些特定的需求。我们的目标是选择合适于自己的架构和架构模式。在选择架构风格和架构......
  • Java五种设计模式实现奶茶订单生成系统小DEMO
    前言这是大学时候上设计模式这门课写的程序,当时课程任务是要求结合五个设计模式写一个系统,最近偶然翻到,把系统分享一下。成品预览主界面​功能介绍订单管理系统,实现了对订单的增删改查。且实现了将订单内容写入文件,每次增删改查都会做保存,下次重启程序时......
  • 【HarmonyOS】鸿蒙应用安装三方包后,为什么每次同步更新都会将三方包更新成最新版本?
    【关键字】鸿蒙应用三方包安装,ohpm三方包安装 【问题详情】进行鸿蒙应用开发时,我们经常会通过ohpm命令安装三方包实现某些功能,但是可能会存在这种情况:当三方包发布新版本后,点击同步工程,会出现默认更新安装的三方包版本情况;但是因为功能版本兼容问题,我们往往不想升级版本,本篇......
  • 架构模式,设计模式,代码模式
    架构模式,架构模式是一个系统的高层次策略,涉及到大尺度的组件以及整体性质,架构模式的好坏可以影响到总体布局和框架性结构设计模式,是中等尺度的结构策略,这些中等尺度的结构实现了一些大尺度组件的行为和它们之前的关系。设计模式的好坏不会影响到系统总体布局和总体框架。设计......
  • Java设计模式之七大设计原则
    七大设计原则设计原则概述单一职责原则定义一个类仅有一个引起它变化的原因分析模拟场景访客用户普通用户VIP用户代码实现/***视频用户接口*/publicinterfaceIVideoUserService{​  voiddefinition();​  voidadvertisement();}​/***......
  • 工程监测仪器振弦采集仪的设计与应用
    工程监测仪器振弦采集仪的设计与应用工程监测仪器是用于对工程结构进行监测和测量的设备,其中包括了很多不同的仪器。而振弦采集仪就是其中一种常用的工程监测仪器。振弦采集仪是一种用于测量结构振动和应力应变的仪器,广泛应用于桥梁、建筑物、塔吊、高楼等工程中。其原理是利用......
  • 设计模式
    一.参考网址1. 设计模式2. 23种设计模式实战!超级全,超级好懂!......
  • 优雅的程序设计:掌握门面模式的奥秘
    前言在软件开发中,设计模式扮演着至关重要的角色,而门面模式则是其中的瑰宝。如果你渴望简化复杂的系统、提高代码的可维护性和可扩展性,那么这篇文章是必读之选。它深入剖析了门面模式的核心原理,通过实战案例展示了其在现实场景中的应用。无论你是初学者还是经验丰富的开发者,你都将从......
  • Redis上层数据类型设计
    StringString即字符串对象,是Redis使用最多的数据类型,其使用key-value结构,key为唯一标识,value为存储内容。value不仅可以是字符串,也可以是数字,包括整数或者浮点数。value最多可以容纳的大小为512MB。>SETnameErickRenOK>SETage19OK>GETname"ErickRen">GETage......
  • 根据实体之间的关系设计表数据,学习总结
    一、当实体间的关系是1:1的关系时:学生对学生信息例:学生——学号;学生——姓名;学生——学籍当实体“学生”和其他实体都是1对1的关系,设计表可直接创建单张表即可学生表:学号PK(主键),学生姓名,学籍…… 二、当实体间的关系是1:n的关系时:班级对学生例:班级——班级号,班级——班级......