日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

简易DDS信号发生器记录

發(fā)布時(shí)間:2024/3/24 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简易DDS信号发生器记录 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡(jiǎn)易DDS信號(hào)發(fā)生器

學(xué)習(xí)資料:野火 升騰Pro《FPGA Verilog開(kāi)發(fā)實(shí)戰(zhàn)指南——基于Xilinx Artix7》2021.11.16

1. 理論知識(shí)

DDS 是直接數(shù)字式頻率合成器(Direct Digital Synthesizer),也就是信號(hào)發(fā)生器,具有低成本、低功耗、高分辨率和快速轉(zhuǎn)換時(shí)間等優(yōu)點(diǎn)。
DDS 的基本結(jié)構(gòu)主要由相位累加器、相位調(diào)制器、波形數(shù)據(jù)表 ROM、D/A 轉(zhuǎn)換器等四大結(jié)構(gòu)組成,其中較多設(shè)計(jì)還會(huì)在數(shù)模轉(zhuǎn)換器之后增加一個(gè)低通濾波器。
基本結(jié)構(gòu)示意圖:

頻率字輸入F_WORD一般為整數(shù),控制輸出信號(hào)的頻率,數(shù)值越大頻率越高,后面用K表示,其位寬為N。相位字輸入P_WORD(后文用P表示),為整數(shù),數(shù)值大小控制輸出信號(hào)的相位偏移,主要用于相位的信號(hào)調(diào)制。系統(tǒng)時(shí)鐘頻率fclk,輸出信號(hào)頻率fout,兩者的關(guān)系:**fout= K * fclk / (2 ^ N ).**對(duì)于P的計(jì)算,P= 相位偏移量 / (2π / 2 ^ M),M為ROM地址的位寬。

2. 工程設(shè)計(jì)

實(shí)驗(yàn)?zāi)繕?biāo):使用 FPGA 開(kāi)發(fā)板和外部掛載的高速 AD/DA 板卡,設(shè)計(jì)并實(shí)現(xiàn)一個(gè)簡(jiǎn)易 DDS 信號(hào)發(fā)生器,可通過(guò)按鍵控制實(shí)現(xiàn)正弦波、方波、三角波和鋸齒波的波形輸出,頻率相位可調(diào)。
波形文件的產(chǎn)生利用Matlab生成.coe格式文件,代碼如下圖:

  • 整體框架
    D/A模塊由外部掛載AD/DA板卡處理,其余相位累加器、相位調(diào)制器、波形數(shù)據(jù)表 ROM 由FPGA 負(fù)責(zé)。
    整體模塊框圖,四個(gè)按鍵進(jìn)行波形選擇輸出,

  • 按鍵控制模塊
    四個(gè)輸入,需要按鍵消抖,直接套用以前的模塊即可。

  • dds模塊
    內(nèi)部實(shí)例化了波形數(shù)據(jù)表ROM,用于存儲(chǔ)波形信號(hào)。

    其中 fre_add 表示相位累加器輸出值,位寬為 32 位,系統(tǒng)上電后,fre_add 信號(hào)一直執(zhí)行自加操作,每個(gè)時(shí)鐘周期自加參數(shù) FREQ_CTRL,參數(shù)FREQ_CTRL 就是在之前理論知識(shí)部分提到的頻率字輸入 K。
    寄存器變量 rom_addr_reg 表示相位調(diào)制器輸出值,將相位累加器輸出值的高 12 位與相位偏移量 PHASE_CTRL 相加,參數(shù) PHASE_CTRL 就是我們之前提到過(guò)的相位字輸入P。
    ROM 讀地址 rom_addr 是輸入波形數(shù)據(jù)表的 ROM 讀地址,是在 rom_addr_reg 的基礎(chǔ)上計(jì)算得到。我們之前將 4 種信號(hào)波形數(shù)據(jù)按照正弦波、方波、三角波、鋸齒波的順序?qū)懭?ROM。若需要讀取正弦波波形數(shù)據(jù),rom_addr_reg 可直接賦值給 rom_addr;但是要進(jìn)行方波波形數(shù)據(jù)的讀取,rom_addr_reg 需要再加上正弦波存儲(chǔ)單元個(gè)數(shù)才能賦值給
    rom_addr。

  • 頂層模塊
    直接實(shí)例化按鍵和dds模塊即可,輸出的dac_clk是DAC模塊的時(shí)鐘,該信號(hào)由系統(tǒng)時(shí)鐘 sys_clk 取反得到。取反的原因是波形數(shù)據(jù)表 ROM 的讀時(shí)鐘為系統(tǒng)時(shí)鐘 sys_clk,在系統(tǒng)時(shí)鐘上升沿時(shí)對(duì) ROM 進(jìn)行數(shù)據(jù)讀取,而 DA 模塊也使用時(shí)鐘上升沿進(jìn)行數(shù)據(jù)處理,將系統(tǒng)時(shí)鐘 sys_clk 取反得到dac_clk,那么dac_clk 的上升沿剛好采集到波形數(shù)dac_data 的穩(wěn)定數(shù)據(jù)。

代碼詳見(jiàn)資料

總結(jié)

以上是生活随笔為你收集整理的简易DDS信号发生器记录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。