最近在忙着仿真FFT IP核,正好在使用FFT IP核的过程中要接触到AXI4-Stream协议。就在这里合并一起讲了吧。本文涉及FFT IP核的控制,AXI4-Stream协议,FFT的部分基础知识。
FFT IP核的设置
AXI4-Stream协议
之前的文章介绍过AXI4-Lite协议,AXI4-Stream也遵循了TVALID,TREADY的握手机制,全局信号内容等内容,这部分内容可以回顾之前的文章。除了AXI4-Lite的信号,AXI4-Stream还增加了以下信号:TKEEP:指示信号,指明当前数据数据类型,发送数据方控制该信号;为低电平表明对应字节数据是空字节,可以移除;与TSTRB一同发挥作用,两个信号都是可选非必需信号当去掉TKEEP信号,TKEEP视作全高电平当去掉TSTRB信号,TSTRB的值等同TKEEP两个信号都被选择后作用如下图:TLAST:指示信号,指明当前是最后一次数据传输,发送数据方控制该信号;只有在最后一次数据传输时该信号会拉高一次,信号一直拉高表明数据都是独立的而不是来自同一个数据包,可选非必需信号;发送方(Master)不要求一定要支持该信号接受方(Slave)的该信号固定为低电平TID: 指示信号,指明当前数据流的ID,标明不同的数据流,发送数据方控制该信号,可选非必需信号,内容见TLAST;TDEST:指示信号,提供数据流的路由信息,发送数据方控制该信号,可选非必需信号,内容见TLAST;TUSER:可以自定义的数据信息,发送方跟接收方协商好,数据内容根据双方协商确定,起传输辅助信息内容,发送数据方控制该信号,并且跟随发送方的数据流一同发送,双方的TUSER数据位宽确定规则如下:MIN(MAX[TUSER bits per byte of masters], MAX[TUSER bits per byte of slaves])TREADY,TDATA也是可选非必需信号;去掉TREADY信号,TREADY视作为高电平;去掉TDATA,TSTRB也被视作去掉而在FFT IP核中,一共出现了下列信号:s_axis_data: FFT IP核的时域数据输入通道,这个传输过程中,FFT IP核作为接收方(Slave)s_axis_config: FFT IP核的配置数据输入通道,这个传输过程中,FFT IP核作为接收方(Slave)m_axis_data: FFT IP核的频谱数据输出通道,这个传输过程中,FFT IP核作为发送方(Master)而且,s_axis_config只使用了TDATA,TREADY,TVALID; s_axis_data使用了TDATA,TREADY,TVALID, TLAST; m_axis_data使用TDATA,TREADY,TVALID, TLAST, TUSER;相对来说控制并不复杂;FFT IP核的控制流程如下:配置好s_axis_config_tdata, s_axis_config_tready跟s_axis_config_tvalid握手(都为高)后,配置数据传入;等待s_axis_data_tready和s_axis_data_tvalid拉高,通过s_axis_data_tdata传入数据至FFT IP核,等到最后一次数据传输,同时拉高s_axis_data_tlast;等待m_axis_data_tvalid和m_axis_data_tready拉高,接收m_axis_data_tdata的数据,m_axis_data_tuser的数据是频谱数据的索引,根据这个索引可以知道当前频谱数据的位置;等到m_axis_data_tlast拉高,数据传输结束。最终结果图:参考资料:PG109-xfft.pdfIHI0051A_amba4_axi4_stream_v1_0_protocol_spec.pdf欢迎点赞留言,一起探讨这令人头秃的电子
还没有评论,来说两句吧...