数据包stream protocol = coremail_一边学习FFT IP核,一边学习AXI4-Stream协议

d66fce954142cbd2e9e05ca579678212.png

最近在忙着仿真FFT IP核,正好在使用FFT IP核的过程中要接触到AXI4-Stream协议。就在这里合并一起讲了吧。 本文涉及FFT IP核的控制,AXI4-Stream协议,FFT的部分基础知识。
FFT IP核的设置
这里做最简单的设置,打开Vivado,点开IP Catalog,找到FFT IP核。设置界面如下: e576e44f40566e5c90b12ec1a5469467.pngConfiguration 设置设置的参数意义如下:
  • Numbers of Channels: 通道数,FFT IP核可以设置多个数据通道,进行多路FFT操作
  • Transform Length: 传输的数据长度,就是FFT中的点数,决定输出的频谱分辨率
  • Architecture Configuration:如果Architecture Choice选择Automatically Select,IP核会根据你填的时钟频率和数据吞吐量选择适合的架构
ea903ebdce66af78ce6b682e09ed052b.pngImplementation设置的参数意义如下:
  • Data Format: 数据格式,定点数或浮点数,浮点数不能使用多个通道同时进行FFT操作
  • Scaling Options: 对输出的数据进行等比例缩小,如果选Scaled,则在控制IP核时需要设置缩小比例,详情见: 资料1
  • Input Data Width:输入数据位宽,这里只用输入I,Q一路的位宽,不需要输入组合起来的位宽
  • Phase Factor Width:因为进行FFT 操作涉及乘加操作,肯定会有精度损失,这里可以设置一个合适的值平衡精度和面积的要求。
  • 控制信号:时钟使能跟复位信号,复位信号拉低最少要保持两个时钟周期。
  • Output Ordering: Natural Order输出的频谱数据还要做fftshift,这个跟fft算法流程有关系
  • Optional Output Fields: 输出的索引信号和overflow信号,勾选后这些信息会跟频谱数据一起输出
a780568de990a835895702a8aa2b5b43.pngDetail Implementation直接默认跳过。IP核生成后可以看到有很多信号,这些信号代表的意义又是怎么样的。可以在IP核设置界面的左侧Implementation Detail看到下图内容 c6222a7dc2061872999d540151f5ce74.png从图中可以看出:
  • Output Data Width: 输出数据的位宽,当然也是I,Q一路信号的位宽
  • S_AXIS_DATA_TDATA: 这是把时域信号往FFT IP核传输的数据通道,通过图中可以看到,57:32传输Q路信号,25:0传输I路信号。
516d378c98d9eea162f9539c636f0e9f.png
  • S_AXIS_CONFIG_TDATA: 这是对FFT IP核设置参数内容;图中很明显告知,16:1传输SCALE_SCH信号,这个信号决定输出的数据等比例缩小多少倍,具体参数设置可以看: 资料1的内容;0位传输的控制信号,为1时IP核做FFT运算,为0时做IFFT运算。
  • M_AXIS_DATA_TDATA: 这是FFT输出的频谱数据,从图中可以看到,57:32对应的是虚部数据,25:0对应的是实部数据。
f59d6a669f0ae1a63e9869ce7c545a20.png
  • M_AXIS_DATA_TUSER: 这个信号根据图中可知,传输的是输出频谱的索引,有一定的作用。这里输出的具体内容根据上述的FFT IP核设置决定
b178e6484c6ae3eb3e7fac31c655885c.png大概的运算时间这些信号其实都是AXI4-Stream的相关信号
AXI4-Stream协议
之前的文章介绍过AXI4-Lite协议,AXI4-Stream也遵循了TVALID,TREADY的握手机制,全局信号内容等内容,这部分内容可以回顾之前的文章。除了AXI4-Lite的信号,AXI4-Stream还增加了以下信号:
  • TKEEP:指示信号,指明当前数据数据类型,发送数据方控制该信号;为低电平表明对应字节数据是空字节,可以移除;与TSTRB一同发挥作用,两个信号都是可选非必需信号当去掉TKEEP信号,TKEEP视作全高电平当去掉TSTRB信号,TSTRB的值等同TKEEP两个信号都被选择后作用如下图:69c310f1d2c016d05f7ba0e0040ee8bf.png
  • 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核的控制流程如下:
  1. 配置好s_axis_config_tdata, s_axis_config_tready跟s_axis_config_tvalid握手(都为高)后,配置数据传入;
  2. 等待s_axis_data_tready和s_axis_data_tvalid拉高,通过s_axis_data_tdata传入数据至FFT IP核,等到最后一次数据传输,同时拉高s_axis_data_tlast;
  3. 等待m_axis_data_tvalid和m_axis_data_tready拉高,接收m_axis_data_tdata的数据,m_axis_data_tuser的数据是频谱数据的索引,根据这个索引可以知道当前频谱数据的位置;等到m_axis_data_tlast拉高,数据传输结束。
最终结果图: 9738590b5e58c3424ff28a06562ab157.png e808e2babe826a0181ee3d001220d931.png参考资料:
  1. PG109-xfft.pdf
  2. IHI0051A_amba4_axi4_stream_v1_0_protocol_spec.pdf
欢迎点赞留言,一起探讨这令人头秃的电子
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值