门户站模板用yii框架做的网站如何搭建
门户站模板,用yii框架做的网站如何搭建,wordpress 4.8.1,汇通网做期货的网站做期货的网站FFT IP RTL实现#xff0c;采用Cordic实现蝶形运算#xff0c;不需要复杂的乘法运算#xff0c;只需要移位和加法运算#xff0c;采用radix-2/4的结构#xff0c;可以配置为512/1K/2K/4K点的FFT/IFFT计算。
资料包含#xff1a;RTL代码/TestBench/C-Code最近在研究FFT always (posedge clk or negedge rst_n) begin if (!rst_n) begin y1 16b0; y2 16b0; end else begin // 用移位和加法模拟乘法 y1 x1 x2; y2 x1 - x2; end end endmodule代码分析这段代码定义了一个名为cordicbutterfly的模块它有两个输入x1和x2以及两个输出y1和y2。在时钟上升沿或者复位信号有效时模块会进行相应的操作。当复位信号rstn为低电平时输出y1和y2会被清零。而在正常工作时y1是x1和x2的和y2是x1和x2的差。这里就体现了Cordic算法只需要移位和加法的特点代码里的加法操作就是蝶形运算的核心。TestBench代码片段为了验证RTL代码的正确性我们需要写一个TestBench。下面是一个简单的TestBench示例timescale 1ns / 1ps module tb_cordic_butterfly; reg clk; reg rst_n; reg [15:0] x1; reg [15:0] x2; wire [15:0] y1; wire [15:0] y2; cordic_butterfly uut ( .clk(clk), .rst_n(rst_n), .x1(x1), .x2(x2), .y1(y1), .y2(y2) ); initial begin clk 0; rst_n 0; x1 16d10; x2 16d5; #10; rst_n 1; #100; $finish; end always #5 clk ~clk; endmodule代码分析这个TestBench模块创建了一个时钟信号clk、复位信号rstn以及输入信号x1和x2。它实例化了cordicbutterfly模块并给输入信号赋了初始值。在初始块里先将复位信号拉低经过一段时间后再拉高模拟复位过程。同时用always块生成了一个周期为10ns的时钟信号。通过这个TestBench我们可以观察y1和y2的输出是否符合预期。C - Code示例最后再看看C代码C代码可以用来进行算法的验证和模拟#include stdio.h void cordic_butterfly(int x1, int x2, int *y1, int *y2) { *y1 x1 x2; *y2 x1 - x2; } int main() { int x1 10; int x2 5; int y1, y2; cordic_butterfly(x1, x2, y1, y2); printf(y1 %d, y2 %d\n, y1, y2); return 0; }代码分析这段C代码定义了一个cordicbutterfly函数它接收两个输入参数x1和x2并通过指针返回两个输出y1和y2。在main函数里给x1和x2赋了值调用cordicbutterfly函数进行计算最后打印出结果。通过C代码我们可以方便地验证算法的逻辑是否正确。FFT IP RTL实现采用Cordic实现蝶形运算不需要复杂的乘法运算只需要移位和加法运算采用radix-2/4的结构可以配置为512/1K/2K/4K点的FFT/IFFT计算。 资料包含RTL代码/TestBench/C-Code通过以上的RTL代码、TestBench和C代码我们就完成了一个简单的基于Cordic的FFT IP RTL实现。这种实现方法不仅简单易懂而且在硬件资源的利用上也非常高效。大家有兴趣的话可以自己动手试试说不定会有更多的发现呢