8.EP4CE10F17的DDS

前记


                                                                                                                                                                    师夷长技以自强

1.基本概念

DDS:Direct Digital Sythesizer数字合成器,与ROM配合,可以通过频率控制字和相位控制字来输出频率和相位不同的正弦波。DDS结构简单,易于编写,常用于信号发生器中。

DDS的结构框图:

其中的N取32位,M取12位,也就是说模型数据表ROM中保存了4093个正弦波数据。

2.模块设计

信号说明
Clk时钟
Rst_n复位
Fword[31:0]频率控制字
Pword[11:0]相位控制字
Rom_Addr[11:0]ROM地址

3.编码

module DDS(
    Clk,
    Rst_n,
    Fword,
    Pword,
    Rom_Addr
);
    input Clk;
    input Rst_n;
    input [31:0]Fword;
    input [11:0]Pword;
    output [11:0]Rom_Addr;
    
    reg [31:0]Fword_r;
    always@(posedge Clk,negedge Rst_n)
    if(!Rst_n)
        Fword_r <= 32'd0;
    else
        Fword_r <= Fword;
        
    reg [31:0]Acc;
    always@(posedge Clk,negedge Rst_n)
    if(!Rst_n)
        Acc <= 32'd0;
    else
        Acc <= Acc + Fword_r;
        
    assign Rom_Addr = Acc[31:20] + Pword;
endmodule
 

module top(
    Clk,
    Rst_n,
    Fword,
    Pword,
    q
);
    input Clk;
    input Rst_n;
    input [31:0]Fword;
    input [11:0]Pword;
    output [11:0]q;
    
    wire [11:0]Rom_Addr;
    DDS DDS(
        .Clk(Clk),
        .Rst_n(Rst_n),
        .Fword(Fword),
        .Pword(Pword),
        .Rom_Addr(Rom_Addr)
    );
    rom rom(
        .address(Rom_Addr),
        .clock(Clk),
        .q(q)
    );
endmodule
 

编写仿真的文件

`timescale 1ns/1ns
module DDS_tb;
    reg Clk;
    reg Rst_n;
    reg [31:0]Fword;
    reg [11:0]Pword;
    wire [11:0]q;
    top top(
        .Clk(Clk),
        .Rst_n(Rst_n),
        .Fword(Fword),
        .Pword(Pword),
        .q(q)
    );
    
    initial Clk = 0;
    always #10 Clk = ~Clk;
    
    initial begin
        Rst_n = 0;
        #20;
        Rst_n = 1;
        Fword = 32'd2097152;
        Pword = 0;
        #100000;
        $stop;
    end
endmodule
 

4.仿真结果

1.        

Fword = 32'd1048576;
Pword = 0;

2.

        Fword = 32'd1048576;
        Pword = 12'd1048;

 

3.

        Fword = 32'd2097152;
        Pword = 12'd1048;

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值