Verilog学习笔记 (四)QPSK调制实现
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调制实现相关推荐
- 【Verilog学习笔记】D触发器(门级和行为级)+4位寄存器+一个完整的激励程序
[Verilog学习笔记]D触发器(门级和行为级)+4位寄存器+一个完整的激励程序 首先展示以下完整的程序 `timescale 1ns / 1psmodule hardreg( input wire ...
- Verilog学习笔记——入门
Verilog学习笔记 01 基本逻辑门代码设计与仿真 Veriog基本逻辑门代码结构--以一位反相器为例 ModelSim仿真基本流程 02 组合逻辑代码设计与仿真--多路选择器 二选一逻辑--as ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决)
RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) 参考文章: (1)RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) (2)https://www.cnblogs. ...
- JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档
POI操作excel的确很优秀,操作word的功能却不敢令人恭维.我们可以利用iText生成rtf文档,扩展名使用doc即可. 使用iText生成rtf,除了iText的包外,还需要额外的一个支持rt ...
- Ethernet/IP 学习笔记四
Ethernet/IP 学习笔记四 EtherNet/IP Quick Start for Vendors Handbook (PUB213R0): https://www.odva.org/Port ...
- OpenCV学习笔记四-image的一些整体操作
title: OpenCV学习笔记四-image的一些整体操作 categories: 编程 date: 2019-08-08 12:50:47 tags: OpenCV image的一些操作 sP4 ...
- 吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码
吴恩达<机器学习>学习笔记四--单变量线性回归(梯度下降法)代码 一.问题介绍 二.解决过程及代码讲解 三.函数解释 1. pandas.read_csv()函数 2. DataFrame ...
- esp8266舵机驱动_arduino开发ESP8266学习笔记四—–舵机
arduino开发ESP8266学习笔记四-–舵机 使用时发现会有ESP8266掉电的情况,应该是板上的稳压芯片的限流导致的,观测波形,发现当舵机运转时,电源线3.3V不再是稳定的3.3V,大概是在3 ...
最新文章
- java 终极超类,Java问答:终极父类(3),java问答
- STM32固件库文件树及构成详解
- 日常生活小技巧 -- 惠普 Windows10 进入安全模式
- Nginx server_name正则表达式匹配配置
- 闪光问题的手术治疗的副作用(重要)
- python 打造一个sql注入脚本 (一)
- CentOS下安装MySQL报安装文件conflicts错误:
- 信息学奥赛一本通(1312:【例3.4】昆虫繁殖)
- [ES6] 细化ES6之 -- 数组的扩展
- UNIX环境高级编程 学习笔记 第十八章 终端I/O
- Python的运行环境
- 这有几个常见的电脑故障解决方法,需要的朋友快来
- LIS的O(nlogn)算法(二分)
- 小米电脑重装系统后亮度无法调节的解决办法
- 如何使用固定资产管理系统进行固定资产盘点?
- 网页访问时页面错误代码含义
- Python练习题1.变量类型练习 华氏温度转摄氏温度 圆面积周长计算 判断闰年
- Photoshop设计LOGO详细介绍
- UDEC v4.00.153 1CD(完全安装版)
- E63(S60V3)硬格锁码解不开怎么办?—NSS的使用
热门文章
- 飘云阁论坛出品汇编逆向专用记事本
- vs2010旗舰版产品密钥
- 在电脑上怎么做报表新手_电脑excel表格数据图-初学者在电脑上如何制作电子表格...
- 取消开机就弹出 msn中文网 操作步骤
- stm32 LCD1602显示
- FL Studio20.9水果软件高级中文版电音编曲
- 平板波导 matlab,非对称平板波导色散曲线求解(附matlab程序).doc
- 如何修改修改服务器风扇转速,DELL服务器手动调整风扇转速
- 下载代码的两种方式ssh 和 https
- 2021年最完整的html网页跳转代码大全