Module qam64 (X,out,clk,clk1,rst);
Input X,clk,clk1,rst;
Output [18:0] out;
reg [2:0] count;
reg [5:0] REG1,REG2;
reg [18:0] ssig,csig;
reg [15:0] sine;
reg [15:0] cosine;
Always @ (Posedge CLK)
Begin
if (!rst)
Begin Reg1<=0;reg2<=0;count<=0;end
ELSE BEGIN reg1[5:0]<={reg1[4:0],x};count<=count+1;
if (count==3 ' b110)
Begin Reg2<=reg1;count<=0;end
else reg2<=reg2;
End
End
[Email protected] (Posedge clk1) begin
if (!rst)
Begin Csig<=0;ssig<=0;end
ELSE begin
Case (REG2)
6 ' B000000://cosine+sine
Begin csig[18:16]<=cosine[15:13];csig[15:0]<=cosine[15:0];
Ssig[18:16]<=sine[15:13];ssig[15:0]<=sine[15:0];end
6 ' B000001://cosine+2sine
Begin csig[18:16]<=cosine[15:13];csig[15:0]<=cosine[15:0];
Ssig[18:17]<=sine[15:14];ssig[16:1]<=sine[15:0];ssig[0]<=0;end
6 ' B000010://cosine+3sine
Begin csig[18:16]<=cosine[15:13];csig[15:0]<=cosine[15:0];
Ssig[18]<=sine[15];ssig[17:2]<=sine[15:0];ssig[1:0]<=0;end
6 ' B000011://cosine+4sine
Begin csig[18:16]<=cosine[15:13];csig[15:0]<=cosine[15:0];
Ssig[18:3]<=sine[15:0];ssig[2:0]<=0;end
6 ' B000100://2cosine+sine
Begin csig[18:17]<=cosine[15:14];csig[16:1]<=cosine[15:0];csig[0]<=0;
Ssig[18:16]<=sine[15:13];ssig[15:0]<=sine[15:0];end
6 ' B000101://2cosine+2sine
Begin csig[18:17]<=cosine[15:14];csig[16:1]<=cosine[15:0];csig[0]<=0;
Ssig[18:17]<=sine[15:14];ssig[16:1]<=sine[15:0];ssig[0]<=0;end
6 ' B000110://2cosine+3sine
Begin csig[18:17]<=cosine[15:14];csig[16:1]<=cosine[15:0];csig[0]<=0;
Ssig[18]<=sine[15];ssig[17:2]<=sine[15:0];ssig[1:0]<=0;end
6 ' B000111://2cosine+4sine
Begin csig[18:17]<=cosine[15:14];csig[16:1]<=cosine[15:0];csig[0]<=0;
Ssig[18:3]<=sine[15:0];ssig[2:0]<=0;end
6 ' B001000://3cosine+sine
Begin csig[18]<=cosine[15];csig[17:2]<=cosine[15:0];csig[1:0]<=0;
Ssig[18:16]<=sine[15:13];ssig[15:0]<=sine[15:0];end
6 ' B001001://3cosine+2sine
Begin csig[18]<=cosine[15];csig[17:2]<=cosine[15:0];csig[1:0]<=0;
Ssig[18:17]<=sine[15:14];ssig[16:1]<=sine[15:0];ssig[0]<=0;end
6 ' B001010://3cosine+3sine
Begin csig[18]<=cosine[15];csig[17:2]<=cosine[15:0];csig[1:0]<=0;
Ssig[18]<=sine[15];ssig[17:2]<=sine[15:0];ssig[1:0]<=0;end
6 ' B001011://3cosine+4sine
Begin csig[18]<=cosine[15];csig[17:2]<=cosine[15:0];csig[1:0]<=0;
Ssig[18:3]<=sine[15:0];ssig[2:0]<=0;end
6 ' B001100://4cosine+sine
Begin csig[18:3]<=cosine[15:0];csig[2:0]<=0;
Ssig[18:16]<=sine[15:13];ssig[15:0]<=sine[15:0];end
8 ' B001101://4cosine+2sine
Begin csig[18:3]<=cosine[15:0];csig[2:0]<=0;
Ssig[18:17]<=sine[15:14];ssig[16:1]<=sine[15:0];ssig[0]<=0;end
6 ' B001110://4cosine+3sine
Begin csig[18:3]<=cosine[15:0];csig[2:0]<=0;
Ssig[18]<=sine[15];ssig[17:2]<=sine[15:0];ssig[1:0]<=0;end
6 ' B001111://4cosine+4sine
Begin csig[18:3]<=cosine[15:0];csig[2:0]<=0;
Ssig[18:3]<=sine[15:0];ssig[2:0]<=0;end
8 ' B010000://cosine-sine
Begin csig[18:16]<=cosine[15:13];csig[15:0]<=cosine[15:0];
Ssig[18:16]<=!sine[15:13];ssig[15:0]<=!sine[15:0];end
6 ' B010001://cosine-2sine
Begin csig[18:16]<=cosine[15:13];csig[15:0]<=cosine[15:0];
Ssig[18:17]<=!sine[15:14];ssig[16:1]<=!sine[15:0];ssig[0]<=0;end
6 ' B010010://cosine-3sine
Begin csig[18:16]<=cosine[15:13];csig[15:0]<=cosine[15:0];
Ssig[18]<=!sine[15];ssig[17:2]<=!sine[15:0];ssig[1:0]<=0;end
6 ' B010011://cosine-4sine
Begin csig[18:16]<=cosine[15:13];csig[15:0]<=cosine[15:0];
Ssig[18:3]<=!sine[15:0];ssig[2:0]<=0;end
6 ' B010100://2cosine-sine
Begin csig[18:17]<=cosine[15:14];csig[16:1]<=cosine[15:0];csig[0]<=0;
Ssig[18:16]<=!sine[15:13];ssig[15:0]<=!sine[15:0];end
6 ' B010101://2cosine-2sine
Begin csig[18:17]<=cosine[15:14];csig[16:1]<=cosine[15:0];csig[0]<=0;
Ssig[18:17]<=!sine[15:14];ssig[16:1]<=!sine[15:0];ssig[0]<=0;end
6 ' B010110://2cosine-3sine
Begin csig[18:17]<=cosine[15:14];csig[16:1]<=cosine[15:0];csig[0]<=0;
Ssig[18]<=!sine[15];ssig[17:2]<=!sine[15:0];ssig[1:0]<=0;end
6 ' B010111://2cosine-4sine
Begin csig[18:17]<=cosine[15:14];csig[16:1]<=cosine[15:0];csig[0]<=0;
Ssig[18:3]<=!sine[15:0];ssig[2:0]<=0;end
6 ' B011000://3cosine-sine
Begin csig[18]<=cosine[15];csig[17:2]<=cosine[15:0];csig[1:0]<=0;
Ssig[18:16]<=!sine[15:13];ssig[15:0]<=!sine[15:0];end
6 ' B011001://3cosine-2sine
Begin csig[18]<=cosine[15];csig[17:2]<=cosine[15:0];csig[1:0]<=0;
Ssig[18:17]<=!sine[15:14];ssig[16:1]<=!sine[15:0];ssig[0]<=0;end
6 ' B011010://3cosine-3sine
Begin csig[18]<=cosine[15];csig[17:2]<=cosine[15:0];csig[1:0]<=0;
Ssig[18]<=!sine[15];ssig[17:2]<=!sine[15:0];ssig[1:0]<=0;end
6 ' B011011://3cosine-4sine
Begin csig[18]<=cosine[15];csig[17:2]<=cosine[15:0];csig[1:0]<=0;
Ssig[18:3]<=!sine[15:0];ssig[2:0]<=0;end
6 ' B011100://4cosine-sine
Begin csig[18:3]<=cosine[15:0];csig[2:0]<=0;
Ssig[18:16]<=!sine[15:13];ssig[15:0]<=!sine[15:0];end
6 ' B011101://4cosine-2sine
Begin csig[18:3]<=cosine[15:0];csig[2:0]<=0;
Ssig[18:17]<=!sine[15:14];ssig[16:1]<=!sine[15:0];ssig[0]<=0;end
6 ' B011110://4cosine-3sine
Begin csig[18:3]<=cosine[15:0];csig[2:0]=0;
Ssig[18]<=!sine[15];ssig[17:2]<=!sine[15:0];ssig[1:0]<=0;end
6 ' B011111://4cosine-4sine
Begin csig[18:3]<=cosine[15:0];csig[2:0]<=0;
Ssig[18:3]<=!sine[15:0];ssig[2:0]<=0;end
6 ' B100000://-cosine+sine
Begin csig[18:16]<=!cosine[15:13];csig[15:0]<=!cosine[15:0];
Ssig[18:16]<=sine[15:13];ssig[15:0]<=sine[15:0];end
6 ' B100001://-cosine+2sine
Begin csig[18:16]<=!cosine[15:13];csig[15:0]<=!cosine[15:0];
Ssig[18:17]<=sine[15:14];ssig[16:1]<=sine[15:0];ssig[0]<=0;end
6 ' B100010://-cosine+3sine
Begin csig[18:16]<=!cosine[15:13];csig[15:0]<=!cosine[15:0];
Ssig[18]<=sine[15];ssig[17:2]<=sine[15:0];ssig[1:0]<=0;end
6 ' B100011://-cosine+4sine
Begin csig[18:16]<=!cosine[15:13];csig[15:0]<=!cosine[15:0];
Ssig[18:3]<=sine[15:0];ssig[2:0]<=0;end
6 ' B100100://-2cosine+sine
Begin csig[18:17]<=!cosine[15:14];csig[16:1]<=!cosine[15:0];csig[0]<=0;
Ssig[18:16]<=sine[15:13];ssig[15:0]<=sine[15:0];end
6 ' B100101://-2cosine+2sine
Begin csig[18:17]<=!cosine[15:14];csig[16:1]<=!cosine[15:0];csig[0]<=0;
Ssig[18:17]<=sine[15:14];ssig[16:1]<=sine[15:0];ssig[0]<=0;end
6 ' B100110://-2cosine+3sine
Begin csig[18:17]<=!cosine[15:14];csig[16:1]<=!cosine[15:0];csig[0]<=0;
Ssig[18]<=sine[15];ssig[17:2]<=sine[15:0];ssig[1:0]<=0;end
6 ' B100111://-2cosine+4sine
Begin csig[18:17]<=!cosine[15:14];csig[16:1]<=!cosine[15:0];csig[0]<=0;
Ssig[18:3]<=sine[15:0];ssig[2:0]<=0;end
6 ' B101000://-3cosine+sine
Begin csig[18]<=!cosine[15];csig[17:2]<=!cosine[15:0];csig[1:0]<=0;
Ssig[18:16]<=sine[15:13];ssig[15:0]<=sine[15:0];end
6 ' B101001://-3cosine+2sine
Begin csig[18]<=!cosine[15];csig[17:2]<=!cosine[15:0];csig[1:0]<=0;
Ssig[18:17]<=sine[15:14];ssig[16:1]<=sine[15:0];ssig[0]<=0;end
8 ' B101010://-3cosine+3sine
Begin csig[18]<=!cosine[15];csig[17:2]<=!cosine[15:0];csig[1:0]<=0;
Ssig[18]<=sine[15];ssig[17:2]<=sine[15:0];ssig[1:0]<=0;end
6 ' B101011://-3cosine+4sine
Begin csig[18]<=!cosine[15];csig[17:2]<=!cosine[15:0];csig[1:0]<=0;
Ssig[18:3]<=sine[15:0];ssig[2:0]<=0;end
6 ' B101100://-4cosine+sine
Begin csig[18:3]<=!cosine[15:0];csig[2:0]<=0;
Ssig[18:16]<=sine[15:13];ssig[15:0]<=sine[15:0];end
6 ' B101101://-4cosine+2sine
Begin csig[18:3]<=!cosine[15:0];csig[2:0]<=0;
Ssig[18:17]<=sine[15:14];ssig[16:1]<=sine[15:0];ssig[0]<=0;end
6 ' B101110://-4cosine+3sine
Begin csig[18:3]<=!cosine[15:0];csig[2:0]<=0;
Ssig[18]<=sine[15];ssig[17:2]<=sine[15:0];ssig[1:0]<=0;end
6 ' B101111://-4cosine+4sine
Begin csig[18:3]<=!cosine[15:0];csig[2:0]<=0;
Ssig[18:3]<=sine[15:0];ssig[2:0]<=0;end
6 ' B110000://-cosine-sine
Begin csig[18:16]<=!cosine[15:13];csig[15:0]<=!cosine[15:0];
Ssig[18:16]<=!sine[15:13];ssig[15:0]<=!sine[15:0];end
6 ' B110001://-cosine-2sine
Begin csig[18:16]<=!cosine[15:13];csig[15:0]<=!cosine[15:0];
Ssig[18:17]<=!sine[15:14];ssig[16:1]<=!sine[15:0];ssig[0]<=0;end
6 ' B110010://-cosine-3sine
Begin csig[18:16]<=!cosine[15:13];csig[15:0]<=!cosine[15:0];
Ssig[18]<=!sine[15];ssig[17:2]<=!sine[15:0];ssig[1:0]<=0;end
6 ' B110011://-cosine-4sine
Begin csig[18:16]<=!cosine[15:13];csig[15:0]<=!cosine[15:0];
Ssig[18:3]<=!sine[15:0];ssig[2:0]<=0;end
6 ' B110100://-2cosine-sine
Begin csig[18:17]<=!cosine[15:14];csig[16:1]<=!cosine[15:0];csig[0]<=0;
Ssig[18:16]<=!sine[15:13];ssig[15:0]<=!sine[15:0];end
6 ' B110101://-2cosine-2sine
Begin csig[18:17]<=!cosine[15:14];csig[16:1]<=!cosine[15:0];csig[0]<=0;
Ssig[18:17]<=!sine[15:14];ssig[16:1]<=!sine[15:0];ssig[0]<=0;end
6 ' B110110://-2cosine-3sine
Begin csig[18:17]<=!cosine[15:14];csig[16:1]<=!cosine[15:0];csig[0]<=0;
Ssig[18]<=!sine[15];ssig[17:2]<=!sine[15:0];ssig[1:0]<=0;end
6 ' B110111://-2cosine-4sine
Begin csig[18:17]<=!cosine[15:14];csig[16:1]<=!cosine[15:0];csig[0]<=0;
Ssig[18:3]<=!sine[15:0];ssig[2:0]<=0;end
6 ' B111000://-3cosine-sine
Begin csig[18]<=!cosine[15];csig[17:2]<=!cosine[15:0];csig[1:0]<=0;
Ssig[18:16]<=!sine[15:13];ssig[15:0]<=!sine[15:0];end
6 ' B111001://-3cosine-2sine
Begin csig[18]<=!cosine[15];csig[17:2]<=!cosine[15:0];csig[1:0]<=0;
Ssig[18:17]<=!sine[15:14];ssig[16:1]<=!sine[15:0];ssig[0]<=0;end
6 ' B111010://-3cosine-3sine
Begin csig[18]<=!cosine[15];csig[17:2]<=!cosine[15:0];csig[1:0]<=0;
Ssig[18]<=!sine[15];ssig[17:2]<=!sine[15:0];ssig[1:0]<=0;end
6 ' B111011://-3cosine-4sine
Begin csig[18]<=!cosine[15];csig[17:2]<=!cosine[15:0];csig[1:0]<=0;
Ssig[18:3]<=!sine[15:0];ssig[2:0]<=0;end
6 ' B111100://-4cosine-sine
Begin csig[18:3]<=!cosine[15:0];csig[2:0]<=0;
Ssig[18:16]<=!sine[15:13];ssig[15:0]<=!sine[15:0];end
6 ' B111101://-4cosine-2sine
Begin csig[18:3]<=!cosine[15:0];csig[2:0]<=0;
Ssig[18:17]<=!sine[15:14];ssig[16:1]<=!sine[15:0];ssig[0]<=0;end
6 ' B111110://-4cosine-3sine
Begin csig[18:3]<=!cosine[15:0];csig[2:0]<=0;
Ssig[18]<=!sine[15];ssig[17:2]<=!sine[15:0];ssig[1:0]<=0;end
6 ' B111111://-4cosine-4sine
Begin csig[18:3]<=!cosine[15:0];csig[2:0]<=0;
Ssig[18:3]<=!sine[15:0];ssig[2:0]<=0;end
Endcase
End
End
Assign out=rst?csig+ssig:0;
Endmodule
Design of QAM 64