module myADC128( clk,D,neg_q,q ); parameter DATA_WIDTH=18; parameter DECIM=32; parameter TAPS=128; input clk; input D; output neg_q; output q; //////////// PLL ////////////////////////// wire mixed_sig_1bit; wire clkop; wire lock; reg Qinner=0; /////////// sin wave /////////////////////////// reg [9:0]theta=0; wire signed[DATA_WIDTH-1:0]sin_signed; reg signed[DATA_WIDTH-1:0]mixed_signed=0; reg [DATA_WIDTH-1:0]mixed_unsigned=0; /////////// delay etc/////////////////////////// reg decim_clock=0; reg [7:0]count=0; reg [TAPS-1:0]z; reg [7:0]decim_count=0; reg reset=1; reg signed [DATA_WIDTH-1:0] coef[TAPS-1:0]; reg [DATA_WIDTH+1:0] sum=0; reg [DATA_WIDTH-1:0] sum_unsigned=0; wire [DATA_WIDTH-1:0] result; integer i; //////////////////////////////////////////////////////////////////////////////////////// //use myPLL instance & generate sin wave myPLL myPLL(.CLK(clk),.CLKOP(clkop),.LOCK(lock)); sin sin(.Clock(clk), .ClkEn(1), .Reset(0), .Theta(theta), .Sine(sin_signed)); //need for 1bit bandpass delta sigma ADC assign neg_q=~Qinner; //multiplier: sampled input D * sin wave accum #(DATA_WIDTH) accum3(clkop,mixed_unsigned,mixed_sig_1bit); assign result=sum_unsigned; accum #(DATA_WIDTH) accum4(clkop,result,q); always@(posedge clkop) begin if(reset==0) begin /////////// need for 1bit bandpass ADC/////// Qinner =D; mixed_signed= (Qinner ? sin_signed:-sin_signed); mixed_unsigned=mixed_signed+18'h1ffff; /////////// delay /////////////////////////// z=z<<1; z[0]=mixed_sig_1bit; sum=0; for(i=TAPS-1;i>=0;i=i-1) begin sum=sum+(z[i]?coef[i]:0); end // decim_count=decim_count+1; // if(decim_count==DECIM) begin //decimatiton:1/DECIM sum_unsigned=sum[DATA_WIDTH-1:0]; // decim_count=0; // end end end initial begin //for simulation only z[0]<=0; end always@(posedge clk) begin if(reset)begin /* for(i=0;i