FPGA 數(shù)字信號處理之 FSK 調(diào)制、解調(diào)的實現(xiàn)與仿真基于 verilog (代碼整理后)保姆級

發(fā)過一次,沒注意代碼格式,顯得有點亂,影響小伙伴們閱讀...
沒找到重新編輯的地方,現(xiàn)在重新整理,將代碼放入代碼段格式現(xiàn)在,同時,發(fā)現(xiàn)可能會少圖片(對照前一把,已經(jīng)補了兩張)影響小伙伴復現(xiàn)實驗,故上一篇未刪,又重新發(fā)一次,若發(fā)現(xiàn)閱讀過程中有斷篇感覺時,可參考前一篇。
試驗說明:
筆者復現(xiàn)FSK調(diào)制、解調(diào)的過程中,在網(wǎng)上查了很多很多相關文章,至少在本文之前,沒發(fā)現(xiàn)能在參考一篇博文的情況下能完整復現(xiàn)實驗結果的。總之,全乎的基本沒有。
本筆記(文)的目標是讓入門者或者說小白在參考本文的基礎上,能一步一步完整復現(xiàn)實驗結果,少走彎路,盡力節(jié)省時間,因為時間很寶貴。
另:本實驗只是復現(xiàn)參考博文的結果,有關概念、原理相關知識請參考原文。
主要參考博文鏈接如下:
https://bestfpga.blog.csdn.net/article/details/81166187
實驗目標:
達成和博文中最終仿真結果基本一致,先看一下本次實驗的最終的仿真結果吧!

FSK是利用載波的頻率表示基帶信息,比如在2FSK系統(tǒng)中,采用單頻信號f1表示信息0、單頻信號f2表示信息1。根據(jù)碼元轉換時載波的相位是否連續(xù),分為非連續(xù)相位FSK和連續(xù)相位FSK。–摘自參考博文。
注意:
非連續(xù)相位調(diào)制沒試驗復現(xiàn),只試驗了連續(xù)相位調(diào)制(CPFSK)。
FSK調(diào)制信號生成步驟
簡單說明:
在ISE14.7的環(huán)境下,完成2FSK(CPFSK)的調(diào)制,并進行仿真,系統(tǒng)時鐘32Mhz,碼元速率1Mhz,載波頻率6Mhz,頻移指數(shù)h=3.5,f1=4.25MHz、f2=7.75Mhz
連續(xù)相位調(diào)制時,配置1個DDS產(chǎn)生兩個代表1和0的單頻信號(要調(diào)制–非連續(xù)相位的要產(chǎn)生2個信號)即可,非連續(xù)相位的內(nèi)容具體參考原文。
將DDS的無雜散動態(tài)范圍設置為95dB,對應的位寬為16bits。
有關概念、原理相關知識請參考原文
下面為本次實驗的詳細記錄:
首先:
DDS IP核的配置過程:
ISE14.7新建工程:

注意:器件選擇高端點的,在試驗過程中被坑過,因為器件選的低。
工程建立后,添加DDS IP核:

上圖中,指定IP的名稱和存放路徑

上圖指定了DDS 版本

上圖參數(shù)簡要說明:
DDS的頻率分辨率設置為976.5625Hz,正好對應相位位寬為15Bits
(Fs/2^B
=32MHz/2^15=976.5625Hz)。
因此
f1=4.25MHz對應的頻率控制字為4351(f1/976.5625-1=4351);
f2=7.75MHz對應的頻率控制字為7935(f2/976.5625-1=7935)
本實驗使用連續(xù)相位FSK(CPFSK)只需要使用一個DDS Compiler IP核,比FSK要節(jié)省不少資源。
故省略了參考博文中的----非連續(xù)相位的試驗。
因此,CPFSK配置如下:

注意上圖參數(shù)

生成后到工程內(nèi)找到ipcore_dir目錄,復制文件dds_cpfsk2.v 放入modelsim工程模板的src目錄備用。
此時,也可單獨仿真,看一下FSK調(diào)制的結果,具體仿真步驟可參考后面的說明。
CPFSK (連續(xù)相位FSK)調(diào)制的仿真結果:

FSK調(diào)制部分,也提供了單獨的仿真文件,也詳細見后面的說明。
----------------------------------------------------華麗的分割線---------------------------------------------------------------------------------
FSK解調(diào)部分實驗
首先
要生成濾波器的coe文件供ISE中配置濾波器時調(diào)用。
使用matlab配置、濾波器COE文件步驟如下:
打開matlab2018b
在命令行窗口輸入:fdatool

開始配置帶通濾波器(演示一個,其它的方法和步驟一樣):

簡要說明一下:
帶通濾波器分別篩選兩路ASK信號。
系統(tǒng)時鐘32Mhz,
碼元速率1Mhz,
載波頻率6Mhz,
頻移指數(shù)h=3.5,
f1=4.25Mhz,
f2=7.75MHz。
帶通濾波器通帶可分別選為:
A:(6Mhz-h×1Mhz)–6Mhz。
B:6Mhz–(6MHz+h×1Mhz)。
因此帶通濾波器A的配置如上圖所示。配置完成后,就可以導出coe文件了。
導出coe文件:
第一步:

