微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 64QAM调制的FPGA实现,用Verilog HDL编程,恳请大神相助!

64QAM调制的FPGA实现,用Verilog HDL编程,恳请大神相助!

时间:10-02 整理:3721RD 点击:
代码已经初步写好了,可是仿真结果一直有问题,帮忙,谢谢啦,我的载波产生模块还有问题,帮忙帮忙啊

  1. module qam64(x,out,clk,clk1,rst);
  2. input x,clk,clk1,rst;
  3. output [18:0] out;
  4. reg [2:0] count;
  5. reg [5:0] reg1,reg2;
  6. reg [18:0] ssig,csig;
  7. reg [15:0] sine;
  8. reg [15:0] cosine;
  9. reg [23:0] num;
  10. reg [5:0] yus;


  11. always @(posedge clk)
  12. begin
  13.   if(!rst)
  14.      begin reg1<=0;reg2<=0;count<=0;end
  15.   else begin reg1[5:0]<={reg1[4:0],x};count<=count+1;
  16.              if(count==3'b110)
  17.                   begin reg2<=reg1;count<=0;end
  18.              else reg2<=reg2;
  19.        end
  20. end

  21. always@(posedge clk1) begin
  22. if(!rst)
  23. begin
  24.     csig<=0;ssig<=0;num<=0;         
  25. end
  26. else begin  num=num+1;
  27.             yus=num%64;
  28. if(yus>=0 && yus<=31) begin
  29.          cosine=(yus-31)/31;
  30.          sine=(yus-31)/31;
  31. end
  32. else begin
  33.         cosine=(yus-32)/31;
  34.          sine=(yus-32)/31;
  35. end

  36. case(reg2)
  37. 6'b000000://cosine+sine
  38. begin csig[18:16]<=cosine[15:13];csig[15:0]<=cosine[15:0];
  39.       ssig[18:16]<=sine[15:13];ssig[15:0]<=sine[15:0];end
  40. 6'b000001://cosine+2sine
  41. begin csig[18:16]<=cosine[15:13];csig[15:0]<=cosine[15:0];
  42.       ssig[18:17]<=sine[15:14];ssig[16:1]<=sine[15:0];ssig[0]<=0;end
  43. 6'b000010://cosine+3sine
  44. begin csig[18:16]<=cosine[15:13];csig[15:0]<=cosine[15:0];
  45.       ssig[18]<=sine[15];ssig[17:2]<=sine[15:0];ssig[1:0]<=0;end
  46. 6'b000011://cosine+4sine
  47. begin csig[18:16]<=cosine[15:13];csig[15:0]<=cosine[15:0];
  48.       ssig[18:3]<=sine[15:0];ssig[2:0]<=0;end
  49. 6'b000100://2cosine+sine
  50. begin csig[18:17]<=cosine[15:14];csig[16:1]<=cosine[15:0];csig[0]<=0;
  51.       ssig[18:16]<=sine[15:13];ssig[15:0]<=sine[15:0];end
  52. 6'b000101://2cosine+2sine
  53. begin csig[18:17]<=cosine[15:14];csig[16:1]<=cosine[15:0];csig[0]<=0;
  54.       ssig[18:17]<=sine[15:14];ssig[16:1]<=sine[15:0];ssig[0]<=0;end
  55. 6'b000110://2cosine+3sine
  56. begin csig[18:17]<=cosine[15:14];csig[16:1]<=cosine[15:0];csig[0]<=0;
  57.       ssig[18]<=sine[15];ssig[17:2]<=sine[15:0];ssig[1:0]<=0;end
  58. 6'b000111://2cosine+4sine
  59. begin csig[18:17]<=cosine[15:14];csig[16:1]<=cosine[15:0];csig[0]<=0;
  60.       ssig[18:3]<=sine[15:0];ssig[2:0]<=0;end
  61. 6'b001000://3cosine+sine
  62. begin csig[18]<=cosine[15];csig[17:2]<=cosine[15:0];csig[1:0]<=0;
  63.       ssig[18:16]<=sine[15:13];ssig[15:0]<=sine[15:0];end
  64. 6'b001001://3cosine+2sine
  65. begin csig[18]<=cosine[15];csig[17:2]<=cosine[15:0];csig[1:0]<=0;
  66.      ssig[18:17]<=sine[15:14];ssig[16:1]<=sine[15:0];ssig[0]<=0;end
  67. 6'b001010://3cosine+3sine
  68. begin csig[18]<=cosine[15];csig[17:2]<=cosine[15:0];csig[1:0]<=0;
  69.       ssig[18]<=sine[15];ssig[17:2]<=sine[15:0];ssig[1:0]<=0;end
  70. 6'b001011://3cosine+4sine
  71. begin csig[18]<=cosine[15];csig[17:2]<=cosine[15:0];csig[1:0]<=0;
  72.       ssig[18:3]<=sine[15:0];ssig[2:0]<=0;end
  73. 6'b001100://4cosine+sine
  74. begin csig[18:3]<=cosine[15:0];csig[2:0]<=0;
  75.       ssig[18:16]<=sine[15:13];ssig[15:0]<=sine[15:0];end
  76. 8'b001101://4cosine+2sine
  77. begin csig[18:3]<=cosine[15:0];csig[2:0]<=0;
  78.      ssig[18:17]<=sine[15:14];ssig[16:1]<=sine[15:0];ssig[0]<=0;end
  79. 6'b001110://4cosine+3sine
  80. begin csig[18:3]<=cosine[15:0];csig[2:0]<=0;
  81.       ssig[18]<=sine[15];ssig[17:2]<=sine[15:0];ssig[1:0]<=0;end
  82. 6'b001111://4cosine+4sine
  83. begin csig[18:3]<=cosine[15:0];csig[2:0]<=0;
  84.        ssig[18:3]<=sine[15:0];ssig[2:0]<=0;end
  85. 8'b010000://cosine-sine
  86. begin csig[18:16]<=cosine[15:13];csig[15:0]<=cosine[15:0];
  87.       ssig[18:16]<=!sine[15:13];ssig[15:0]<=!sine[15:0];end
  88. 6'b010001://cosine-2sine
  89. begin csig[18:16]<=cosine[15:13];csig[15:0]<=cosine[15:0];
  90.       ssig[18:17]<=!sine[15:14];ssig[16:1]<=!sine[15:0];ssig[0]<=0;end
  91. 6'b010010://cosine-3sine
  92. begin csig[18:16]<=cosine[15:13];csig[15:0]<=cosine[15:0];
  93.       ssig[18]<=!sine[15];ssig[17:2]<=!sine[15:0];ssig[1:0]<=0;end
  94. 6'b010011://cosine-4sine
  95. begin csig[18:16]<=cosine[15:13];csig[15:0]<=cosine[15:0];
  96.       ssig[18:3]<=!sine[15:0];ssig[2:0]<=0;end
  97. 6'b010100://2cosine-sine
  98. begin csig[18:17]<=cosine[15:14];csig[16:1]<=cosine[15:0];csig[0]<=0;
  99.       ssig[18:16]<=!sine[15:13];ssig[15:0]<=!sine[15:0];end
  100. 6'b010101://2cosine-2sine
  101. begin csig[18:17]<=cosine[15:14];csig[16:1]<=cosine[15:0];csig[0]<=0;
  102.       ssig[18:17]<=!sine[15:14];ssig[16:1]<=!sine[15:0];ssig[0]<=0;end
  103. 6'b010110://2cosine-3sine
  104. begin csig[18:17]<=cosine[15:14];csig[16:1]<=cosine[15:0];csig[0]<=0;
  105.       ssig[18]<=!sine[15];ssig[17:2]<=!sine[15:0];ssig[1:0]<=0;end
  106. 6'b010111://2cosine-4sine
  107. begin csig[18:17]<=cosine[15:14];csig[16:1]<=cosine[15:0];csig[0]<=0;
  108.       ssig[18:3]<=!sine[15:0];ssig[2:0]<=0;end
  109. 6'b011000://3cosine-sine
  110. begin csig[18]<=cosine[15];csig[17:2]<=cosine[15:0];csig[1:0]<=0;
  111.       ssig[18:16]<=!sine[15:13];ssig[15:0]<=!sine[15:0];end
  112. 6'b011001://3cosine-2sine
  113. begin csig[18]<=cosine[15];csig[17:2]<=cosine[15:0];csig[1:0]<=0;
  114.      ssig[18:17]<=!sine[15:14];ssig[16:1]<=!sine[15:0];ssig[0]<=0;end
  115. 6'b011010://3cosine-3sine
  116. begin csig[18]<=cosine[15];csig[17:2]<=cosine[15:0];csig[1:0]<=0;
  117.       ssig[18]<=!sine[15];ssig[17:2]<=!sine[15:0];ssig[1:0]<=0;end
  118. 6'b011011://3cosine-4sine
  119. begin csig[18]<=cosine[15];csig[17:2]<=cosine[15:0];csig[1:0]<=0;
  120.       ssig[18:3]<=!sine[15:0];ssig[2:0]<=0;end
  121. 6'b011100://4cosine-sine
  122. begin csig[18:3]<=cosine[15:0];csig[2:0]<=0;
  123.       ssig[18:16]<=!sine[15:13];ssig[15:0]<=!sine[15:0];end
  124. 6'b011101://4cosine-2sine
  125. begin csig[18:3]<=cosine[15:0];csig[2:0]<=0;
  126.      ssig[18:17]<=!sine[15:14];ssig[16:1]<=!sine[15:0];ssig[0]<=0;end
  127. 6'b011110://4cosine-3sine
  128. begin csig[18:3]<=cosine[15:0];csig[2:0]=0;
  129.       ssig[18]<=!sine[15];ssig[17:2]<=!sine[15:0];ssig[1:0]<=0;end
  130. 6'b011111://4cosine-4sine
  131. begin csig[18:3]<=cosine[15:0];csig[2:0]<=0;
  132.       ssig[18:3]<=!sine[15:0];ssig[2:0]<=0;end
  133. 6'b100000://-cosine+sine
  134. begin csig[18:16]<=!cosine[15:13];csig[15:0]<=!cosine[15:0];
  135.       ssig[18:16]<=sine[15:13];ssig[15:0]<=sine[15:0];end
  136. 6'b100001://-cosine+2sine
  137. begin csig[18:16]<=!cosine[15:13];csig[15:0]<=!cosine[15:0];
  138.       ssig[18:17]<=sine[15:14];ssig[16:1]<=sine[15:0];ssig[0]<=0;end
  139. 6'b100010://-cosine+3sine
  140. begin csig[18:16]<=!cosine[15:13];csig[15:0]<=!cosine[15:0];
  141.       ssig[18]<=sine[15];ssig[17:2]<=sine[15:0];ssig[1:0]<=0;end
  142. 6'b100011://-cosine+4sine
  143. begin csig[18:16]<=!cosine[15:13];csig[15:0]<=!cosine[15:0];
  144.       ssig[18:3]<=sine[15:0];ssig[2:0]<=0;end
  145. 6'b100100://-2cosine+sine
  146. begin csig[18:17]<=!cosine[15:14];csig[16:1]<=!cosine[15:0];csig[0]<=0;
  147.       ssig[18:16]<=sine[15:13];ssig[15:0]<=sine[15:0];end
  148. 6'b100101://-2cosine+2sine
  149. begin csig[18:17]<=!cosine[15:14];csig[16:1]<=!cosine[15:0];csig[0]<=0;
  150.       ssig[18:17]<=sine[15:14];ssig[16:1]<=sine[15:0];ssig[0]<=0;end
  151. 6'b100110://-2cosine+3sine
  152. begin csig[18:17]<=!cosine[15:14];csig[16:1]<=!cosine[15:0];csig[0]<=0;
  153.       ssig[18]<=sine[15];ssig[17:2]<=sine[15:0];ssig[1:0]<=0;end
  154. 6'b100111://-2cosine+4sine
  155. begin csig[18:17]<=!cosine[15:14];csig[16:1]<=!cosine[15:0];csig[0]<=0;
  156.       ssig[18:3]<=sine[15:0];ssig[2:0]<=0;end
  157. 6'b101000://-3cosine+sine
  158. begin csig[18]<=!cosine[15];csig[17:2]<=!cosine[15:0];csig[1:0]<=0;
  159.       ssig[18:16]<=sine[15:13];ssig[15:0]<=sine[15:0];end
  160. 6'b101001://-3cosine+2sine
  161. begin csig[18]<=!cosine[15];csig[17:2]<=!cosine[15:0];csig[1:0]<=0;
  162.      ssig[18:17]<=sine[15:14];ssig[16:1]<=sine[15:0];ssig[0]<=0;end
  163. 8'b101010://-3cosine+3sine
  164. begin csig[18]<=!cosine[15];csig[17:2]<=!cosine[15:0];csig[1:0]<=0;
  165.       ssig[18]<=sine[15];ssig[17:2]<=sine[15:0];ssig[1:0]<=0;end
  166. 6'b101011://-3cosine+4sine
  167. begin csig[18]<=!cosine[15];csig[17:2]<=!cosine[15:0];csig[1:0]<=0;
  168.       ssig[18:3]<=sine[15:0];ssig[2:0]<=0;end
  169. 6'b101100://-4cosine+sine
  170. begin csig[18:3]<=!cosine[15:0];csig[2:0]<=0;
  171.       ssig[18:16]<=sine[15:13];ssig[15:0]<=sine[15:0];end
  172. 6'b101101://-4cosine+2sine
  173. begin csig[18:3]<=!cosine[15:0];csig[2:0]<=0;
  174.       ssig[18:17]<=sine[15:14];ssig[16:1]<=sine[15:0];ssig[0]<=0;end
  175. 6'b101110://-4cosine+3sine
  176. begin csig[18:3]<=!cosine[15:0];csig[2:0]<=0;
  177.       ssig[18]<=sine[15];ssig[17:2]<=sine[15:0];ssig[1:0]<=0;end
  178. 6'b101111://-4cosine+4sine
  179. begin csig[18:3]<=!cosine[15:0];csig[2:0]<=0;
  180.       ssig[18:3]<=sine[15:0];ssig[2:0]<=0;end
  181. 6'b110000://-cosine-sine
  182. begin csig[18:16]<=!cosine[15:13];csig[15:0]<=!cosine[15:0];
  183.       ssig[18:16]<=!sine[15:13];ssig[15:0]<=!sine[15:0];end
  184. 6'b110001://-cosine-2sine
  185. begin csig[18:16]<=!cosine[15:13];csig[15:0]<=!cosine[15:0];
  186.       ssig[18:17]<=!sine[15:14];ssig[16:1]<=!sine[15:0];ssig[0]<=0;end
  187. 6'b110010://-cosine-3sine
  188. begin csig[18:16]<=!cosine[15:13];csig[15:0]<=!cosine[15:0];
  189.       ssig[18]<=!sine[15];ssig[17:2]<=!sine[15:0];ssig[1:0]<=0;end
  190. 6'b110011://-cosine-4sine
  191. begin csig[18:16]<=!cosine[15:13];csig[15:0]<=!cosine[15:0];
  192.       ssig[18:3]<=!sine[15:0];ssig[2:0]<=0;end
  193. 6'b110100://-2cosine-sine
  194. begin csig[18:17]<=!cosine[15:14];csig[16:1]<=!cosine[15:0];csig[0]<=0;
  195.       ssig[18:16]<=!sine[15:13];ssig[15:0]<=!sine[15:0];end
  196. 6'b110101://-2cosine-2sine
  197. begin csig[18:17]<=!cosine[15:14];csig[16:1]<=!cosine[15:0];csig[0]<=0;
  198.       ssig[18:17]<=!sine[15:14];ssig[16:1]<=!sine[15:0];ssig[0]<=0;end
  199. 6'b110110://-2cosine-3sine
  200. begin csig[18:17]<=!cosine[15:14];csig[16:1]<=!cosine[15:0];csig[0]<=0;
  201.       ssig[18]<=!sine[15];ssig[17:2]<=!sine[15:0];ssig[1:0]<=0;end
  202. 6'b110111://-2cosine-4sine
  203. begin csig[18:17]<=!cosine[15:14];csig[16:1]<=!cosine[15:0];csig[0]<=0;
  204.       ssig[18:3]<=!sine[15:0];ssig[2:0]<=0;end
  205. 6'b111000://-3cosine-sine
  206. begin csig[18]<=!cosine[15];csig[17:2]<=!cosine[15:0];csig[1:0]<=0;
  207.       ssig[18:16]<=!sine[15:13];ssig[15:0]<=!sine[15:0];end
  208. 6'b111001://-3cosine-2sine
  209. begin csig[18]<=!cosine[15];csig[17:2]<=!cosine[15:0];csig[1:0]<=0;
  210.       ssig[18:17]<=!sine[15:14];ssig[16:1]<=!sine[15:0];ssig[0]<=0;end
  211. 6'b111010://-3cosine-3sine
  212. begin csig[18]<=!cosine[15];csig[17:2]<=!cosine[15:0];csig[1:0]<=0;
  213.       ssig[18]<=!sine[15];ssig[17:2]<=!sine[15:0];ssig[1:0]<=0;end
  214. 6'b111011://-3cosine-4sine
  215. begin csig[18]<=!cosine[15];csig[17:2]<=!cosine[15:0];csig[1:0]<=0;
  216.       ssig[18:3]<=!sine[15:0];ssig[2:0]<=0;end
  217. 6'b111100://-4cosine-sine
  218. begin csig[18:3]<=!cosine[15:0];csig[2:0]<=0;
  219.       ssig[18:16]<=!sine[15:13];ssig[15:0]<=!sine[15:0];end
  220. 6'b111101://-4cosine-2sine
  221. begin csig[18:3]<=!cosine[15:0];csig[2:0]<=0;
  222.       ssig[18:17]<=!sine[15:14];ssig[16:1]<=!sine[15:0];ssig[0]<=0;end
  223. 6'b111110://-4cosine-3sine
  224. begin csig[18:3]<=!cosine[15:0];csig[2:0]<=0;
  225.       ssig[18]<=!sine[15];ssig[17:2]<=!sine[15:0];ssig[1:0]<=0;end
  226. 6'b111111://-4cosine-4sine
  227. begin csig[18:3]<=!cosine[15:0];csig[2:0]<=0;
  228.       ssig[18:3]<=!sine[15:0];ssig[2:0]<=0;end
  229. endcase
  230. end
  231. end
  232. assign out=rst?csig+ssig:0;
  233. endmodule

复制代码

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top