AXI4-Stream Data FIFO(2.0)

模块背景描述:
数据来自于4个1G采样率,分辨率14bit的ADC,由于缓存需要时间,所以利用AXI4-Stream Data FIFO IP核完善数据流的传输过程,由于并非实时传输,有触发信号触发缓存,故fifo深度为4096,只存储4000个数据,数据位宽为64。
该随笔中FIFO深度为32,位宽64,启用了包传输,以及tlast信号。
整体结构如下,clk_mmcm产生100M时钟,rst_module产生延迟复位信号,module_data_stream_fifo产生fifo控制信号,axis_data_fifo为stream fifo IP核。

axis_data_fifo具体配置如下。


先看时钟配置部分,采用ultrascale系列原语STARTUPE3生成50MHz时钟,随后由clk_mmcm产生100M全局时钟。

延迟复位部分,未避免复位过早结束带来问题,这边模拟一段长时间复位,产生的rst0_n作为全局复位。

数据产生部分,这里在接收到module_data_stream_fifo模块输出的sampling_ready采样准备就绪,等待触发信号,输出采样开始信号并开始累加数据。

fifo写入控制模块部分,向上请求采样开始信号,向下输出写入fifo的AXI4信号。

fifo IP核。

Modelsim仿真部分
首先来看写部分,复位结束后,state_cur在IDLE(0)状态,外部fifo ready为1后,跳转到WAIT_FOR_TRIGGER(1)状态,此状态输出ready为1告诉外部已经可以开始采样,等待触发信号,外部在ready为1的情况下,等待条件满足后,给出采样开始信号。
state_cur跳转到ADC_SAMPLING阶段,该阶段拉高valid信号,并拉低ready信号,直至采集到足够的数据长度,该模块含有一个数据个数参数,可在实例化时设置。在采集到第32个数据时,拉高tlast信号,并在下个周期拉低valid信号,tlast作为采样结束的标志信号,使state_cur跳转到DATA_TRANSMISSION状态。

在该状态,我们外部拉高读部分AXI4的ready信号,等待valid为高后,fifo中的数据开始输出,由于写入时,第32个数据的tlast标志被拉高,故第32个数据被读出的时候,tlast也为高,该信号作为数据传输结束标志信号,使得state_cur跳转到END_STATE状态,并随后自跳转到WAIT_FOR_TRIGGER状态。至此,存储ADC的采样数据至stream fifo中 并将之从中读出步骤已完成。唯一不足在于由于第32个数据的tlast标志被拉高,所以读出该数据的时候,tlast信号会被拉高很多个时钟。

posted @   sp12138  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示