Verilog的QPSK调制实现


QPSK调制一般采用两种方式:(1)调相法  (2)四相位选择法

一、调相法

利用三段式状态机,实现由输入信号输出 两路正交相位调制输出

`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2019/07/27 13:23:19
// Design Name:
// Module Name: QPSK
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//module QPSK(clk,rst_n,din,valid_in,out_real,out_imag,valid_out);input clk;input rst_n;input valid_in;     //控制信号输入input din;          //输入信号output out_real;    // 实部输出output out_imag;    //虚部输出output valid_out;   //已调制后信号输出的标志reg[15:0] out_real;reg[15:0] out_imag; reg       valid_out;reg[1:0]  temp;reg[1:0]  state;reg[1:0]  nextstate;parameter IDLE=2'b00,state1=2'b01,state2=2'b10,ONE=16'h0fff;always@(posedge clk)  beginif(!rst_n)state <= IDLE;elsestate <= nextstate;endalways@(* )beginif(!rst_n)nextstate <= IDLE;elsebegincase(state)        IDLE:beginif(valid_in == 1'b1)nextstate <= state1;else                     nextstate <= state; endstate1:begin                    if(valid_in == 1'b1)          nextstate <= state2;else                     nextstate <= state;        end                             state2:begin                    if(valid_in == 1'b1)          nextstate <= state1;else                     nextstate <= state;       end                     default:nextstate <= IDLE;endcaseendendalways@(posedge clk)beginif(!rst_n)temp <= 2'b00;elsebeginif(valid_in)temp <= {temp[0],din};elsetemp <= temp;endendalways@(posedge clk)beginif(!rst_n)beginout_real <= 16'b0000_0000_0000_0000;out_imag <= 16'b0000_0000_0000_0000;endelsebeginif(state==state2)case(temp)2'b00:beginout_real <= ONE;out_imag <= ONE;end2'b01:beginout_real <= ~ONE;out_imag <= ONE;end2'b11:beginout_real <= ~ONE;out_imag <= ~ONE;end2'b10:beginout_real <= ONE;out_imag <= ~ONE;enddefault:beginout_real <= 16'h0000;out_imag <= 16'h0000;endendcaseelsebeginout_real <= 16'b0000_0000_0000_0000;out_imag <= 16'b0000_0000_0000_0000;endendendalways@(posedge clk)beginif(!rst_n)beginvalid_out <= 1'b0;endelsebeginif(state==state2)valid_out <= 1'b1;elsebeginvalid_out <= 1'b0;endend   end
endmodule

二、四相位选择法


module qpsk(clk,rst,x,y)
input clk,rst;
input x;   //系统输入信号:每4个∞1k周期输入一个x的值
output y;  /QPSK调制输出信号:在8个ck周期内按bit输出reg [2: 0]count   //计数器
reg [1: 0] xreg;  //输入信号的中间寄存器
reg [1: 0] yreg;
reg[3:0] carriers;//4路载波信号/实现QPSκ解调
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;
elsecount <= count +1
//寄存输入:每4个c1k周期,将输入x寄存到xreg中always @(posedge clk or negedge rst)
if(!rst)xreg <= 2'b00;
elseif(count[1:0]==2'b11)xreg <= {xreg[0],x};elsexreg <= xreg;//产生载波信号并且每8个周期将奇存器xeg的值送到yreg中,供后面判断输出
always @(posedge clk or negedge rst)
if(!rst)begincarriers <= 4'b000;yreg <= 2'b00;end
elsebegincase(count)3'b000:beginyreg <= xreg;carriers <= 4'b1100;end3'b010:carriers <= 4'b1001;3'b100:carriers <= 4'b0011;3'b110:carriers <= 4'b0110;default:carriers <= carriers;endcaseend
endmodule

参考资料:

1、基于Verilog HDL的通信系统设计  陈曦

Verilog学习笔记 (四)QPSK调制实现相关推荐

  1. 【Verilog学习笔记】D触发器(门级和行为级)+4位寄存器+一个完整的激励程序

    [Verilog学习笔记]D触发器(门级和行为级)+4位寄存器+一个完整的激励程序 首先展示以下完整的程序 `timescale 1ns / 1psmodule hardreg( input wire ...

  2. Verilog学习笔记——入门

    Verilog学习笔记 01 基本逻辑门代码设计与仿真 Veriog基本逻辑门代码结构--以一位反相器为例 ModelSim仿真基本流程 02 组合逻辑代码设计与仿真--多路选择器 二选一逻辑--as ...

  3. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  4. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  5. RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决)

    RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) 参考文章: (1)RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) (2)https://www.cnblogs. ...

  6. JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档

    POI操作excel的确很优秀,操作word的功能却不敢令人恭维.我们可以利用iText生成rtf文档,扩展名使用doc即可. 使用iText生成rtf,除了iText的包外,还需要额外的一个支持rt ...

  7. Ethernet/IP 学习笔记四

    Ethernet/IP 学习笔记四 EtherNet/IP Quick Start for Vendors Handbook (PUB213R0): https://www.odva.org/Port ...

  8. OpenCV学习笔记四-image的一些整体操作

    title: OpenCV学习笔记四-image的一些整体操作 categories: 编程 date: 2019-08-08 12:50:47 tags: OpenCV image的一些操作 sP4 ...

  9. 吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码

    吴恩达<机器学习>学习笔记四--单变量线性回归(梯度下降法)代码 一.问题介绍 二.解决过程及代码讲解 三.函数解释 1. pandas.read_csv()函数 2. DataFrame ...

  10. esp8266舵机驱动_arduino开发ESP8266学习笔记四—–舵机

    arduino开发ESP8266学习笔记四-–舵机 使用时发现会有ESP8266掉电的情况,应该是板上的稳压芯片的限流导致的,观测波形,发现当舵机运转时,电源线3.3V不再是稳定的3.3V,大概是在3 ...

