前言
當需要對復數求模的時候,用FPGA怎么求呢?怎么開根號?
方法1:先求幅值平方和,再使用cordic IP開根號。(蠢辦法)
方法2:直接用cordic求取模值。
此處只介紹方法2,資源占用更少,更方便。
求模原理如下圖所示。已知(x0,y0),即復信號的實部和虛部,要求模值和角度,即為(r,ɵ)。
流程
(1)既然是用IP,自然首先要看官方的IP說明文檔。
文檔名稱:pg105-cordic
查看文檔得知,需要使用codic的translate模式。
Vector translation rotates the vector (X_IN,Y_IN) around the circle until the Y component equals zero as illustrated in Figure 3-9. The outputs from vector translation are the magnitude, X’, and phase, , of the input vector (X,Y).
由下圖可知,角度最高bit表示符號位,高2bit表示整數,其余位表示小數位。
對下圖中的0.707,也可看做是707(小數點右移3),則結果為750。
(2)例化IP仿真,本次使用18bit的輸入,則IP配置界面可如下圖所示。注意選中縮放補償,否則求模結果被縮放,結果需要乘縮放值Z才是模值結果。注意端口與實際含義的對應關系。
(3)仿真驗證:假定X=32000,Y=32750,則模值輸出為45788。角度為高3bit(最高bit為符號位)為整數部分,其余為小數部分。則實際的角度弧度值為26115/2^15。可以看到與matlab算出的結果是一致的。
以上。