CORDIC IP教程:創(chuàng)建一個(gè)NCO的正弦余弦生成
學(xué)習(xí)如何在Vivado中使用CORDIC IP實(shí)現(xiàn)數(shù)控振蕩器(NCO) !
本教程將引導(dǎo)您在FPGA上創(chuàng)建數(shù)字正弦和余弦波發(fā)生器。
你將學(xué)習(xí):
?NCO組件如何協(xié)同工作-從頻率控制字(FCW)到相位累加器和CORDIC IP
?在Vivado中逐步實(shí)現(xiàn),包括VHDL模塊集成
?使用ILA的實(shí)用仿真和調(diào)試技術(shù)
?在ZCU104板上的真實(shí)硬件實(shí)現(xiàn)
?提示提取正弦/余弦值和控制波的頻率
設(shè)計(jì)框圖
這個(gè)框圖代表了一個(gè)數(shù)控振蕩器(NCO),它被用來產(chǎn)生一個(gè)頻率可變的數(shù)字正弦波。NCO的主要組成部分是:頻率控制字(FCW)、相位累加器和CORDIC IP。
Vivado.png中CORDIC NCO的框圖
?頻率控制字(FCW - N位):
?FCW是控制產(chǎn)生的正弦波頻率的輸入值。
?為了增加正弦波的頻率,增加FCW。對(duì)于較慢的正弦波,減小FCW。
?相位累加器:
?相位累加器是NCO的核心。它通過在每個(gè)時(shí)鐘周期將FCW添加到其當(dāng)前值來累積相位。
?相位累加器的輸出表示正弦波的當(dāng)前相位。
?該相位值持續(xù)增加,當(dāng)達(dá)到π時(shí),累加器將其重置為?π。
相位累加器輸出增加到π,然后休息到-π。鋸齒波的斜率取決于fw
?相位累加器產(chǎn)生一個(gè)相位斜坡信號(hào),其值范圍從?π到π。該階段的階躍增量由FCW決定。
CORDIC塊:
CORDIC塊將輸入相位轉(zhuǎn)換為相應(yīng)的正弦和余弦值。
Vivado設(shè)計(jì)
具有CORDIC IP的NCO在Vivado中的框圖
相位累加器和FCW塊被實(shí)現(xiàn)為VHDL模塊,您可以輕松地從GitHub下載它們并將它們添加到您的設(shè)計(jì)中。
Vivado中的CORDIC塊生成32位輸出,其中上16位表示正弦值,下16位表示余弦值。為了分別訪問這些值,使用兩個(gè)片來提取各自的部分。
Vivado中CORDIC IP的32位輸出:16位數(shù)值較高的表示正弦值。
將VDHL代碼作為模塊添加到您的設(shè)計(jì)中
從GitHub存儲(chǔ)庫下載這兩個(gè)VHDL文件,并將它們作為新源添加到項(xiàng)目中。接下來,右鍵單擊塊設(shè)計(jì)并將FCW和相位累加器作為模塊添加到您的設(shè)計(jì)中。
在Vivado塊設(shè)計(jì)中添加模塊選項(xiàng)
將CORDIC IP添加到您的塊設(shè)計(jì)中
從IP目錄中,向設(shè)計(jì)中添加CORDIC IP塊。修改CORDIC輸出功能以生成正弦和余弦值。
在Vivado中設(shè)置CORDIC IP以生成正弦和余弦值
添加片
此外,在設(shè)計(jì)中包括兩個(gè)切片:
?第一個(gè)切片提取31到16位作為正弦輸出。
第一個(gè)切片從CORDIC IP輸出中提取正弦值
?第二個(gè)切片提取15到0位作為余弦輸出。
第二切片提取余弦值從CORDIC IP輸出
在你的設(shè)計(jì)中添加模擬時(shí)鐘
要運(yùn)行模擬,只需添加一個(gè)時(shí)鐘信號(hào)即可。
在所有模塊和IP塊就位后,正確連接它們。在設(shè)計(jì)中加入一些端口,使仿真結(jié)果的觀察更加容易。
完整的框圖CORDIC IP模擬在Vivado
添加頂級(jí)HDL包裝器并運(yùn)行仿真
最后,創(chuàng)建一個(gè)頂級(jí)包裝器并運(yùn)行模擬。
仿真結(jié)果
仿真結(jié)果驗(yàn)證了本文方法的有效性。FCW值越大,相位變化越快,產(chǎn)生頻率越高的正弦波。相反,F(xiàn)CW值越小,相位變化越平滑,產(chǎn)生頻率越低的正弦波。
我們?cè)贆z查一下正弦和余弦波的過零點(diǎn)。我們可以觀察到兩條曲線之間有90度的相位差。另外,請(qǐng)注意,CORDIC塊具有內(nèi)部處理延遲,這會(huì)導(dǎo)致相位輸入的過零點(diǎn)與生成的波形之間的相位偏移。
CORDIC NCO在Vivado中的仿真結(jié)果
Vivado的合成和實(shí)現(xiàn)。
FCW和相位發(fā)生器模塊是完全可合成的,因此不需要修改它們。但是,您必須為設(shè)計(jì)提供時(shí)鐘源。您可以使用任何時(shí)鐘源,例如來自ZYNQ IP塊的PS-PL時(shí)鐘或使用時(shí)鐘向?qū)傻耐獠繒r(shí)鐘。
本文編譯自hackster.io