0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Verilog實(shí)現(xiàn)DDS正弦波發(fā)生器

ZYNQ ? 來(lái)源:ZYNQ ? 2023-12-22 09:48 ? 次閱讀

DDS簡(jiǎn)介:

DDS 同 DSP數(shù)字信號(hào)處理)一樣,是一項(xiàng)關(guān)鍵的數(shù)字化技術(shù)。DDS 是直接數(shù)字式頻率合成器(Direct Digital Synthesizer)的英文縮寫。與傳統(tǒng)的頻率合成器相比,DDS 具有低成本、低功耗、高分辨率和快速轉(zhuǎn)換時(shí)間等優(yōu)點(diǎn),廣泛使用在電信與電子儀器領(lǐng)域,是實(shí)現(xiàn)設(shè)備全數(shù)字化的一個(gè)關(guān)鍵技術(shù)。

DDS 芯片的功能主要包括頻率控制寄存器、高速相位累加器和正弦計(jì)算器三個(gè)部分。頻率控制寄存器可以串行或并行的方式裝載并寄存用戶輸入的頻率控制碼;而相位累加器根據(jù)頻率控制碼在每個(gè)時(shí)鐘周期內(nèi)進(jìn)行相位累加,得到一個(gè)相位值;正弦計(jì)算器則對(duì)該相位值計(jì)算數(shù)字化正弦波幅度(芯片一般通過(guò)查表得到)。

DDS 芯片輸出的一般是數(shù)字化的正弦波,因此還需經(jīng)過(guò)高速 D/A 轉(zhuǎn)換器和低通濾波器才能得到一個(gè)可用的模擬頻率信號(hào)。關(guān)于想了解更多的 DDS 的相關(guān)知識(shí), 大家可以到百度直接搜索。

下面主要來(lái)給大家介紹FPGA 程序的設(shè)計(jì), DDS IP 的配置和調(diào)試。

編寫 dds_wave 的 verilog 程序

