一边学习控制FFT IP核,一边学习AXI4-Stream协议

描述

FFT IP核的设置

这里做最简单的设置,打开Vivado,点开IP Catalog,找到FFT IP核。设置界面如下:

AXI4总线Configuration 设置

设置的参数意义如下:

  • Numbers of Channels: 通道数,FFT IP核可以设置多个数据通道,进行多路FFT操作
  • Transform Length: 传输的数据长度,就是FFT中的点数,决定输出的频谱分辨率
  • Architecture Configuration:如果Architecture Choice选择Automatically Select,IP核会根据你填的时钟频率和数据吞吐量选择适合的架构

AXI4总线

Implementation

设置的参数意义如下:

  • 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信号,勾选后这些信息会跟频谱数据一起输出

AXI4总线

Detail Implementation

直接默认跳过。

IP核生成后可以看到有很多信号,这些信号代表的意义又是怎么样的。可以在IP核设置界面的左侧Implementation Detail看到下图内容

AXI4总线

从图中可以看出:

  • Output Data Width: 输出数据的位宽,当然也是I,Q一路信号的位宽
  • S_AXIS_DATA_TDATA: 这是把时域信号往FFT IP核传输的数据通道,通过图中可以看到,57:32传输Q路信号,25:0传输I路信号。

AXI4总线

  • 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对应的是实部数据。

AXI4总线

  • M_AXIS_DATA_TUSER: 这个信号根据图中可知,传输的是输出频谱的索引,有一定的作用。这里输出的具体内容根据上述的FFT IP核设置决定

AXI4总线

大概的运算时间

这些信号其实都是AXI4-Stream的相关信号

AXI4-Stream协议

除了AXI4-Lite的信号,AXI4-Stream还增加了以下信号:

  • TKEEP:指示信号,指明当前数据数据类型,发送数据方控制该信号;为低电平表明对应字节数据是空字节,可以移除;与TSTRB一同发挥作用,两个信号都是可选非必需信号
    当去掉TKEEP信号,TKEEP视作全高电平
    当去掉TSTRB信号,TSTRB的值等同TKEEP
    两个信号都被选择后作用如下图:
    AXI4总线
  • 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拉高,数据传输结束。

最终结果图:

AXI4总线

AXI4总线

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分