⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fft_statemachine.vhd

📁 FFT程序
💻 VHD
📖 第 1 页 / 共 4 页
字号:
	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 + -