📄 dds.v
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -