www.pudn.com > dds_quicklogic.zip > PHASEA.V
/******************************************************************************* **************************************************************************** ** ** ** Project Name : DDS ** ** Author : Daniel J. Morelli ** Creation Date : 03/03/96 17:59:50 ** Version Number : 1.0 ** ** Revision History : ** ** Date Initials Modification ** ** ** Description : ** ** This block is the phase accumulator of the NCO. This block will accumulate ** a 32 bit phase word with the upper 8 bits representing the actual phase ** table lookup value. This accumulator is piped in 8 bit steps. The input to ** this block is the synchronous frequency word loaded in the proper pipe order. ** The output of this block is an 8 bit quantized phase value or 0 to 2pi ** ** *******************************************************************************/ module phasea ( SYSCLK, // system clock input RESETN, // global reset SYNCFREQ, // synchronous frequency word COS, // digital cos output SIN, // digital sin output PHASE); // 8 bit quantized phase output // Port types input SYSCLK, RESETN; input[31:0] SYNCFREQ; output COS,SIN; output[7:0] PHASE; reg[7:0] pipe1, pipe2, pipe3, pipe4; // four levels of pipeline adders reg pipec1, pipec2, pipec3; // four levels of pipeline carrys wire[7:0] add1, add2, add3, add4; // 8 bit adders of accumulator wire c1, c2, c3, c4; // carry outputs of adders supply0 gnd; // low input // design architecture assign PHASE = pipe4; assign SIN = ~pipe4[7]; assign COS = ~(pipe4[6] ^ pipe4[7]); claadd8s U_add1(pipe1, SYNCFREQ[7:0], gnd, add1, c1); claadd8s U_add2(pipe2, SYNCFREQ[15:8], pipec1, add2, c2); claadd8s U_add3(pipe3, SYNCFREQ[23:16], pipec2, add3, c3); claadd8s U_add4(pipe4, SYNCFREQ[31:24], pipec3, add4, c4); always @(posedge SYSCLK or negedge RESETN) if (!RESETN) begin pipe1 <= 8'h00; pipe2 <= 8'h00; pipe3 <= 8'h00; pipe4 <= 8'h00; pipec1<= 0; pipec2 <= 0; pipec3 <= 0; end else begin pipe1 <= add1; pipe2 <= add2; pipe3 <= add3; pipe4 <= add4; pipec1 <= c1; pipec2 <= c2; pipec3 <= c3; end endmodule