⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dds.v

📁 无线通信FPGA设计-FPGA源码
💻 V
字号:
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date:    10:28:52 09/21/2007 
// Design Name: 
// Module Name:    dds 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//////////////////////////////////////////////////////////////////////////////////
module dds(data, we, clk, ce, reset, sine, cose);

input [31 : 0] data;  //频率控制字
input we;  //频率控制字写使能
input clk;  //时钟
input ce;  //DDS使能
input reset;  //复位
output [15 : 0] sine;  //正弦信号输出
output [15 : 0] cose;  //余弦信号输出

reg [31 : 0] ADD_A;  //正弦波产生模块的相位累加器
reg [31 : 0] ADD_B;  //余弦波产生模块的相位累加器
reg [15 : 0] cose_DR;  //余弦波的查找表地址
reg [15 : 0] sine_DR;  //
wire [31 : 0] data;  //频率控制字
wire [9 : 0] ROM_A;
wire [15 : 0] cose_D;
wire [15 : 0] sine_D;

assign cose = cose_DR;
assign sine = sine_DR;
assign ROM_A = ADD_B[31 : 22];

always @ (posedge clk or posedge reset)
begin
   if(reset)  //系统初始化时,默认的频率控制字为0
      ADD_A <= 0;
   else if(we)
      ADD_A <= data;
end

always @ (posedge clk or posedge reset)
begin
   if(reset)
      ADD_B <= 0;
   else if(ce)
      ADD_B <= ADD_B + ADD_A;  //ADD_B为累加的结果
end

always @ (posedge clk or posedge reset)
begin
   if(reset)
      cose_DR <= 0;
   else if(ce)
      cose_DR <= cose_D;
end

always @ (posedge clk or posedge reset)
begin
   if(reset)
      sine_DR <= 0;
   else if(ce)
      sine_DR <= sine_D;
end

//调用两个ROM,存储着正余弦波形一个周期的数值。
rom_cose cose1(
   .addra(ROM_A),
   .clka(clk),
   .douta(cose_D));
	
rom_sine sine1(
   .addra(ROM_A),
   .clka(clk),
   .douta(sine_D));

endmodule  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -