IC基础(二):同步FIFO

本文介绍了同步FIFO的基本概念,区别于异步FIFO,同步FIFO在同一时钟域内操作,避免了跨时钟域问题。文章详细阐述了同步FIFO的参数、建模、读写行为、地址跳变、判空判满的实现,并提供了代码实现及测试方面的内容。
摘要由CSDN通过智能技术生成

在IC基础(二)中我们已经介绍了异步FIFO,本章介绍的同步FIFO会比上一章简单许多。

一、什么是同步FIFO?
这部是很简单的问题吗?同步FIFO就是读写时钟域都是同一个时钟的FIFO。也就是说同步FIFO不用考虑跨时钟域的问题。同步FIFO和异步FIFO的根本区别就是读写时钟的不一样。

二、同步FIFO的常见参数

clk:读写时钟
rst_n:同步复位信号
w_en:写使能信号
r_en:读使能信号
wdata:输入数据信号
rdata:读出数据信号
wfull:满信号
rempty:空信号

三、同步FIFO建模

同步FIFO的模型可比异步FIFO的模型简单多了。同步FIFO的模型一般如下所示。(懒得画图了,直接用Xilinx的模型)
在这里插入图片描述
可以看到我们设计的端口信号和XIlinx的同步FIFO的模型的端口信号是一致的。FIFO的读写行为如下:

当需要写入数据时:需要判断两个信号,一个是wfull信号,另一个是写使能信号w_en。只有FIFO不满并且写使能有效的时候才可以写入数据。用逻辑来表达就是:
(!wfull&&w_en==1’b1),并且此时的数据要和写使能对齐。用代码来表示就是:

always@(*) begin
	if(rst_n==1'b0) 
		wdata = 0;
	else if(!wfull&&w_en==1)
		wdata = i;
	else
		wdata <= 0;
end 

如果不满足这个条件,那么写入数据就会有错误。

当需要读出数据的时候:需要判断两个信号,一个是rempty信号,另一个是r_en信号。只有当FIFO不空,并且读使能有效的时候才可以读取数据。用逻辑来表示就是:

(!rempty&&r_en==1'b1)

读时能没有那么讲究了,只要不空随时可以读。

always@(posedge clk or
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值