《硬件架构的艺术》学习笔记(3.2)---同步FIFO设计

本文探讨了同步FIFO在跨时钟域数据传输中的作用,尽管异步FIFO通常更优。文章深入讲解了同步FIFO的架构,包括FIFO存储器、读/写指针生成和空/满信号的状态模块。通过verilog实现,详细阐述了如何生成无毛刺和有毛刺的“empty”、“full”信号,并提供了8 * 16同步FIFO的代码实例。
摘要由CSDN通过智能技术生成

同步FIFO设计

对于跨时钟域的数据传输,同步FIFO并不是好选择,异步FIFO才是最好的选择,这是由于同步FIFO的读写时钟相同。那么为什么还要介绍同步FIFO呢???通过学习《硬件架构的艺术》之后,对同步FIFO的“空”“满”标志的生成有了更加深刻的认识,在这里和大家分享、交流一下。

同步FIFO的架构

在这里插入图片描述
我们不必被这一个框一个框的吓唬到,没有什么玄虚的,都可以用verilog硬件语言将其分别描述。主要分为三部分:1)FIFO存储器、2)读/写指针生成、3)状态模块(即空/满信号生成 ---- 重点讨论 ----)。

1)FIFO存储器

**实现功能:**对外部写入数据进行存储;
**verilog实现:**通过一个二维数组来抽象描述, reg [WIDTH:0] mem [DEPTH:0];

2)读/写指针

**实现功能:**产生FIFO存储器的读/写地址;
**verilog实现:**读/写指针分别通过2个计数器来实现。
在这里插入图片描述

3)状态模块(空/满信号生成)

1. reg寄存器形式输出“empty”、“full”信号
在这里插入图片描述
对于深度为4的FIFO出现满时的情况。当wr_ptr指向“3”(DEPTH - 1)时,随后的时钟下wr_ptr指向0等于rd_ptr,此时FIFO满。同理,当读操作使两个指针在下一个时钟相等时,FIFO空。

**verilog实现:**生成的信号为reg寄存器类型,没有毛刺。
在这里插入图片描述

2. wire线网形式输出“empty”、“full”信号
在这里插入图片描述
另一种方式通过指针的形式来直接判断“empty”、“full”信号(指针便是在地址前面多加一位,如上图所示)。首先我们确定一点:写指针是恒领先于读指针的。当读写指针完全相同的情况下,FIFO空;当写指针领先读指针一圈的时候,FIFO满。

**verilog实现:**生成的信号为wire线网类型,有毛刺的风险。
在这里插入图片描述

3. 上述两种生成“empty”、“full”信号的对比

在这里插入图片描述

代码实例 8 * 16同步FIFO

module sync_fifo(
  input    wire      clk,
  input    wire      rstn,
  input    wire      wen,
  input    wire      ren,
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值