DDS基本原理--FPGA学习笔记

DDS信号发生器原理:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2024/09/04 15:20:30
// Design Name: hilary
// Module Name: DDS_Module
//


module DDS_Module(
        Clk,
        Reset_n,
        Fword,
        Pword,
        Data
        
    );
        input Clk;
        input Reset_n;
        input [31:0] Fword;
        input [11:0] Pword;
        output [13:0] Data;
        
        //频率控制字的同步寄存器
        reg [31:0] Fword_r ;
        always@(posedge Clk)
            Fword_r <= Fword ;
            
         //相位控制字的同步寄存器
        reg [31:0] Pword_r ;
        always@(posedge Clk)
            Pword_r <= Pword ;        
         
         //相位累加寄存器
         reg [31:0] Freq_ACC;
         always@(posedge Clk or negedge Reset_n)
         if(!Reset_n)
            Freq_ACC <= 0  ;
          else
            Freq_ACC <= Fword_r + Freq_ACC ;
        
         //波形数据表地址        
         wire [11:0] Rom_Addr;
         assign Rom_Addr = Freq_ACC[31:20] + Pword_r;
         
         rom rom(
            .clka(Clk),
            .addra(Rom_Addr),
            .douta(Data)
         );
                 
endmodule
`timescale 1ns / 1ps


module DDS_Module_tb;
        reg Clk;
        reg Reset_n;
        reg [31:0] FwordA,FwordB;
        reg[11:0] PwordA,PwordB;
        wire [13:0] DataA,DataB;
        
        DDS_Module DDS_ModuleA(
                 Clk,
                 Reset_n,
                 FwordA,
                 PwordA,
                 DataA      
        );
        
        DDS_Module DDS_ModuleB(
                 Clk,
                 Reset_n,
                 FwordB,
                 PwordB,
                 DataB        
        );       
        
        initial Clk = 1;
        always#10 Clk = ~Clk;
        
        initial begin
                Reset_n = 0;
                FwordA = 65536;
                PwordA = 0;
                FwordB = 65536;
                PwordB = 1024;
               #201;
                Reset_n = 1;
                #5000000;
                FwordA = 65536*1024;
                FwordB = 65536*1024;
                PwordA = 0;
                PwordB = 2048;
                #1000000;
                $stop;
                end
endmodule


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值