ベース2バタフライモジュール(fft 8)

1505 ワード

目いっぱいの管脚線は目がくらくらして、特にテストの時、テスト対象の思考がもっと葛藤していることに気づいた.
バタフライモジュールの場合、コントローラから4つの制御カウントを出力する機能があります.butter_flyは、クロックごとに数のセットを受信する.内部に2段キャッシュを設けて入力を交互に格納するとともに,計算結果を元のアドレスでramに格納する.次の図に示します.
cmulの場合、クロックごとに8つのデータが受信され、非同期で結果が得られる.基二のバタフライ型の公式はA=A+B*Wn,A=A-B*Wnであり、小数演算に関し、小数をスケーリングし、64倍に引き上げ、オーバーフローを考慮して、ステップごとに計算した後、128倍後退し、公式は以下の通りである.
assign R=(A_r*64 +B_r*wn1a +B_i*wn1b) /128;
assign I=(A_i*64 +B_r*wn2a +B_i*wn2b) /128;

bfモジュールでは、cmulへのデータ転送を制御する役割を果たし、以下のようにする.
	case(cnt4_buf)
	2'b00:begin TA_r1<=q_r;	TA_i1<=q_i; Twn11<=sin; Twn21<=cos;		A_r<=TA_r2; A_i<=TA_i2; B_r<=TB_r2; B_i<=TB_i2; wn1a<=Twn22; wn1b<=-Twn12; wn2a<=Twn12; wn2b<=Twn22; end
	2'b01:begin TB_r1<=q_r;	TB_i1<=q_i; 							A_r<=TA_r2; A_i<=TA_i2; B_r<=TB_r2; B_i<=TB_i2; wn1a<=-Twn22; wn1b<=Twn12; wn2a<=-Twn12; wn2b<=-Twn22; end	
	2'b10:begin TA_r2<=q_r; TA_i2<=q_i; Twn12<=sin; Twn22<=cos;		A_r<=TA_r1; A_i<=TA_i1; B_r<=TB_r1; B_i<=TB_i1; wn1a<=Twn21; wn1b<=-Twn11; wn2a<=Twn11; wn2b<=Twn21;  end
	2'b11:begin TB_r2<=q_r; TB_i2<=q_i;

 
モジュールをテストし、波形の結果を確認します.
単独のモジュールは実は1つのベース2で、2点fft、q_rは入力データであり、入力が16,8の場合、fft結果は:24,8であるべきである.結果としてRが1/2縮小したのは、オーバーフロー時の退位防止によるものであることが図から分かる.モジュールの正確性を証明します.
 
考え:
1.計算時のシンボルの採用と直接呼び出しlpmモジュールの性能の違い
2.オーバーフローの判定は、最後に実際に入力されたデータに基づいて調整され、実際の使用では、信号が常に最大値でない場合、精度を犠牲にして範囲を変える必要はない.