Quartus的FIFO IP核中的wrusedw和rdusedw

1.SCFIFO

设置FIFO深度为32。

读写时钟相同,前16个时钟往FIFO写数据,后16个时钟读数据

T1时刻写第一个数据时,usedw立刻变为1,表示FIFO中的数据数量。

T2时刻,写第16个数据,usedw立刻变为16,表示FIFO中有16个数据。

T3时刻,读第一个数据,usedw立刻变为15,表示读出数据后FIFO剩余15个数据。

可以看出,在单口FIFO中,usedw可以实时表示FIFO中的数据数量。

2.DCFIFO

将IP核改为dcfifo,仿真图如下:

 

T1时刻,写入第一个数据,但wrusedw仍然为0,rdusedw也为0.

T2时刻,写入第二个数据,wrusedw变为1,rdusedw仍为0.

T3时刻,写入第三个数据,wrusedw变为2,rdusedw仍为0.

T4时刻,rdusedw变为1.

可以看出,wrusedw在wr_clk的上升沿改变,rdusedw在rd_clk的上升沿改变。

wrusedw相比写数据延后一个时钟周期。

在wrusedw改变后,在第3个rd_clk更新rdusedw。

为什么会这样呢?

我是这样理解的:

在写时钟域,写指针wptr指向当前数据(最新写入的数据)的下一地址。另有一指针wptr_r相比于写指针延后一个时钟周期。有wptr_r <= wptr;

将时钟域中的读指针经过两个时钟同步到写时钟域,寄存为rd_addr_rr,则有wrusedw <= wptr – rd_addr_rr;因为还没开始读,读指针一直为0。在T1时刻,wptr加1变为1,计算wrusedw时wptr仍为0,因此wrusedw为0。

在读时钟域,将wptr_r经过两个时钟同步到读时钟域,寄存为wr_addr_rr,rdusedw <= wr_addr_rr – rptr; T4时刻的wr_addr_rr为T2时刻后的wptr_r,值为1(wptr为2,wptr_r延后一个时钟),因为rptr一直为0,所以T4时刻rdusedw为1。

 

T1时刻,rptr仍为0,wr_addr_rr为同步过来的14(往前再数2个周期),rdusedw为14。此时刻要读数据,所以此时刻结束时rptr立刻加1,变为1.

T2时刻,rptr为1,wr_addr_rr为同步过来的14(往前数2个读时钟周期,还是14),所以rdusedw <= wr_addr_rr – rptr; 变为13。此时刻要读数据,所以rptr加1

T3时刻,wptr为16,rd_addr_rr为同步过来的0(往前数两个写时钟周期,此时还没开始读),因此wrusedw为16,但是位宽不够,数据溢出,因此显示为0。

T4时刻,rptr为2,wr_addr_rr为同步过来的15(往前数2个读时钟周期,wptr_r为15),所以rdusedw <= wr_addr_rr – rptr; 变为13。此时刻要读数据,所以rptr加1

T5时刻,rptr为3,wr_addr_rr为同步过来的15(往前数2个读时钟周期,wptr_r为15),所以rdusedw <= wr_addr_rr – rptr; 变为12。

T6时刻,wptr为16,rd_addr_rr为同步过来的0(往前数两个写时钟周期,此时还没开始读),因此wrusedw为16,但是位宽不够,数据溢出,因此显示为0。

分析wrusedw变为14的时刻,wptr为16,同步过来的读地址为T3时刻的读地址,T3时刻已经读了两个数据,rptr变为2,所以同步过来的rd_addr_rr为2,因此wrusedw为wptr – rd_addr_rr = 14;

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Quartus FIFO IP核用于实现先进先出(FIFO)功能的设计。它可以存储一系列数据并保证按照它们被写入到FIFO的顺序依次读取。Quartus FIFO IP核在许多数字系统设计应用广泛,比如数据缓存、视频图像缓冲、有限状态机和数据流控制等方面。 ### 回答2: Quartus是一种FPGA设计软件,其可以方便地构建和设计FPGA芯片。在FPGA设计有许多经典的模块,其之一就是FIFO(First-In-First-Out,先进先出)模块。在Quartus,我们可以调用FIFO IP核来创建一个FIFO模块。 第一步骤,我们需要打开Quartus软件,并创建一个FIFO IP核。打开Quartus,在工程管理器右键单击Design,然后选择“New”,此时弹出“New Project Wizard”对话框,我们可以创建一个所需的工程管理器模板。 第二步是在新的工程添加FIFO IP核。首先,单击工具栏的“Library”按钮,然后选择“New Library”。接着,打开“IP Catalog”(IP目录),选择“On-chip Modules(OCMs)”,然后选择模块的类型,并将其拖到新的工程。 第三步是设置FIFO IP核的属性。我们可以通过右键单击FIFO IP核,选择“Properties”(属性)来设置它的属性(如深度、宽度、时钟频率等)。在设置这些属性时,我们应该仔细考虑所需的FIFO特性以及目标FPGA的规格。 第四步骤涉及到设计代码。我们需要将FIFO IP核添加到设计通过添加相应例化代码。这将告诉Quartus将生成的IP核用于设计。一旦代码添加完毕,我们就可以对FIFO进行仿真和验证。 最后一步是实现。Quartus会将设计实现到FPGA上,并将FIFO模块加载到FPGA。一旦实现成功,我们就可以通过GUI或者其他接口与FIFO交互。 总之,我们可以通过调用QuartusFIFO IP核来轻松地创建FIFO模块。需要注意的是,在设置FIFO的属性和设计代码时需仔细考虑目标FPGA的规格,以避免出现错误和不兼容问题。 ### 回答3: Quartus是目前最流行的FPGA设计软件之一,它广泛应用于电子设计自动化(EDA)领域,在FPGA设计拥有极高的知名度和使用率。其FIFO IP核Quartus一个非常常用的模块,它用于实现FIFO缓冲器,其优势在于具有存储容量大、数据读写速度快等特点,可以有效地改善数据传输的稳定性和效率。 使用QuartusFIFO IP核并不复杂。首先,在Quartus软件的工程管理器打开自己的工程,在该工程的设计添加FIFO IP核模块。在添加FIFO IP核模块的时候,需要设置FIFO的各种参数,比如:存储深度、读写接口宽度、时钟速率等。这些参数可以根据实际需求进行调整,以满足具体项目的要求。 接着,将FIFO IP核模块的输入接口和输出接口正确地连接到其他模块。一般来说,FIFO IP核模块的输入和输出都要连接到一个时钟模块,以确保数据的同步传输。此外,还需要将其他模块的数据信号连接到FIFO IP核模块的输入端口,以实现数据的写入;将FIFO IP核模块的输出端口连接到其他模块的数据输入端口,以实现数据的读取。在连接模块配置完成后,需要根据具体的项目要求,进行特定的数学计算和综合分析,以确保整个设计的正确性和可行性。 最后,实现对QuartusFIFO IP核的验证工作。验证是FIFO IP核FPGA系统正常运行的必要条件,需要对设计的FIFO IP核模块进行仿真和调试等工作,以便最终得到FIFO的功效和最优的性能。当验证通过后,即可生成需要的bit文件,将其下载到目标FPGA芯片,从而使整个设计工程得以运行及完美工作。 总而言之,在FIFO IP核的设计和调用过程,需要考虑到多个因素,包括参数设置、模块连接、信号配置、仿真验证等,才能够成功实现系统设计的目标。因此,对于需要在FPGA系统使用FIFO缓冲器的应用,建议根据实际需要,结合个人的应用场景以及项目需求进行全面综合考虑,并通过不断地实践和优化,实现最佳效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值