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信号会被拉高很多个时钟。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)