满眼的管脚线看得眼晕,尤其是在测试的时候,才发现测试对象的思考更纠结。
对于蝶算模块,其功能是由控制器输出4个控制计数,butter_fly在每一个时钟接收一组数。内部设两级缓存交替存储输入,同时计算出结果按原址存到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