微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 以m序列产生随机序列后的QPSK调制问题

以m序列产生随机序列后的QPSK调制问题

时间:10-02 整理:3721RD 点击:
目前代码是书上简陋的相位选择法来实现的,testbeach是小白自己编的,

  1. module  qpsk_tb;     //qpsk调制的testbench非常想请教大牛们,目前不知道编的对不对,小白又不太会看simulation的图像,请指教,谢谢!
  2.     reg    clk=0;
  3.     reg    rst=0;
  4.     reg [7:0]reg_buf;
  5.     reg    x,clk_div=0;
  6.     wire   y;
  7.     QPSK  qpsk_tb(.clk(clk),.rst(rst),.x(x),.y(y));   //将tb输入输出与主程序qpsk关联起来
  8. initial
  9. #10 rst=1;
  10. begin
  11.     always #25 clk=~clk;      //#25表示25个时间单位,     
  12.     always #100     clk_div=~clk_div;           
  13.     always @ (posedge clk or negedge rst)
  14.     begin
  15.         if (!rst)
  16.         reg_buf[7:0]<=8'b10000100;
  17.         else
  18.         reg_buf[7:0]<={reg_buf[6:0],reg_buf[2]^reg_buf[7]};
  19.         x<=reg_buf[7]^clk_div;
  20.     end   
  21. end
  22. endmodule

复制代码



module QPSK(clk,rst,x,y);
  input clk;           //系统工作时钟
  input rst;           //系统复位信号
  input x;             //系统输入信号:每4个clk周期输入一个x的值
  output y;            //QPSK调制输出信号:在8个clk周期内按bit输出
  reg [2:0] count;     //计数器
  reg [1:0] xreg=2'b00;      //输入信号的中间寄存器
  reg [1:0] yreg;
  reg [3:0] carriers;  //4路载波信号
  //实现QPSK调制
  assign y = (yreg == 2'b00)?carriers[3] :
             (yreg == 2'b01)?carriers[2] :
               (yreg == 2'b10)?carriers[1] :
               (yreg == 2'b11)?carriers[0] : 0;
  //完成计数器,从而对模块时钟分频
always @ (posedge clk or negedge rst)
  if(!rst)
        count <= 3'b000;
  else
        count <= count +1;
  //寄存输入:每4个clk周期,将输入x寄存到xreg中
always @ (posedge clk or negedge rst)
  if(!rst)
        count <= 2'b00;
      else
        if(count[1:0]==2'b11)
          xreg <= {xreg[0],x};
        else
          xreg <= xreg;
  //产生载波信号并且每8个周期将寄存器xreg的值送到yreg中,供后面判断输出
always @ (posedge clk or negedge rst)
  if(!rst)
          begin
            carriers <= 4'b000;
            yreg     <= 2'b00;
          end
        else
          begin
            case(count)
              3'b000:
                  begin
                     yreg <= xreg;
                     carriers <= 4'b1100;
                   end
              3'b010: carriers <= 4'b1001;
              3'b100: carriers <= 4'b0011;
              3'b110: carriers <= 4'b0110;
              default: carriers <= carriers;
            endcase
          end
endmodule

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

网站地图

Top