www.pudn.com > dds_quicklogic.zip > SINLUP.V
/******************************************************************************* ** c : CelLogic, 1996 ** ** The information contained herein is proprietary of CelLogic. ** Any reproduction, in whole or part, disclosure, or use of this code is ** expressly prohibited except as specified in writing by CelLogic. **************************************************************************** ** ** ** Project Name : DDS ** ** Author : Daniel J. Morelli ** Creation Date : 03/04/96 20:33:07 ** Version Number : 1.0 ** ** Revision History : ** ** Date Initials Modification ** ** ** Description : ** ** This block takes the phase angle value and outputs the sin wave ** value to the DAC. This module looks up the sin wave values stored ** as a 1/4 sin wave in the romtab module. ** ** *******************************************************************************/ module sinlup ( SYSCLK, // system clock input RESETN, // global reset MODPHASE, // modulated phase output DACOUT); // DAC output of sin wave // Port types input SYSCLK, RESETN; input[7:0] MODPHASE; output[7:0] DACOUT; reg[5:0] phaseadd; // 1/4 wave phase address to ROM table reg modphase_msb1_ff; // modulated phase MSB reg modphase_msb2_ff; // modulated phase MSB reg[7:0] dac_ff; // registered DAC output wire[6:0] qwavesin; // 1/4 wave sin value from ROM table reg [6:0] qwavesin_ff; // rom table output registered // design architecture assign DACOUT = dac_ff; romtab U_romtab(phaseadd, qwavesin); // get the phase angle for 1/4 rom table always @(posedge SYSCLK or negedge RESETN) if (!RESETN) begin phaseadd <= 6'h00; modphase_msb1_ff <= 0; modphase_msb2_ff <= 0; qwavesin_ff <= 7'h00; dac_ff <= 8'h00; end else begin modphase_msb1_ff <= MODPHASE[7]; modphase_msb2_ff <= modphase_msb1_ff; qwavesin_ff <= qwavesin; if (MODPHASE[6]) phaseadd <= ~MODPHASE[5:0]; else phaseadd <= MODPHASE[5:0]; dac_ff[7] <= ~modphase_msb2_ff; if (modphase_msb2_ff) dac_ff[6:0] <= ~qwavesin_ff; else dac_ff[6:0] <= qwavesin_ff; end endmodule