📄 fft_statemachine.vhd
字号:
type array_real IS array (0 to 63 ) of integer range 0 to 65535 ;------存储进入FFT 模块数据,其位位宽16位,
----也可以用来做蝶形运算中间变量
type array_imag IS array (0 to 63 ) of integer range 0 to 65535;------存储进入FFT 模块数据,其位位宽16位,
type states is (trans, butterfly1,butterfly2,butterfly3,butterfly4,butterfly5,butterfly6,send ,waiting);
signal state: states;
---------------------for receive data -----------------------------------------
signal array_real_temp : array_real;--临时存储数据实部 ---蝶形
signal real_all_zhengfu:std_logic_vector(0 to 63);---临时存储数据实部正负(1为正) ---运算
signal array_imag_temp : array_imag;--临时存储数据虚部 ---数据
signal imag_all_zhengfu:std_logic_vector(0 to 63);---临时存储数据虚部正负(1为正) ---交换
-----------------------for temp data -------------------------------------------------------
signal array_real_temp1 : array_real;--临时存储数据实部 ---蝶形
signal real_all_zhengfu1:std_logic_vector(0 to 63);---临时存储数据实部正负(1为正) ---运算
signal array_imag_temp1 : array_imag;--临时存储数据虚部 ---数据
signal imag_all_zhengfu1:std_logic_vector(0 to 63);---临时存储数据虚部正负(1为正) ---交换
signal array_real_temp2 : array_real;--临时存储数据实部 ---蝶形
signal real_all_zhengfu2:std_logic_vector(0 to 63);---临时存储数据实部正负(1为正) ---运算
signal array_imag_temp2 : array_imag;--临时存储数据虚部 ---数据
signal imag_all_zhengfu2:std_logic_vector(0 to 63);---临时存储数据虚部正负(1为正) ---交换
signal store_finish: std_logic;
BEGIN
PROCESS (clk_tongbu, start)
variable count_i: integer range 0 to 63;
variable count_j: integer range 0 to 63;------计算标记收满64个数后开始后续处理
BEGIN
IF start = '0' THEN
--for shuru in 0 to 63 loop
-- array_real_temp1(shuru) <= 0;
-- array_imag_temp1(shuru)<= 0;
-- array_real_temp2(shuru) <= 0;
-- array_imag_temp2(shuru)<= 0;
--end loop;
-- state<=recerve;
count_j:=0;--------未开始收数据,数据记录清零
--count_i:=0;
store_finish<='0';
ELSIF (clk_tongbu'EVENT AND clk_tongbu = '1') THEN
array_real_temp(count_j)<=data_in_real;
array_imag_temp(count_j)<=data_in_imag;
real_all_zhengfu(count_j)<=data_in_real_zhengfu;
imag_all_zhengfu(count_j)<=data_in_imag_zhengfu;
if count_j=50 then
store_finish<='0';----此信号 不但表征了fft变换情况,而且当它跳变为1时,
---将启动输出,精度为10位的变换后数据
-----在count_j=63时打高,10个时钟后打底,传输数据要用高速时钟
else
null;
end if ;
if count_j=63 then
store_finish<='1';
else
null;
end if;
count_j:=count_j+1;
end if;
end process;
process(clk_high,store_finish)
variable count_i: integer range 0 to 63;
begin
if (store_finish='0')then
data_out_real<=0;
data_out_real_zhengfu<='0';
data_out_imag<=0;
data_out_imag_zhengfu<='0';
fft_finish<='0';
state<=trans;
elsif (clk_high'event and clk_high='1')then
case state is
when trans =>
array_real_temp1<=array_real_temp;
real_all_zhengfu1<=real_all_zhengfu;
array_imag_temp1<=array_imag_temp;
imag_all_zhengfu1<=imag_all_zhengfu;
state<=butterfly1;
when butterfly1 =>
diexingyunsuan(array_real_temp1(0),real_all_zhengfu1(0),array_imag_temp1(0),imag_all_zhengfu1(0),
array_real_temp1(32),real_all_zhengfu1(32),array_imag_temp1(32),imag_all_zhengfu1(32),
1024,'1',0,'1',
array_real_temp2(0),real_all_zhengfu2(0),array_imag_temp2(0),imag_all_zhengfu2(0),
array_real_temp2(1),real_all_zhengfu2(1),array_imag_temp2(1),imag_all_zhengfu2(1));
diexingyunsuan (array_real_temp1(16),real_all_zhengfu1(16),array_imag_temp1(16),imag_all_zhengfu1(16),
array_real_temp1(48),real_all_zhengfu1(48),array_imag_temp1(48),imag_all_zhengfu1(48),
1024,'1',0,'1',
array_real_temp2(2),real_all_zhengfu2(2),array_imag_temp2(2),imag_all_zhengfu2(2),
array_real_temp2(3),real_all_zhengfu2(3),array_imag_temp2(3),imag_all_zhengfu2(3));
diexingyunsuan (array_real_temp1(8),real_all_zhengfu1(8),array_imag_temp1(8),imag_all_zhengfu1(8),
array_real_temp1(40),real_all_zhengfu1(40),array_imag_temp1(40),imag_all_zhengfu1(40),
1024,'1',0,'1',
array_real_temp2(4),real_all_zhengfu2(4),array_imag_temp2(4),imag_all_zhengfu2(4),
array_real_temp2(5),real_all_zhengfu2(5),array_imag_temp2(5),imag_all_zhengfu2(5));
diexingyunsuan (array_real_temp1(24),real_all_zhengfu1(24),array_imag_temp1(24),imag_all_zhengfu1(24),
array_real_temp1(56),real_all_zhengfu1(56),array_imag_temp1(56),imag_all_zhengfu1(56),
1024,'1',0,'1',
array_real_temp2(6),real_all_zhengfu2(6),array_imag_temp2(6),imag_all_zhengfu2(6),
array_real_temp2(7),real_all_zhengfu2(7),array_imag_temp2(7),imag_all_zhengfu2(7));
diexingyunsuan (array_real_temp1(4),real_all_zhengfu1(4),array_imag_temp1(4),imag_all_zhengfu1(4),
array_real_temp1(36),real_all_zhengfu1(36),array_imag_temp1(36),imag_all_zhengfu1(36),
1024,'1',0,'1',
array_real_temp2(8),real_all_zhengfu2(8),array_imag_temp2(8),imag_all_zhengfu2(8),
array_real_temp2(9),real_all_zhengfu2(9),array_imag_temp2(9),imag_all_zhengfu2(9));
diexingyunsuan (array_real_temp1(20),real_all_zhengfu1(20),array_imag_temp1(20),imag_all_zhengfu1(20),
array_real_temp1(52),real_all_zhengfu1(52),array_imag_temp1(52),imag_all_zhengfu1(52),
1024,'1',0,'1',
array_real_temp2(10),real_all_zhengfu2(10),array_imag_temp2(10),imag_all_zhengfu2(10),
array_real_temp2(11),real_all_zhengfu2(11),array_imag_temp2(11),imag_all_zhengfu2(11));
diexingyunsuan (array_real_temp1(12),real_all_zhengfu1(12),array_imag_temp1(12),imag_all_zhengfu1(12),
array_real_temp1(44),real_all_zhengfu1(44),array_imag_temp1(44),imag_all_zhengfu1(44),
1024,'1',0,'1',
array_real_temp2(12),real_all_zhengfu2(12),array_imag_temp2(12),imag_all_zhengfu2(12),
array_real_temp2(13),real_all_zhengfu2(13),array_imag_temp2(13),imag_all_zhengfu2(13));
diexingyunsuan (array_real_temp1(28),real_all_zhengfu1(28),array_imag_temp1(28),imag_all_zhengfu1(28),
array_real_temp1(60),real_all_zhengfu1(60),array_imag_temp1(60),imag_all_zhengfu1(60),
1024,'1',0,'1',
array_real_temp2(14),real_all_zhengfu2(14),array_imag_temp2(14),imag_all_zhengfu2(14),
array_real_temp2(15),real_all_zhengfu2(15),array_imag_temp2(15),imag_all_zhengfu2(15));
diexingyunsuan (array_real_temp1(2),real_all_zhengfu1(2),array_imag_temp1(2),imag_all_zhengfu1(2),
array_real_temp1(34),real_all_zhengfu1(34),array_imag_temp1(34),imag_all_zhengfu1(34),
1024,'1',0,'1',
array_real_temp2(16),real_all_zhengfu2(16),array_imag_temp2(16),imag_all_zhengfu2(16),
array_real_temp2(17),real_all_zhengfu2(17),array_imag_temp2(17),imag_all_zhengfu2(17));
diexingyunsuan (array_real_temp1(18),real_all_zhengfu1(18),array_imag_temp1(18),imag_all_zhengfu1(18),
array_real_temp1(50),real_all_zhengfu1(50),array_imag_temp1(50),imag_all_zhengfu1(50),
1024,'1',0,'1',
array_real_temp2(18),real_all_zhengfu2(18),array_imag_temp2(18),imag_all_zhengfu2(18),
array_real_temp2(19),real_all_zhengfu2(19),array_imag_temp2(19),imag_all_zhengfu2(19));
diexingyunsuan (array_real_temp1(10),real_all_zhengfu1(10),array_imag_temp1(10),imag_all_zhengfu1(10),
array_real_temp1(42),real_all_zhengfu1(42),array_imag_temp1(42),imag_all_zhengfu1(42),
1024,'1',0,'1',
array_real_temp2(20),real_all_zhengfu2(20),array_imag_temp2(20),imag_all_zhengfu2(20),
array_real_temp2(21),real_all_zhengfu2(21),array_imag_temp2(21),imag_all_zhengfu2(21));
diexingyunsuan (array_real_temp1(26),real_all_zhengfu1(26),array_imag_temp1(26),imag_all_zhengfu1(26),
array_real_temp1(58),real_all_zhengfu1(58),array_imag_temp1(58),imag_all_zhengfu1(58),
1024,'1',0,'1',
array_real_temp2(22),real_all_zhengfu2(22),array_imag_temp2(22),imag_all_zhengfu2(22),
array_real_temp2(23),real_all_zhengfu2(23),array_imag_temp2(23),imag_all_zhengfu2(23));
diexingyunsuan (array_real_temp1(6),real_all_zhengfu1(6),array_imag_temp1(6),imag_all_zhengfu1(6),
array_real_temp1(38),real_all_zhengfu1(38),array_imag_temp1(38),imag_all_zhengfu1(38),
1024,'1',0,'1',
array_real_temp2(24),real_all_zhengfu2(24),array_imag_temp2(24),imag_all_zhengfu2(24),
array_real_temp2(25),real_all_zhengfu2(25),array_imag_temp2(25),imag_all_zhengfu2(25));
diexingyunsuan (array_real_temp1(22),real_all_zhengfu1(22),array_imag_temp1(22),imag_all_zhengfu1(22),
array_real_temp1(54),real_all_zhengfu1(54),array_imag_temp1(54),imag_all_zhengfu1(54),
1024,'1',0,'1',
array_real_temp2(26),real_all_zhengfu2(26),array_imag_temp2(26),imag_all_zhengfu2(26),
array_real_temp2(27),real_all_zhengfu2(27),array_imag_temp2(27),imag_all_zhengfu2(27));
diexingyunsuan (array_real_temp1(14),real_all_zhengfu1(14),array_imag_temp1(14),imag_all_zhengfu1(14),
array_real_temp1(46),real_all_zhengfu1(46),array_imag_temp1(46),imag_all_zhengfu1(46),
1024,'1',0,'1',
array_real_temp2(28),real_all_zhengfu2(28),array_imag_temp2(28),imag_all_zhengfu2(28),
array_real_temp2(29),real_all_zhengfu2(29),array_imag_temp2(29),imag_all_zhengfu2(29));
diexingyunsuan (array_real_temp1(30),real_all_zhengfu1(30),array_imag_temp1(30),imag_all_zhengfu1(30),
array_real_temp1(62),real_all_zhengfu1(62),array_imag_temp1(62),imag_all_zhengfu1(62),
1024,'1',0,'1',
array_real_temp2(30),real_all_zhengfu2(30),array_imag_temp2(30),imag_all_zhengfu2(30),
array_real_temp2(31),real_all_zhengfu2(31),array_imag_temp2(31),imag_all_zhengfu2(31));
diexingyunsuan (array_real_temp1(1),real_all_zhengfu1(1),array_imag_temp1(1),imag_all_zhengfu1(1),
array_real_temp1(33),real_all_zhengfu1(33),array_imag_temp1(33),imag_all_zhengfu1(33),
1024,'1',0,'1',
array_real_temp2(32),real_all_zhengfu2(32),array_imag_temp2(32),imag_all_zhengfu2(32),
array_real_temp2(33),real_all_zhengfu2(33),array_imag_temp2(33),imag_all_zhengfu2(33));
diexingyunsuan (array_real_temp1(17),real_all_zhengfu1(17),array_imag_temp1(17),imag_all_zhengfu1(17),
array_real_temp1(49),real_all_zhengfu1(49),array_imag_temp1(49),imag_all_zhengfu1(49),
1024,'1',0,'1',
array_real_temp2(34),real_all_zhengfu2(34),array_imag_temp2(34),imag_all_zhengfu2(34),
array_real_temp2(35),real_all_zhengfu2(35),array_imag_temp2(35),imag_all_zhengfu2(35));
diexingyunsuan (array_real_temp1(9),real_all_zhengfu1(9),array_imag_temp1(9),imag_all_zhengfu1(9),
array_real_temp1(41),real_all_zhengfu1(41),array_imag_temp1(41),imag_all_zhengfu1(41),
1024,'1',0,'1',
array_real_temp2(36),real_all_zhengfu2(36),array_imag_temp2(36),imag_all_zhengfu2(36),
array_real_temp2(37),real_all_zhengfu2(37),array_imag_temp2(37),imag_all_zhengfu2(37));
diexingyunsuan (array_real_temp1(25),real_all_zhengfu1(25),array_imag_temp1(25),imag_all_zhengfu1(25),
array_real_temp1(57),real_all_zhengfu1(57),array_imag_temp1(57),imag_all_zhengfu1(57),
1024,'1',0,'1',
array_real_temp2(38),real_all_zhengfu2(38),array_imag_temp2(38),imag_all_zhengfu2(38),
array_real_temp2(39),real_all_zhengfu2(39),array_imag_temp2(39),imag_all_zhengfu2(39));
diexingyunsuan (array_real_temp1(5),real_all_zhengfu1(5),array_imag_temp1(5),imag_all_zhengfu1(5),
array_real_temp1(37),real_all_zhengfu1(37),array_imag_temp1(37),imag_all_zhengfu1(37),
1024,'1',0,'1',
array_real_temp2(40),real_all_zhengfu2(40),array_imag_temp2(40),imag_all_zhengfu2(40),
array_real_temp2(41),real_all_zhengfu2(41),array_imag_temp2(41),imag_all_zhengfu2(41));
diexingyunsuan (array_real_temp1(21),real_all_zhengfu1(21),array_imag_temp1(21),imag_all_zhengfu1(21),
array_real_temp1(53),real_all_zhengfu1(53),array_imag_temp1(53),imag_all_zhengfu1(53),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -