64QAM调制的FPGA实现,用Verilog HDL编程,恳请大神相助!
时间:10-02
整理:3721RD
点击:
代码已经初步写好了,可是仿真结果一直有问题,帮忙,谢谢啦,我的载波产生模块还有问题,帮忙帮忙啊
- 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;
- reg [23:0] num;
- reg [5:0] yus;
- 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
- always@(posedge clk1) begin
- if(!rst)
- begin
- csig<=0;ssig<=0;num<=0;
- end
- else begin num=num+1;
- yus=num%64;
- if(yus>=0 && yus<=31) begin
- cosine=(yus-31)/31;
- sine=(yus-31)/31;
- end
- else begin
- cosine=(yus-32)/31;
- sine=(yus-32)/31;
- end
- 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