在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1375|回复: 0

[求助] 以m序列产生随机序列后的QPSK调制问题

[复制链接]
发表于 2016-4-26 15:25:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
目前代码是书上简陋的相位选择法来实现的,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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 22:23 , Processed in 0.018128 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表