要做无线通信,必定会接触到傅里叶变换,要做傅里叶变换肯定会接触到IFFT变换,它将傅里叶变换的乘法和加法次数极大的缩减,而且在xilinx的IP中有关于IFFT的核,直接调用它可以缩短开发流程。
下面开始讲解vivado关于IFFT的IP核运用步骤:
1.要运用IP首先的明白几个参数
1).配置通道参数(s_config_valid/s_config_data/s_config_ready)
s_config_valid:拉高时表示配置参数有效。
s_config_data:配置参数(我们选取run simulatiom啥玩意,所以它只包含(PAD scl_scale FWD_INW PAD cycle前缀),SCL_SCALE表示缩放因子,毕竟你的IFFT经历那么多次乘法,加法,你的位宽的变,所以必须缩小,缩小多少具体情况,具体分析(后面会阐述),另外就是FWD_INW=1;表示FFT变化,=0表示IFFT变化,循环前缀根据你的需要)。
s_config_ready:表示从机做好了数据接收的准备,可以发数据了,只有
s_config_valid和s_config_ready同时有效时,数据才配置成功。
- 数据信息(s_data_valid/s_data_ready/s_data_tdata)
s_data_valid/s_data_ready:与上述内容差不多。
s_data_tdata:输入的数据,位宽由自己确定(低位表示实部,高位表示虚部)。
3.变换后数据输出(m——-乱七八糟)
跟上面差不多
废话不多说了,说一下调试过程,蛋疼。。。
重点1:你的s_config_valid在s_config_ready拉高后的一个时钟周期拉高,你的s_config_data可以从上电就保持有效,谨记s_config_valid只需要拉高一个时钟周期即可,但是这个时钟周期的保证你的配置数据有效的。
重点2:如果你插入了循环前缀,那么你在拉高s_data_valid之后(具体多少个时钟周期,由你输入的IFFT点数决定),你必须拉低循环前缀个数那么多个时钟周期(比