第二步:見上圖,先選擇左側第三個圖標量化后,即可。
再選擇:上面的菜單欄Targets–>XILINX (.COE) File
保存到指定目錄即可。
B的配置、導出COE文件的方法同A----即上圖,這里省略截圖了。
低通濾波器的配置:

低通濾波器用于提取出基帶信號包絡,截止頻率設置為碼元速率即可。COE文件導出方式如前文描述。
注:
如果在上一步的導出COE界面,點擊紅色箭頭即可返回參數(shù)配置界面。
至此,所有的濾波器系數(shù)經(jīng)過量化后存儲為txt(coe)文件,供后面在FPGA設計中調(diào)用。
全部完成后,生成的COE文件共3個:
bpf1_fir.coe、bpf2_fir.coe、lpf_fir.coe
名字隨意,自己記得清即可。
ISE14.7配置IP核:
新建工程,關鍵步驟如下:
注意下面的器件選擇

添加、配置帶通濾波器其中-1個的步驟:


選擇COE文件,matlab中生成:

輸入采用頻率和系統(tǒng)時鐘:
都是32MHz

輸出位數(shù):32
同時選擇截斷模式


如上圖,之前用的6系列的器件這個紅框+紅圈的地方提示參數(shù)錯誤。應該是6系器件的DSP資源不足導致無法配置。
因此前面說新建工程時要選擇一個高端點的器件。

至此,配置就完成了,點擊“Generate”,生成IP核即可。
bpf2_fir配置方法和步驟一樣(略過)
lpf_fir的配置方法和步驟也一樣(略過)
全部生成后,到ipcore_dir目錄內(nèi),復制文件
bpf1_fir.mif bpf1_fir.mif lpf_fir.mif?該文件放入modelsim工程模板的sim目錄
bpf1_fir.v bpf2_fir.v 、lpf_fir.v?該文件放入modelsim工程模板的src目錄
----------------------------------------------------華麗的分割線---------------------------------------------------------------------------------
開始仿真
modelsim工程結構:

目錄結構說明:
首先是:
run_simulation.bat 腳本文件啟動仿真,內(nèi)容如下:
src目錄內(nèi)---- 存源文件
包括:生成的.v文件,仿真時少的庫文件等。
注意:
此目錄內(nèi),除了自己實現(xiàn)的文件及上面配置時生成的文件,同時,在仿真編譯時,注意看報錯提示,若是缺少文件,自行搜索復制到該目錄內(nèi)即可。
sim目錄內(nèi)— 存激勵文件和2個do文件及1個ini文件
兩個do文件,其中,
wave.do文件內(nèi)容:
compile.do文件內(nèi)容:
Modelsim.ini文件內(nèi)容:(刪了注釋描述,要不太長了)
最后附上調(diào)制、解調(diào)文件和激勵文件如下:
cpfsk_modulate_demodulate.v,該文件放入src目錄內(nèi),文件內(nèi)容:
激勵文件
cpfsk_modulate_demodulate_tb.v,該文件放sim目錄中,內(nèi)容如下:
最終仿真結果:

----------------------------------------------------華麗的分割線---------------------------------------------------------------------------------
附錄:
仿真工程里,還提供了單獨仿真FSK調(diào)制的文件和激勵文件,也可在cpfsk_modulate_demodulate.v中只仿真查看fsk輸出,這種方式具體見cpfsk_modulate_demodulate.v文件中注釋部分描述。
先看單獨的實現(xiàn):
FSK調(diào)制信號的仿真
digital_adds.v和digital_adds_tb.v文件即可
digital_adds.v文件內(nèi)容:
digital_adds_tb.v文件內(nèi)容:
仿真時,注意還要修改2個do文件。
wave.do修改如下:
compile.do修改如下:
另,仿真時可能報類似如下的錯誤:
Module ‘RAMB36E1’ is not defined.
解決辦法:
搜索ISE安裝目錄下同名的.v文件,到modelsim工程模板的src目錄即可。
缺少其他文件之類的(注意看編譯時的錯誤提示信息確定是否缺少文件問題),也可這么操作。
結束語
不夸張的話,這應該是全網(wǎng)最詳細的關于FSK調(diào)制與解調(diào)的筆記了,如果看到這里還沒復現(xiàn)實驗結果,只有兩種可能:
1 沒有仔細看筆記
2 工具和環(huán)境問題
本次實驗環(huán)境和工具說明:
1 win10 專業(yè)版 64bits
2 ISE14.7 或 vivado2018.3
3 Modelsim 2020.4 或10.1a
4 matlab2008b
猜測一下,如果復現(xiàn)實驗的過程真有坑話,也可能是在modelsim編譯、仿真這里出問題,若一語成讖,就不要借鑒文中的方法,老老實實的自行打開modelsim,一步一步的按常規(guī)做法,新建項目,添加文件…等,去完成編譯和仿真查看波形,具體可自行網(wǎng)絡查閱。
能看到末了這的,說明我們有緣分啊,浪費你一秒的時間,給個鼓勵,點關注,下次更新不迷路。