`timescale1ns/1ps

//////////////////////////////////////////////////////////////////////////////////

//Company:

//Engineer:

//

//CreateDate:103307/17/2018

//DesignName:

//ModuleName:dds_wave

//ProjectName:

//TargetDevices:

//Toolversions:

//Description:

//

//Dependencies:

//

//Revision:

//Revision0.01-FileCreated

//AdditionalComments:

//

//////////////////////////////////////////////////////////////////////////////////

moduledds_wave(clk,key1,data,da_clk

);

inputclk,key1;

output[7:0]data;

outputda_clk;



reg[15:0]key1_cout;

reg[7:0]data_o;

regdds_we;

reg[28:0]dds_data;

reg[3:0]dds_freq=0;

regdds_we_req;



wire[7:0]sine;



assignsine_reg=sine[6:0];

assignda_clk=clk;

assigndata=data_o;



//有符號(hào)數(shù)轉(zhuǎn)化為無(wú)符號(hào)輸出到DA

always@(posedgeclk)

begin

if(sine[7]==1'b1)

data_o<=?sine?-?128;

?else

??data_o?<=?sine?+?128;

end

//控制DDS輸出不同

always?@(negedge?clk)

begin

?dds_we?<=?dds_we_req;

?case(dds_freq)

?4'd0:

??dds_data?<=?29'd107;??//10Hz:(dds_data*2^29/50*1000000)

?4'd1:

??dds_data?<=?29'd1074;?//100Hz:(dds_data*2^29/50*1000000)

?4'd2:

??dds_data?<=?29'd10737;?//1kHz:(dds_data*2^29/50*1000000)

?4'd3:

??dds_data?<=?29'd53687;?//5kHz:(dds_data*2^29/50*1000000)

?4'd4:

??dds_data?<=?29'd107374;?//10kHz:(dds_data*2^29/50*1000000)

?4'd5:

??dds_data?<=?29'd536871;?//50kHz:(dds_data*2^29/50*1000000)

?4'd6:

??dds_data?<=?29'd1073742;?//100Hz:(dds_data*2^29/50*1000000)

?4'd7:

??dds_data?<=?29'd5368709;?//500Hz:(dds_data*2^29/50*1000000)

?4'd8:

??dds_data?<=?29'd10737418;?//1mHz:(dds_data*2^29/50*1000000)??

?4'd9:

??dds_data?<=?29'd21474836;?//2mHz:(dds_data*2^29/50*1000000)

?4'd10:

??dds_data?<=?29'd32212255;?//3mHz:(dds_data*2^29/50*1000000)

?4'd11:

??dds_data?<=?29'd42949672;?//4mHz:(dds_data*2^29/50*1000000)

?4'd12:

??dds_data?<=?29'd53687091;?//5mHz:(dds_data*2^29/50*1000000)

?4'd13:

??dds_data?<=?29'd64424509;?//6mHz:(dds_data*2^29/50*1000000)

?4'd14:

??dds_data?<=?29'd75161928;?//7mHz:(dds_data*2^29/50*1000000)

?4'd15:

??dds_data?<=?29'd85899346;?//8mHz:(dds_data*2^29/50*1000000)

?default:

??dds_data?<=?29'd107;?//?1kHz:(dds_data*2^29/50*1000000)

?endcase

end

?

//按鈕處理程序,改變DDS的輸出頻率

always?@(posedge?clk)

begin

?if(key1?==?1'b0)

??key1_cout?<=?0;

?else?if((key1?==?1'b1)?&?(key1_cout?<=?16'hc350))

??key1_cout?<=?key1_cout?+?1'b1;

?

?if(key1_cout?==?16'hc349)

?begin

??dds_freq?<=dds_freq?+?1'b1;

??dds_we_req?<=?1'b1;

?end

?else?begin

??dds_freq?<=dds_freq;

??dds_we_req?<=?1'b0;

?end

end?

?

//DDS?IP產(chǎn)生sin/cos波形

sin_cos?sin_cos_inst(

?.clk(clk),

?.we(dds_we),

?.data(dds_data),

?.cosine(cosine),

?.sine(sine),

?.phase_out()

);

?

endmodule

程序通過(guò)檢測(cè)開(kāi)發(fā)板上按鍵 KEY1 ,如果按鍵 KEY1 每按下一次,寄存器 dds_freq 的值就會(huì)加 1, 程序就會(huì)對(duì) DDS IP 寫入一個(gè) data 數(shù)據(jù)來(lái)改變相位的增加量,從而改變輸出波形的頻率。程序中設(shè)置了 16 種相位的增加量,所以可以讓 DDS 產(chǎn)生 16 個(gè)不同頻率的正弦波。在本實(shí)驗(yàn)的 DDS IP 的配置中,相位增加的數(shù)據(jù)寬度為 29 位,所以最小的頻率輸出為50Mhz/2^29, 約 0.093Hz。如果想讓 DDS 輸出 1Khz 的波形,就需要寫入相位增加值10737 。相位增加值和頻率的計(jì)算公式如下:

相位增加值=( fhz * 2^29 )/( 50 * 1000000)

仿真圖如下:

6b4e7ca2-a05f-11ee-8b88-92fbcf53809c.png

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 合成器
    +關(guān)注

    關(guān)注

    0

    文章

    273

    瀏覽量

    25360
  • 正弦波發(fā)生器
    +關(guān)注

    關(guān)注

    1

    文章

    26

    瀏覽量

    15661
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

    110100
  • DDS
    DDS
    +關(guān)注

    關(guān)注

    21

    文章

    634

    瀏覽量

    152663

原文標(biāo)題:Verilog實(shí)現(xiàn)DDS 正弦波發(fā)生器

文章出處:【微信號(hào):ZYNQ,微信公眾號(hào):ZYNQ】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    正弦波發(fā)生器

    正弦波發(fā)生器
    發(fā)表于 10-07 11:51 ?2149次閱讀

    dsp正弦波發(fā)生器

    dsp正弦波發(fā)生器,在C5000系列DSP上實(shí)現(xiàn)正弦波發(fā)生器
    發(fā)表于 01-02 19:29 ?86次下載

    基于DDS技術(shù)的高頻正弦波發(fā)生器的設(shè)計(jì)

    以混合信號(hào)單片機(jī)C8051F020 及DDS 芯片AD9834 為核心,采用直接數(shù)字合成(DDS)技術(shù)完成多功能高頻正弦信號(hào)發(fā)生器的設(shè)計(jì)。該正弦
    發(fā)表于 08-10 15:27 ?108次下載

    基于DDS技術(shù)的高頻正弦波發(fā)生器的設(shè)計(jì)

    以混合信號(hào)單片機(jī)C8051F020 及DDS 芯片AD9834 為核心,采用直接數(shù)字合成(DDS)技術(shù)完成多功能高頻正弦信號(hào)發(fā)生器的設(shè)計(jì)。該正弦
    發(fā)表于 12-18 15:32 ?113次下載

    正弦波發(fā)生器電路圖

    正弦波發(fā)生器電路圖,電路由IC,TL082組成。 圖二:正弦波信號(hào)發(fā)生器電路圖
    發(fā)表于 01-02 19:16 ?3873次閱讀
    <b class='flag-5'>正弦波</b><b class='flag-5'>發(fā)生器</b>電路圖

    簡(jiǎn)單的正弦波發(fā)生器

    簡(jiǎn)單的正弦波發(fā)生器
    發(fā)表于 04-08 09:10 ?4827次閱讀
    簡(jiǎn)單的<b class='flag-5'>正弦波</b><b class='flag-5'>發(fā)生器</b>

    失真度小的正弦波發(fā)生器

    失真度小的正弦波發(fā)生器
    發(fā)表于 04-08 09:12 ?1068次閱讀
    失真度小的<b class='flag-5'>正弦波</b><b class='flag-5'>發(fā)生器</b>

    數(shù)控正弦波發(fā)生器

    數(shù)控正弦波發(fā)生器
    發(fā)表于 04-08 09:13 ?945次閱讀
    數(shù)控<b class='flag-5'>正弦波</b><b class='flag-5'>發(fā)生器</b>

    正弦波發(fā)生器

    正弦波發(fā)生器
    發(fā)表于 10-07 11:46 ?990次閱讀
    <b class='flag-5'>正弦波</b><b class='flag-5'>發(fā)生器</b>

    正弦波信號(hào)發(fā)生器的設(shè)計(jì)

    正弦波信號(hào)發(fā)生器的設(shè)計(jì) 需要的可以拿去參考一下
    發(fā)表于 08-29 15:02 ?55次下載

    基于Verilog實(shí)現(xiàn)DDS任意波形發(fā)生器

    DDS是從相位的概念直接合成所需波形的一種頻率合成技術(shù)。不僅可以產(chǎn)生不同頻率的正弦波,而且可以控制波形的初始相位。本文為大家介紹基于Verilog實(shí)現(xiàn)
    發(fā)表于 01-08 11:58 ?6849次閱讀
    基于<b class='flag-5'>Verilog</b><b class='flag-5'>實(shí)現(xiàn)</b>的<b class='flag-5'>DDS</b>任意波形<b class='flag-5'>發(fā)生器</b>

    正弦波信號(hào)發(fā)生器基本原理與設(shè)計(jì)

    本文主要介紹了一種正弦波信號(hào)發(fā)生器基本原理與設(shè)計(jì),正弦信號(hào)發(fā)生器主要由兩部分組成:正弦波信號(hào)發(fā)生器
    發(fā)表于 01-14 13:11 ?8.3w次閱讀
    <b class='flag-5'>正弦波</b>信號(hào)<b class='flag-5'>發(fā)生器</b>基本原理與設(shè)計(jì)

    正弦波發(fā)生電路原理

    首先介紹了產(chǎn)生正弦波的條件,其次介紹了正弦波發(fā)生電路組成,最后闡述了正弦波發(fā)生電路及工作原理。正弦波
    的頭像 發(fā)表于 09-13 17:54 ?3.9w次閱讀

    FPGA實(shí)現(xiàn)基于ROM的正弦波發(fā)生器

    FPGA實(shí)現(xiàn)基于ROM的正弦波發(fā)生器(嵌入式開(kāi)發(fā)系統(tǒng))-該文檔為FPGA實(shí)現(xiàn)基于ROM的正弦波發(fā)生器
    發(fā)表于 07-30 11:45 ?32次下載
    FPGA<b class='flag-5'>實(shí)現(xiàn)</b>基于ROM的<b class='flag-5'>正弦波</b><b class='flag-5'>發(fā)生器</b>

    Arduino正弦波發(fā)生器

    電子發(fā)燒友網(wǎng)站提供《Arduino正弦波發(fā)生器.zip》資料免費(fèi)下載
    發(fā)表于 11-08 09:25 ?5次下載
    Arduino<b class='flag-5'>正弦波</b><b class='flag-5'>發(fā)生器</b>