dds.v

来自「FPGA中实现基于查找表方式(LUT)的DDS实现」· Verilog 代码 · 共 37 行

V
37
字号
module dds(clk,           reset,           k,           initial_phase,		     data_out           );input   clk,        reset;input[9:0]  k,		      initial_phase;output[7:0] data_out;// Address accumulatorreg [9:0]   addr_acc;wire[7:0]	  rom_data;wire[7:0]   rom_addr;						// Length of a sine data in a period is 10 bit, 																// but the length of ROM is 8 bit because 																// it only need to store previous 1/4 of a period																																								always @(posedge clk or negedge reset)if(~reset)	addr_acc <= initial_phase;else	addr_acc <= addr_acc+k;	// Address and data convertor of romassign rom_addr = (addr_acc[8])?(~addr_acc[7:0]):(addr_acc[7:0]);		// When Address in [pi/2,pi],[pi*3/2,pi*2], convert address to ROMassign data_out = (addr_acc[9])?({~rom_data[7:0]+1}):(rom_data);    // When Address in [0,pi/2], [pi,pi*3/2], convert the polar of data from ROM																																		// This method only for sine wave		rom rom(.clock(clk),        .aclr(~reset),        .address(rom_addr),        .q(rom_data)        );	endmodule

⌨️ 快捷键说明

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