vivado cordic IP学习记录
一、QN格式(Q數據格式)
????????XQN格式數據,是一個1bit符號位+X bits整數位+N bits小數位的補碼數據。可表達的數據的范圍是,
????????比如Q15,指的是X=0,N=15的Q格式數據,加上符號位合計16位數據(等同于Q1.15)。
????????又比如1Q15,指的是X=1,N=15的Q格式數據,加上符號位合計17位數據(等同于Q2.15)。
????????Q格式數據也可以用Fix格式數據表示。
????????對于有符號數,表示為Fix(1+X+N)_N,X表示整數位數,N表示小數位數。
????????對于無符號數,表示為uFix(X+N)_N,X表示整數位數,N表示小數位數。
舉例:
????????1Q7格式數據(Q2.7)
????????2Q7格式數據(Q3.7)
?二、CORDIC算法中的Q格式
2.1笛卡爾坐標數據的表示
????????笛卡爾坐標數據使用定點數補碼表示,無視總的數據位寬,整數位固定2位,其余為小數位。使用Q數據格式表達為1QN,小數位N=總數據位寬-2。
????????一般情況下,輸入數據X_IN和Y_IN范圍為[-1,1]。超范圍可能會導致未定義的結果。
????????最大值和最小值表示如下:
????????計算平方根時,若設置為無符號小數,X_IN范圍時[0,2],Q數據格式為1bit整數位,其余是小數位(沒有符號位)
????????若設置為無符號整數X_IN范圍時,Q格式數據位寬全部為整數位。
2.2相位/弧度數據的表示
????????PHASE_IN和PHASE_OUT使用二進制補碼形式的定點數表示,整數位一共3位,其余為小數位。
????????相位數據格式可使用兩種表達形式:Radians和scaled Radians。
????????選用Radians表達形式時,PHASE_IN范圍為[-π,π]。最大值和最小值可以表達如下:
????????選用scaled Radians表達形式時,PHASE_IN范圍為[-1,1]。最大值和最小值可以表達如下:
2.3舉例
????????舉例:旋轉模式下,從坐標(Xin,Yin)旋轉角度Pin,目標坐標的值為(Xout,Yout)。Q 格式數據示例如下:
????????上圖表示的是,從坐標(0.707,0.25)順時針旋轉90°,旋轉到坐標(0.25,-0.707)。
????????舉例:向量模式下,坐標(Xin,Yin)旋轉到x軸上,得到的橫坐標和旋轉的角度值。Q 格式數據表示如下:
??????????上圖表示的是,從坐標(0.707,0.25)旋轉到橫坐標(0.75,0),一共旋轉的弧度是0.336。
三、映射不同數據格式
????????假設輸入數據與輸出數據位寬不一致時,需要進行映射處理。同一個二進制數據,按照不同的XQN格式,其表達的十進制數據是不同的。
????????如果輸出數據寬度比輸入數據寬度小,CORDIC算法輸出的結果減少了小數部分bits數。當數據輸出比輸入數據寬度大,那么增加小數部分的bits數。
平方根數據的映射。
無符號數X_IN:00001000
?UFix8_7:
UFix8_1:
UFix8_0:
平方根X_OUT輸出:00100000,在不同的Q格式下,X_OUT代表的數值:
?UFix8_7:
UFix8_1:
UFix8_0:
CORDIC計算平方根的X_IN的取值范圍是[0,2)。根據上表,我們發現,如果直接用Ufix8_1和Ufix8_1格式計算X_OUT,計算出來的數值明顯錯誤。那么該如何處理呢?
????????我們先計輸入數據范圍在[0,2)的數據為X,輸入數據范圍在[2,∞)為xalt,輸出出數據為Y。
????????我們先計輸入數據X,輸出出數據為Y,。范圍在[0,2)的輸入數據X記為,其平方根即為;范圍在[2,∞)輸入數據X 記為,其平方根記為;
????????當輸入數據取值為,數據格式為Ufix8_7,正常按照CORDIC算法處理得出平方根結果即可。
????????當輸入數據取值為,直接使用CORDIC算法處理得到的數據不正確,需要先對數據進行縮放處理。
????????縮放處理方式:右移A位,變換成Ufix8_7格式(A=m-1)。(實際二進制數值不發生任何變化,僅從意義上更改了Q格式小數點位置而已)
?
?
????????根據上面兩個公式,我們發現,將X按照不同的取值范圍方式進行CORDIC處理,得到的Y值存在的倍數關系。即超過數值2的輸入X_IN,經過CORDIC算法計算平方根時,需要乘上。
再回到剛才的示例:
X_IN:00001000
?UFix8_7:
UFix8_1:
UFix8_0:
X_OUT:00100000
UFix8_7:?
UFix8_1:? ? ?(整數位共7位,因此A=7-1=6)
UFix8_0:????(整數位共7位,因此A=8-1=7)
這里我們需要知道的是,使用CORDIC算法計算[0,2)之間的數與[2,∞]之間的數,計算平方根時有上面描述的縮放處理的區別。
四、CORDIC IP核 IO用戶界面的參數配置
?
1、功能選擇 ????????????????????????????????????????
可選功能包括:
????????rotate :旋轉模式。輸入初始坐標和旋轉角度,輸出目標坐標值
????????Translate:向量模式。輸入初始坐標,將其旋轉到橫坐標軸,輸出旋轉弧度和目標橫坐標。
????????Sin and cos:輸入角度(弧度),輸出cos值和sin值
????????Sinh and cosh:輸入雙曲線角度(弧度),輸出cosh值和sinh值
????????Arctan:輸入初始坐標(x,y),旋轉到橫坐標軸,輸出atan(y/x)
????????Arctanh:輸入初始坐標,沿著雙曲線旋轉到橫坐標軸,輸出atanh(y/x)
????????Square root:輸入一個數值,輸出其平方根值
基本上涵蓋了CORDIC算法所能計算的全部運算。
當然,也可以通過基本的加減乘除運算簡介地實現下面的運算:
2、架構配置
????????并行架構:或者可以稱為流水線架構,每個時鐘可以輸出新的數據(輸入與其對應的輸出相差N個時鐘的延遲,N等于輸出數據寬度)。
????????串行架構:每N個時鐘輸出一個新的數據。(N等于輸出數據寬度)
3、流水線模式
????????NONE:CORDIC 實現時不使用流水線
????????Optimal:CORDIC算法實現時,使用流水線,但是盡可能不多使用查找表資源,相當于自動優化資源和時序。
????????Maximum:每個加減法運算都使用流水線。比較適合資源充裕時序困難的邏輯
4、數據格式
CORDIC算法提供了三種不同的格式表達輸入數據X和Y。
????????有符號小數:該格式是默認的設置,X和Y按照有符號定點數的補碼進行表述,并且整數位寬度為2bits。1位符號位,1位整數位,其余為小數位。
????????無符號小數:X和Y按照無符號定點數表達。1位整數位,其余為小數位。
????????無符號整數:X和Y按照無符號整數表達,僅用于計算平方根的時候。
5、相位格式
兩種相位格式可供選擇:
????????弧度:相位使用定點數補碼表示,整數位為3bits,單位是rad,范圍[-π,π]。比如01100000表示3.0rad
? ? ? ?歸一化弧度:使用定點數補碼表示,整數位寬3bits,單位是π rad,范圍[-1,1]。比如00100000表示1*πrad;又比如11110000表示-0.5*πrad。
6、輸入數據寬度
????????X_IN/Y_IN/PHASE_IN的數據寬度
7、輸出數據寬度
????????X_OUT/Y_OUT/PHASE_OUT的數據寬度
8、取整模式
提供了三種輸出數據的取整模式
????????Truncate:截斷模式,直接舍棄低位
????????Positive infinity:,正方向四舍五入,等效于matlab的floor(x+0.5)
????????Pos Neg infinity:正數正方向四舍五入,負數負方向四舍五入,等效于matlab的round(x)
????????Nearest Even:輸出數據取整為最近的整數,0.5向下取整,1.5向上取證
?
9、迭代次數
設置為0時,迭代次數由IP核自動決定。也可以手動輸入迭代次數。
10、精確度
配置CORDIC IP內部計算時的精確度,當設置為0時,IP核自動決定精確度取值。也可以手動輸入精確度。
11、粗略旋轉
控制CORDIC算法使用的象限,勾選時可以在所有象限中使用;不勾選時只能在第一象限使用。
12、補償方式
講解原理的時候,學習過使用CORDIC算法時,會帶來模長的拉伸,此處可選擇是否乘上補償因子。
????????No scale compensation:不乘補償因子
????????LUT based:基于查找表保存補償因子
????????BRAM:基于BRAM保存補償因子
????????Embedded Multiplier:使用DPS進行計算補償
五、CORDIC IP核的仿真使用
5.1 使用CORDIC IP核計算cos值和sin值
IP核配置截圖
?按照手冊要求、以Q3.13格式輸入Q碼數據,弧度值分別為
0,
π/6,
π/3,
π/2,
2π/3,
π,
-π/6,
-π/3,
-2π/3,
-π
仿真后結果如下:(注意輸出的cos和sin數據為Q2.14格式)
| 輸入角度 | 輸入相位 | 輸入相位 | 理論cos值 | 理論sin值 | CORDIC IP計算的cos值 | CORDIC IP計算的sin值 | ||
| / | / | / | / | / | 有符號Q2.14碼 | 十進制轉換,近似值 | 有符號Q2.14碼 | 十進制轉換,近似值 |
| 0 | 0 | 0.000000 | 1.000000 | 0.000000 | 16'b01_00_0000_0000_0000 | 0 | 16'b11_11_1111_1111_1111 | 0 |
| 30° | pi/6 | 0.523599 | 0.866025 | 0.500000 | 16'b00_11_0111_0110_1100 | 0.86597 | 16'b00_10_0000_0000_0000 | 0.5 |
| 60° | pi/3 | 1.047198 | 0.500000 | 0.866025 | 16'b00_10_0000_0000_0000 | 0.5 | 16'b00_11_0111_0110_1101 | 0.86603 |
| 90° | pi/2 | 1.570796 | 0.000000 | 1.000000 | 16'b11_11_1111_1111_1100 | 0 | 16'b01_00_0000_0000_0000 | 1 |
| 120° | pi*2/3 | 2.094395 | -0.500000 | 0.866025 | 16'b11_01_1111_1111_1111 | -0.5 | 16'b00_11_0111_0110_1100 | 0.86597 |
| 180° | pi | 3.141593 | -1.000000 | 0.000000 | 16'b11_00_0000_0000_0000 | -1 | 16'b00_00_0000_0000_0001 | 0 |
| -30° | -pi/6 | -0.523599 | 0.866025 | -0.500000 | 16'b00_11_0111_0100_1110 | 0.86413 | 16'b11_10_0000_0000_0001 | -0.5 |
| -60° | -pi/3 | -1.047198 | 0.500000 | -0.866025 | 16'b00_10_0000_0000_0001 | 0.5 | 16'b11_00_1000_1001_0011 | -0.86602 |
| -120° | -pi*2/3 | -2.094395 | -0.500000 | -0.866025 | 16'b11_10_0000_0000_0001 | -0.5 | 16'b11_00_1000_1001_0010 | -0.86602 |
| -180° | -pi | -3.141593 | -1.000000 | 0.000000 | 16'b10_11_1111_1111_1111 | -1 | 16'b11_11_1111_1111_1111 | 0 |
?????????根據表格可以看出,經過CORDIC IP核計算出來的結果與理論結果非常相近。
5.2 使用CORDIC IP核計算平方根值
IP核配置截圖
?
按照手冊要求、輸入無符號整數數據,分別為
| 1 |
| 4 |
| 16386 |
| 4096 |
| 16384 |
| 0 |
仿真后結果如下:
| 輸入數值 | 理論的平方根 | CORDIC算法計算的平方根 | ||
| 十六進制 | 十進制 | / | 十六進制 | 十進制 |
| 1 | 1 | 1 | 1 | 1 |
| 4 | 4 | 2 | 2 | 2 |
| 4002 | 16386 | 128.0078123 | 80 | 128 |
| 1000 | 4096 | 64 | 40 | 64 |
| 4000 | 16384 | 128 | 80 | 128 |
| 0 | 0 | 0 | 0 | |
????????根據表格可以看出,經過CORDIC IP核計算出來的結果與理論結果非常相近。
總結
以上是生活随笔為你收集整理的vivado cordic IP学习记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: requestPermissions
- 下一篇: 广东省b级计算机试题及答案,全国计算机等