FPGA入门学习笔记(十七)Vivado实现DDS结构

基本原理

在这里插入图片描述
在这里插入图片描述

仿真波形

在这里插入图片描述

设计文件程序

`timescale 1ns / 1ns
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 [11: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;
    
    //波形数据表的地址
    //查ROM表输出序列
    wire [11:0]Rom_Addr;
    assign Rom_Addr = Freq_ACC[31:20] + Pword_r;
        
    blk_mem_gen_0 blk_mem_gen_0 (
      .clka(Clk),
      .addra(Rom_Addr),
      .douta(Data)
    );    
endmodule

仿真文件程序

`timescale 1ns / 1ns

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*32;
        PwordA = 0;
        FwordB = 65536*32;
        PwordB = 1024;
        #201;
        Reset_N = 1;
        #2000000;
        FwordA = 65536*32;
        PwordA = 0;
        FwordB = 65536*32;
        PwordB = 2048;
        #2000000;
        $stop;
    end
endmodule
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值