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