最新文章

  1. java 终极超类,Java问答:终极父类(3),java问答
  2. STM32固件库文件树及构成详解
  3. 日常生活小技巧 -- 惠普 Windows10 进入安全模式
  4. Nginx server_name正则表达式匹配配置
  5. 闪光问题的手术治疗的副作用(重要)
  6. python 打造一个sql注入脚本 (一)
  7. CentOS下安装MySQL报安装文件conflicts错误:
  8. 信息学奥赛一本通(1312:【例3.4】昆虫繁殖)
  9. [ES6] 细化ES6之 -- 数组的扩展
  10. UNIX环境高级编程 学习笔记 第十八章 终端I/O
  11. Python的运行环境
  12. 这有几个常见的电脑故障解决方法,需要的朋友快来
  13. LIS的O(nlogn)算法(二分)
  14. 小米电脑重装系统后亮度无法调节的解决办法
  15. 如何使用固定资产管理系统进行固定资产盘点?
  16. 网页访问时页面错误代码含义
  17. Python练习题1.变量类型练习 华氏温度转摄氏温度 圆面积周长计算 判断闰年
  18. Photoshop设计LOGO详细介绍
  19. UDEC v4.00.153 1CD(完全安装版)
  20. E63(S60V3)硬格锁码解不开怎么办?—NSS的使用

热门文章

  1. 飘云阁论坛出品汇编逆向专用记事本
  2. vs2010旗舰版产品密钥
  3. 在电脑上怎么做报表新手_电脑excel表格数据图-初学者在电脑上如何制作电子表格...
  4. 取消开机就弹出 msn中文网 操作步骤
  5. stm32 LCD1602显示
  6. FL Studio20.9水果软件高级中文版电音编曲
  7. 平板波导 matlab,非对称平板波导色散曲线求解(附matlab程序).doc
  8. 如何修改修改服务器风扇转速,DELL服务器手动调整风扇转速
  9. 下载代码的两种方式ssh 和 https
  10. 2021年最完整的html网页跳转代码大全