前幾天,臨危受命,幫幾個(gè)初學(xué)者的學(xué)生寫一個(gè)簡易AM信號(hào)的FPGA實(shí)現(xiàn),以幫助他們搭建一個(gè)相對(duì)完整的系統(tǒng),測(cè)試他們的低速ADC,高速DAC,AGC控制等等模塊。本文的FPGA代碼已經(jīng)經(jīng)過上板測(cè)試,由于時(shí)間緊急沒有保存圖片,所以文章只有仿真圖片。
首先,為什么是AM信號(hào)的調(diào)制過程,是因?yàn)樵诙虝r(shí)間情況下,AM信號(hào)的實(shí)現(xiàn)相對(duì)簡單,而且上述提到的幾個(gè)模塊都可以得到使用和驗(yàn)證。因?yàn)镕PGA的價(jià)格因素,做課設(shè)/比賽使用最多的還是Altera的Cyclone系列板。所以,本文使用Quartus II 13.1 作為Verilog代碼綜合實(shí)現(xiàn)工具。AM信號(hào)調(diào)制過程就不做過多介紹了,簡單來說,就是基帶信號(hào)和一個(gè)直流信號(hào)相加,然后與載波相乘。那么,在實(shí)現(xiàn)過程中,做了些許改變,先讓基帶信號(hào)與載波相乘,然后將截位后的信號(hào)與載波相加。如果想要實(shí)現(xiàn)更精細(xì)的AM信號(hào)調(diào)制(變更調(diào)制深度等參數(shù)),可以修改這個(gè)地方的先后順序。AM公式表達(dá)如下:
為直流信號(hào),是基帶信號(hào),是載波信號(hào)。
實(shí)現(xiàn)過程如上圖,頂層文件使用BSF文件,更為直觀。由上圖可以看出,基帶信號(hào)和載波信號(hào)是由NCO(DDS)產(chǎn)生,在上板驗(yàn)證中,低頻部分的NCO被刪去,由低速ADC采樣外部信號(hào)替換這部分的低頻信號(hào)。所以在剛開始搭建模塊時(shí),低速NCO輸出信號(hào)位寬就兼容了低速ADC的16位位寬。根據(jù)資料1可得,Altera提供的NCO是根據(jù)32位輸入信號(hào)phi_inc_i而輸出對(duì)應(yīng)的頻率的正弦波。公式為:
是NCO預(yù)設(shè)輸出正弦波頻率,是輸入時(shí)鐘頻率,是NCO的相位精度。這里的設(shè)置是32位。NCO(DDS)的本質(zhì)是ROM表,ROM表存儲(chǔ)著正弦波的波形數(shù)據(jù),相位精度代表波形數(shù)據(jù)的多少。根據(jù)phi_inc_i累加地址,ROM根據(jù)地址輸出波形數(shù)據(jù),最后數(shù)據(jù)計(jì)算如下。
基帶載波
頻率(MHz)0.110
phi_inc_i8589935858993459
然后讓基帶和載波信號(hào)相乘,使用LPM_MULT IP核,設(shè)置好位寬,數(shù)據(jù)類型設(shè)為“signed”,設(shè)置流水線(增加clock),延遲設(shè)為1,便于后續(xù)通過時(shí)序檢查。相乘輸出信號(hào)位寬為32位,保險(xiǎn)起見我們只截取最高位的符號(hào)位,再截取低位的數(shù)據(jù)。但是經(jīng)過上板測(cè)試和仿真,符號(hào)位實(shí)際上有很多位。當(dāng)然,這部分可以將符號(hào)位進(jìn)行優(yōu)化,或者設(shè)置一個(gè)模塊,根據(jù)輸入的參數(shù)輸出不一樣的截位信號(hào),相當(dāng)于在調(diào)整調(diào)制深度。同時(shí),將載波信號(hào)延遲一個(gè)周期,與乘法器延遲一周期的信號(hào)做好時(shí)序?qū)R,然后經(jīng)過LPM_ADD_SUB IP核的加法運(yùn)算;同樣,LPM_ADD_SUB IP核設(shè)置好輸入信號(hào)位寬,數(shù)據(jù)類型設(shè)為“signed”,設(shè)置流水線,延遲設(shè)為1。最后輸出的信號(hào)就可以經(jīng)過高速DAC輸出。整個(gè)調(diào)制過程就結(jié)束了。仿真結(jié)果:
最后思考,可以在加法器和乘法器增加一個(gè)enable端口,IP核可以增加這個(gè)輸入信號(hào);如果先加再乘,由于直流信號(hào)一般不會(huì)變動(dòng),使能信號(hào)可以等待每次低速ADC或低速NCO數(shù)值更新再拉高一次;乘法器也可以使用使能信號(hào)控制,這樣的話性能可能沒有變化,功耗或許可降低些。此外,使用VCS仿真NCO的nco.vo文件時(shí),一直遇到一個(gè)問題,報(bào)錯(cuò)如下:
大概是說NCO生成的4個(gè)hex文件有問題,但是使用modelsim就沒這個(gè)問題了。
原文標(biāo)題:簡易AM信號(hào)調(diào)制的FPGA實(shí)現(xiàn)過程簡單講解
文章出處:【微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
責(zé)任編輯:haq
-
FPGA
+關(guān)注
關(guān)注
1645文章
22034瀏覽量
618033 -
加速器
+關(guān)注
關(guān)注
2文章
827瀏覽量
39095
原文標(biāo)題:簡易AM信號(hào)調(diào)制的FPGA實(shí)現(xiàn)過程簡單講解
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
FPGA遠(yuǎn)程燒寫bit文件和調(diào)試ILA指南

基于FPGA的AM調(diào)制系統(tǒng)設(shè)計(jì)方案

openocd的.cfg的文件如何寫?
信號(hào)發(fā)生器AM調(diào)制信號(hào)分析

ADS8361 fpga如何實(shí)現(xiàn)
使用FPGA構(gòu)建ADAS系統(tǒng)簡易過程
【AG32開發(fā)板體驗(yàn)連載】簡易邏輯分析儀
如何實(shí)現(xiàn)FPGA的IO輸出脈沖信號(hào)放大?
如何用FPGA實(shí)現(xiàn)一個(gè)通信系統(tǒng)的發(fā)射端接收機(jī)?
用AD630做了一個(gè)簡易的鎖相放大器,如何才算成功的把信號(hào)提取出來?
AM243x/AM64x單芯片伺服電機(jī)控制實(shí)現(xiàn)和基準(zhǔn)測(cè)試

評(píng)論