本文介紹如何調(diào)用Xilinx的CORDIC IP核生成某一頻率的正弦波和余弦波。
主要是CORDIC IP核的設(shè)置,下面對(duì)其具體參數(shù)的設(shè)置進(jìn)行了說(shuō)明。
標(biāo)注1:選擇函數(shù)的類(lèi)型,這里選擇sin和cos。
標(biāo)注2:選擇CORDIC的結(jié)構(gòu),是字串行還是并行,這里選擇并行。
標(biāo)注3:選擇輸出流水線(xiàn)類(lèi)型,這里選擇不要流水線(xiàn)。
標(biāo)注1:選擇相位角格式,其中Radians單位為弧度,Scaled Radians單位為多少PI弧度,這里選擇Scaled Radians。
標(biāo)注2:選擇輸入相位角的數(shù)據(jù)位寬,我們選擇16位。
標(biāo)注3:舍位模式,選擇近似值。
對(duì)于相位角的格式這里做具體詳細(xì)說(shuō)明:
當(dāng)相位角設(shè)置為Radians時(shí),相位角的取值范圍為:-PI<=PHASE_IN<=PI;
當(dāng)相位角設(shè)置為Scaled Radians時(shí),相位角的取值范圍為:-I<=PHASE_IN<=1。
數(shù)據(jù)有效值的定義:
相位角:第一位為符號(hào)位,第二、三位為整數(shù)位,其余為小數(shù)位;
X_out:第一位是符號(hào)位,第二位是整數(shù)位,其余為小數(shù)位;
Y_out:第一位是符號(hào)位,第二位是整數(shù)位,其余為小數(shù)位。
對(duì)于有符號(hào)數(shù),整數(shù)部分為二進(jìn)制補(bǔ)碼。
標(biāo)注1:選擇階乘和精度,0表示根據(jù)數(shù)據(jù)來(lái)自動(dòng)選擇。
標(biāo)注2:選擇CORDIC算法的范圍,將輸出值控制在-PI/4~+PI/4之間還是-PI~+PI之間。
標(biāo)注3:選擇輸出,此處選擇RDY來(lái)查看什么時(shí)候輸出數(shù)據(jù)有效。
如果要生成正余弦波,Coarse Rotation 必須選上,讓輸出數(shù)據(jù)是整個(gè)圓平面。
由于我們?cè)O(shè)置的數(shù)據(jù)為16位的Scaled Radians模式,所以PHASE_IN的取值范圍從-1.0到+1.0對(duì)應(yīng)的16進(jìn)制為:
16'he000和16'h2000。假如我們的相位角從0開(kāi)始以16‘h00c0自增,Modelsim仿真結(jié)果如圖4所示:
這是因?yàn)楫?dāng)phase_in的值大于+1.0或小于-1.0時(shí),CORDIC IP核會(huì)當(dāng)作+1和-1計(jì)算,一直保持相同的值。
從上述仿真結(jié)果可以看出,分段出現(xiàn)的波形是完整的,只是沒(méi)有很好的銜接上。對(duì)此我們采用下面的方法使波形銜接。我們選取X_OUT的兩個(gè)波谷做一個(gè)周期,找到兩個(gè)波谷所對(duì)應(yīng)的PHASE_IN,使兩個(gè)波谷之間對(duì)應(yīng)的PHASE_IN值不斷重復(fù),即可得到完美的正弦波。
為了方便查看,我們?cè)黾恿薱nt計(jì)數(shù)器。在第一個(gè)波谷附近我們找到正弦輸出信號(hào)的最值點(diǎn)所對(duì)應(yīng)的相位值。方法如下所示:先在仿真波形上選取一段完整的正弦波,如圖6.1所示。然后,找出第一個(gè)波谷所對(duì)應(yīng)的cnt值,大概在301左右,如圖6.2所示。再將正弦輸出信號(hào)轉(zhuǎn)換為16進(jìn)制有符號(hào)數(shù),在301附近找到最值點(diǎn)-16379,找出此值對(duì)應(yīng)的相位16'helc0。
第二個(gè)波谷所對(duì)應(yīng)的相位值的查找如下圖所示:
第二個(gè)波谷所對(duì)應(yīng)的cnt值大概為389,對(duì)應(yīng)的正弦輸出信號(hào)的最值為:-16384,對(duì)應(yīng)的相位值為:16’h2180。
修改程序中的phase賦值部分,如下所示:
修改程序后,仿真得到的波形,如下圖所示:
下板子測(cè)試得到的波形:
16'h00C0 -> 0000 0000 1100 0000,按照datasheet的phase數(shù)據(jù)格式:000,0 0000 1100 0000,也就是十進(jìn)制的0.0234375。而這個(gè)數(shù)的角度值為:0.0234375 * 180° = 4.21875°,也就是每個(gè)clk步進(jìn)4.21875°。
一個(gè)圓有360°,那么從0°到360°一共步進(jìn)360° / 4.21875° 約等于 85.3次。
我選擇的clk為30.24M,即33ns,也就是85.3 * 33ns輸出一個(gè)完整的正弦余弦波。
所以正弦余弦波的周期為1 /85.3 * 33ns 約等于 0.35Mhz。
在chipscope中將采集到的正余弦信號(hào)數(shù)據(jù)存儲(chǔ)為.txt格式,使用matlab處理數(shù)據(jù)得到的正弦波頻率如下圖所示,接近0.35Mhz:
參考文獻(xiàn):
[1] .
[2] .
評(píng)論