文档库 最新最全的文档下载
当前位置:文档库 › QPSK调制解调Verilog代码

QPSK调制解调Verilog代码

QPSK调制解调Verilog代码
QPSK调制解调Verilog代码

不知道怎么写test bench,不会设置那些信号。求大神帮忙。下面是关于调制部分的veril og代码

module qq(clk,reset,x,y);

input [7:0] clk; //系统工作时钟

input [7:0] reset; //系统控制信号????

input [7:0] x; //系统输入信号

output [7:0] y; //QPSK调制输出信号

reg[2:0]cnt; //计数器

reg[1:0]x_x; //输入信号的中间寄存器

reg[3:0]carriers; //4路载波信号

reg[1:0]y_y;

//完成计数器,以期对模块时钟分频

always @(posedge clk)begin

if(!reset)

cnt<=3'b000; //非阻塞赋值。当无系统控制信号时,计数器为0

else

cnt<=cnt+1; //当出现系统控制信号时,计数器+1

end

//寄存器输入

always @(posedge clk)begin

if(!reset)

x_x<=2'b00; //当无系统控制信号时,无信号输入

else

if(cnt[1:0]==2'b11) //对cnt的低两位进行判断

x_x<={x_x[0],x};

else

x_x<=x_x;

end

//产生载波信号

always@(posedge clk)begin

if(!reset)

carriers<=4'b0000; //当无系统控制信号时,无载波

else begin

case(cnt)

3'b000:begin

y_y<=x_x;

carriers<=4'b1100; //cnt为0时,对应相位为0的载波波形end //变化4????

3'b010:carriers<=4'b1001; //cnt为0时,对应相位为π/2的载波波形

3'b100:carriers<=4'b0011; //cnt为0时,对应相位为π的载波波形

3'b110:carriers<=4'b0110; //cnt为0时,对应相位为3π/2的载波波形

default:carriers<=carriers;

endcase

end

end

//完成调制

//输出信号y比输入信号x延时8个clk的周期,这是由于赋值给寄存器所造成的。assign y=(y_y==2'b00)?carriers[3]: //检测输入信号,判定输出波形。

(y_y==2'b01)?carriers[2]:

(y_y==2'b10)?carriers[1]:

(y_y==2'b11)?carriers[0]:0;

endmodule

VerilogHDL经典程序非常适合新手

一、2线-4线译码器 module counter4(q1,q0,ncr,cp); input cp,ncr; output q1,q0; reg q1,q0; always@(posedge cp or negedge ncr) begin if(~ncr){q1,q0}<=2'b00; else{q1,q0}<={q1,q0}+1'b1; end endmodule 二、4选1数据选择器 module selector4_1(i0,i1,i2,i3,a1,a0,y); input i0,i1,i2,i3,a1,a0; output y; reg y; always@(a1or a0) begin case({a1,a0}) 2'b00:y=i0; 2'b01:y=i1; 2'b10:y=i2; 2'b11:y=i3; default:y=0; 一、2线-4线译码器 module counter4(q1,q0,ncr,cp); input cp,ncr; output q1,q0; reg q1,q0; always@(posedge cp or negedge ncr) begin if(~ncr){q1,q0}<=2'b00; else{q1,q0}<={q1,q0}+1'b1; end endmodule 二、4选1数据选择器 module selector4_1(i0,i1,i2,i3,a1,a0,y); input i0,i1,i2,i3,a1,a0; output y; reg y; always@(a1or a0) begin case({a1,a0}) 2'b00:y=i0;

QPSK调制解调完整程序(配有自己的注释)

QPSK调制解调完整程序(配有注释) clc; clear all; %假定接收端已经实现载波同步,位同步(盲信号解调重点要解决的问题:载波同步(costas环(未见到相关代码)),位同步(Gardner算法(未见相关代码)),帧同步) % carrier frequency for modulation and demodulation fc=5e6; %QPSK transmitter data=5000 ; %码数率为5MHZ %原码个数 rand_data=randn(1,5000); for i=1:data if rand_data(i)>=0.5 rand_data(i)=1; else rand_data(i)=0; end end %seriel to parallel %同时单极性码转为双极性码 for i=1:data if rem(i,2)==1 if rand_data(i)==1 I(i)=1; I(i+1)=1; else I(i)=-1; I(i+1)=-1; end else if rand_data(i)==1 Q(i-1)=1; Q(i)=1; else Q(i-1)=-1; Q(i)=-1; end end end % zero insertion ,此过程称为成形。成形的意思就是实现由消息到波形的转换,以便发射,脉冲成形应该是在基带调制之后。 zero=5; %sampling rate 25M HZ ,明白了,zero为过采样率。它等于采样率fs/码速率。

for i=1:zero*data % 采样点数目=过采样率*原码数目 if rem(i,zero)==1 Izero(i)=I(fix((i-1)/zero)+1); Qzero(i)=Q(fix((i-1)/zero)+1); else Izero(i)=0; Qzero(i)=0; end end %pulse shape filter,接着,将进行低通滤波,因为随着传输速率的增大,基带脉冲的频谱将变宽 %如果不滤波(如升余弦滤波)进行低通滤波,后面加载频的时候可能会出现困难。 %平方根升余弦滤波器 % psf=rcosfir(rf,n_t,rate,fs,'sqrt') rate:过采样率,rf:滚降因子,n_t:滤波器阶数,fs:采样率 %用在调制或发送之前,用在解调或接受之后,用来降低过采样符号流带宽并不引发ISI(码间串扰) NT=50; N=2*zero*NT; % =500 fs=25e6; rf=0.1; psf=rcosfir(rf,NT,zero,fs,'sqrt');% psf大小为500 Ipulse=conv(Izero,psf); Qpulse=conv(Qzero,psf); %为什么数字信号传输也要过采样,成形滤波? %答:过采样的数字信号处理起来对低通滤波器的要求相对较低,如果不过采样,滤波的时候滤波器需要很陡峭,指标会很严格 %成形滤波的作用是保证采样点不失真。如果没有它,那信号在经过带限信道后,眼图张不开,ISI非常严重。成形滤波的位置在基带调制之后。 %因为经成形滤波后,信号的信息已经有所损失,这也是为避免ISI付出的代价。换句话说,成形滤波的位置在载波调制之前,仅挨着载波调制。 %即:(发送端)插值(采样)-成形-滤波(LPF)-加载频(载波调制)-加噪声至(接收端)乘本振-低通-定时抽取-判决。 %modulation for i=1:zero*data+N %采样点数目改变(因为卷积的缘故) t(i)=(i-1)/(fs); %这里因为假设载频与码速率大小相等,所以用载频fc 乘以过采样率=采样率。 Imod(i)=Ipulse(i)*sqrt(2)*cos(2*pi*fc*t(i)); Qmod(i)=Qpulse(i)*(-sqrt(2)*sin(2*pi*fc*t(i))); end sum=Imod+Qmod;

QPSK调制解调的simulink仿真

QPSK 调制解调的simulink 仿真与性能分析 一、 设计目的和意义 学会使用MATLAB 中的simulink 仿真软件,了解其各种模块的功能,用simulink 实现QPSK 的调制和仿真过程,得到调制信号经高斯白噪声信道,再通过解调恢复原始信号,绘制出调制前后的频谱图,分析QPSK 在高斯信道中的性能,计算传输过程中的误码率。通过此次设计,在仿真中形象的感受到QPSK 的调制和解调过程,有利于深入了解QPSK 的原理。同时掌握了simulink 的使用,增强了我们学习通信的兴趣,培养通信系统的仿真建模能力。 二、 设计原理 (一)QPSK 星座图 QPSK 是Quadrature Phase Shift Keying 的简称,意为正交移相键控,是数字调制的 一种方式。它规定了四种载波相位,分别为0, 2π, π,32π (或者4 π,34π,54π,74π),星座图如图1(a )、(b )所示。 图1 QPSK 星座图 (二)QPSK 的调制 因为输入信息是二进制序列,所以需要将二进制数据变换成四进制数据,才能和四进制的载波相位配合起来。采取的办法是将二进制数字序列中每两个序列分成一组,共四种组合(00,01,10,11),每一组称为双比特码元。每一个双比特码元是由两位二进制 (a ) (b )

信息比特组成,它们分别代表四进制四个符号中的一个符号。QPSK 每次调制可传输两个信息比特。图2的(a )、(b)、(c)原理框图即为QPSK 的三种调制方式,本次课程设计主要采用的是正交调制方式。 (三)QPSK 的解调 QPSK 信号可以用两个正交的载波信号实现相干解调,它的相干解调器如图3所示,正交路分别设置两个匹配滤波器,得到I (t )和Q (t ),经电平判决和并转串即可恢复出原始信息。 (a )正交调制法 (b )相位选择法 (c )脉冲插入法 图2 QPSK 的主要调制方式

74LS138Verilog源码

`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 2020/02/28 13:40:03 // Design Name: // Module Name: _74ls138 // Project Name: // Target Devices: // Tool Versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // ////////////////////////////////////////////////////////////////////////////////// module _74ls138(nE1,nE2,E3,B,nY); input nE1,nE2,E3; input [2:0]B; output[7:0]nY; reg[7:0]nY; always@(nE1,nE2,E3,B) if(!nE1 && !nE2 && E3) begin case(B) 3'b000: nY = 8'b1111_1110; 3'b001: nY = 8'b1111_1101; 3'b010: nY = 8'b1111_1011; 3'b011: nY = 8'b1111_0111; 3'b100: nY = 8'b1110_1111; 3'b101: nY = 8'b1101_1111; 3'b110: nY = 8'b1011_1111; 3'b111: nY = 8'b0111_1111; default:nY = 8'b1111_1111; endcase end

VERILOG语言编写规范

VERILOG语言编写规范 1 目的 本规范的目的是提高书写代码的可读性可修改性可重用性,优化代码综合和仿真结果,指导设计工程师使用VerilogHDL规范代码和优化电路,规范化公司的ASIC设计输入从而做到 1. 逻辑功能正确 2.可快速仿真 3. 综合结果最优如果是hardware model) 4. 可读性较好。 2 范围 本规范涉及Verilog HDL编码风格,编码中应注意的问题, Testbench的编码等。 本规范适用于Verilog model的任何一级( RTL behavioral, gate_level),也适用于出于仿真,综合或二者结合的目的而设计的模块。 3 定义 Verilog HDL : Verilog 硬件描述语言 FSM :有限状态机 伪路径:静态时序分析( STA)认为是时序失败,而设计者认为是正确的路径 4 引用标准和参考资料 下列标准包含的条文通过在本标准中引用而构成本标准的条文在标准出版时所示版本 均为有效所有标准都会被修订使用本标准的各方应探讨使用下列标准最新版本的可能性 Actel HDLCoding Style Guider Sun Microsystems Revision 1.0 VerilogStyle and Coding Guidelines 5 规范内容 5.1 Verilog 编码风格

本章节中提到的Verilog编码规则和建议适应于 Verilog model的任何一级( RTL behavioral,gate_level) 也适用于出于仿真,综合或二者结合的目的而设计的模块。 5.1.1 命名规范 选择有意义的信号和变量名,对设计是十分重要的。命名包含信号或变量诸如出处,有效状态等基本含义下面给出一些命名的规则。 1. 用有意义而有效的名字 有效的命名有时并不是要求将功能描述出来如 For ( I = 0; I < 1024; I = I + 1 ) Mem[I]<= #1 32’b0; For 语句中的循环指针I 就没必要用loop_index作为指针名。 2. 用连贯的缩写 长的名字对书写和记忆会带来不便,甚至带来错误采用缩写时应注意同一信号在模块中的一致性。缩写的例子如下: Addr address Pntr pointer Clk clock Rst reset 3. 用名字前加小写n表示低电平有效高电平有效的信号不得以下划线表示短暂 的引擎信号建议采用高有效 如 nRst, nTrdy, nIrdy nIdsel. 4. 大小写原则 名字一般首字符大写,其余小写(但parameter, integer 定义的数值名可全部用大写),两个词之间要用下划线连接(或第二个单词首字母大写) 如 :Packet_addr, Data_in, Mem_wr , Mem_ce_ Or: PacketAddr, DataIn, MemWr , MemCe 5.全局信号名字中应包含信号来源的一些信息 如: D_addr[7:2] 这里的 D 指明了地址是解码模块(Decoder module)中的地址.

通信原理实验 QPSK调制解调实验

HUNAN UNIVERSITY 课程实验报告 题目:十QPSK调制解调实验 指导教师: 学生姓名: 学生学号: 专业班级:

实验10 QPSK调制解调实验 一、实验目的 1. 掌握QPSK调制解调的工作原理及性能要求;了解IQ调制解调原理及特性 2. 进行QPSK调制、解调实验,掌握电路调整测试方法了解载波在QPSK相干及非相干时的解调特性 二、实验原理 1、QPSK调制原理 QPSK又叫四相绝对相移调制,它是一种正交相移键控。QPSK利用载波的四种不同相位来表征数字信息。由于每一种载波相位代表两个比特信息,因此,对于输入的二进制数字序列应该先进行分组,将每两个比特编为一组,然后用四种不同的载波相位来表征。 用调相法产生QPSK调制原理框图如图所示,QPSK的调制器可以看作是由两个BPSK调 制器构成,输入的串行二进制信息序列经过串行变换,变成两路速率减半的序列,电平发生器分别产生双极性的二电平信号I(t)和Q(t),然后对Acosωt和Asinωt进行调制,相 加后即可得到QPSK信号。 二进制码经串并变换后的码型如图所示,一路为单数码元,另外一路为偶数码元,这两个支路互为正交,一个称为同相支路,即I支路;另外一路称为正交支路,即Q支路

2、QPSK解调原理 由于QPSK可以看作是两个正交2PSK信号的合成,故它可以采用与2PSK信号类似的解调方法进行解调,即由两个2PSK信号相干解调器构成,其原理框图如图 三、实验步骤 在实验箱上正确安装基带成形模块(以下简称基带模块)、IQ调制解调模块(以下简称IQ模块)、码元再生模块(以下简称再生模块)和PSK载波恢复模块。 1、QPSK调制实验 a、关闭实验箱总电源,用台阶插座线完成连接 * 检查连线是否正确,检查无误后打开电源。 b、按基带成形模块上“选择”键,选择QPSK模式(QPSK指示灯亮)。 c、用示波器观察基带模块上“NRZ-I,I-OUT,NRZ-Q,Q-OUT”的信号;并分别与“NRZ IN”信号进行对比,观察串并转换情况。 NRZ-I 与NRZ IN I-OUT与NRZ IN NRZ-Q 与NRZ IN Q-OUT与NRZ IN d、观测IQ调制信号矢量图。

全数字锁相环的verilog源代码讲解

支持论坛发展帖出全数字锁相环的verilog源代码,仿真已通过 module dpll(reset,clk,signal_in,signal_out,syn; parameter para_K=4; parameter para_N=16; input reset; input clk; input signal_in; output signal_out; output syn; reg signal_out; reg dpout; reg delclk; reg addclk; reg add_del_clkout; reg [7:0]up_down_cnt; reg [2:0]cnt8; reg [8:0]cnt_N; reg syn; reg dpout_delay; reg [8:0]cnt_dpout_high; reg [8:0]cnt_dpout_low; /******phase detector*****/ always@(signal_in or signal_out begin dpout<=signal_in^signal_out; end /******synchronization establish detector*****/ always@(posedge clk or negedge reset begin if(!reset dpout_delay<='b0; else dpout_delay<=dpout; end always@(posedge clk or negedge reset begin if(!reset begin cnt_dpout_high<='b0; cnt_dpout_low<='b0; end else if(dpout if(dpout_delay==0 cnt_dpout_high<='b0; else if(cnt_dpout_high==8'b11111111 cnt_dpout_high<='b0; else cnt_dpout_high<=cnt_dpout_high+1; else if(!dpout if(dpout_delay==1 cnt_dpout_low<='b0; else if(cnt_dpout_low==8'b11111111 cnt_dpout_low<='b0; else cnt_dpout_low<=cnt_dpout_low+1; end always@(posedge clk or negedge reset begin if(!reset syn<='b0; else if((dpout&&!dpout_delay||(!dpout&&dpout_delay if(cnt_dpout_high[8:0]-cnt_dpout_low[8:0]<=4||cnt_dpout_low[8:0]- cnt_dpout_high[8:0]<=4 syn<='b1; else syn<='b0; end /****up down couter with mod=K****/ always@(posedge clk or negedge reset begin if(!reset begin delclk<='b0; addclk<='b0; up_down_cnt<='b00000000; end else begin if(!dpout begin delclk<='b0; if(up_down_cnt==para_K-1 begin up_down_cnt<='b00000000; addclk<='b0; end else begin up_down_cnt<=up_down_cnt+1; addclk<='b0; end end else begin addclk<='b0; if(up_down_cnt=='b0 begin up_down_cnt<=para_K-1; delclk<='b0; end else if(up_down_cnt==1 begin delclk<='b1; up_down_cnt<=up_down_cnt-1; end else up_down_cnt<=up_down_cnt-1; end end end /******add and delete clk*****/ always@(posedge clk or negedge reset begin if(!reset begin cnt8<='b000; end else begin if(cnt8=='b111 begin cnt8<='b000; end else if(addclk&&!syn begin cnt8<=cnt8+2; end else if(delclk&&!syn

VERYLOG编码规范

Verilog编码规范! 一. 强调Verilog代码编写风格的必要性。 强调Verilog代码编写规范,经常是一个不太受欢迎的话题,但却是非常有必要的。 每个代码编写者都有自己的编写习惯,而且都喜欢按照自己的习惯去编写代码。与自己编写风格相近的代码,阅读起来容易接受和理解。相反和自己编写风格差别较大的代码,阅读和接受起来就困难一些。 曾有编程大师总结说,一个优秀的程序员,能维护的代码长度大约在1万行数量级。代码的整洁程度,很大程度上影响着代码的维护难度。 遵循代码编写规范书写的代码,很容易阅读、理解、维护、修改、跟踪调试、整理文档。相反代码编写风格随意的代码,通常晦涩、凌乱,会给开发者本人的调试、修改工作带来困难,也会给合作者带来很大麻烦。 (实际上英文Coding Style有另一层涵义,更偏重的是,某一个电路,用那一种形式的语言描述,才能将电路描述得更准确,综合以后产生的电路更合理。本文更偏重的是,编写Verilog代码时的书写习惯。) 二. 强调编写规范的宗旨。 缩小篇幅 提高整洁度 便于跟踪、分析、调试 增强可读性,帮助阅读者理解 便于整理文档 便于交流合作 三. 变量及信号命名规范。 1. 系统级信号的命名。 系统级信号指复位信号,置位信号,时钟信号等需要输送到各个模块的全局信号;系统信号以字符串Sys开头。 2. 低电平有效的信号后一律加下划线和字母n。如:SysRst_n;FifoFull_n; 3. 经过锁存器锁存后的信号,后加下划线和字母r,与锁存前的信号区别。如CpuRamRd信号,经锁存后应命名为CpuRamRd_r。 低电平有效的信号经过锁存器锁存后,其命名应在_n后加r。如CpuRamRd_n信号,经锁存后应命名为CpuRamRd_nr 多级锁存的信号,可多加r以标明。如CpuRamRd信号,经两级触发器锁存后,应命名为CpuRamRd_rr。 4. 模块的命名。 在系统设计阶段应该为每个模块进行命名。命名的方法是,将模块英文名称的各个单词首字母组合起来,形成3到5个字符的缩写。若模块的英文名只有一个单词,可取该单词的前3个字母。各模块的命名以3个字母为宜。例如: Arithmatic Logical Unit模块,命名为ALU。 Data Memory Interface模块,命名为DMI。

BPSK和QPSK调制解调原理及MATLAB程序

2.1 PSK调制方式 PSK原理介绍(以2-PSK为例) 移相键控(PSK)又称为数字相位调制,二进制移相键控记作2PSK。绝对相移是利用载波的相位(指初相)直接表示数字信号的相移方式。二进制相移键控中,通常用相位0 和π来分别表示“0”或“1”。2PSK 已调信号的时域表达式为s2psk(t)=s(t)cosωct, 2PSK移相键控中的基带信号与频移键控和幅度键控是有区别的,频移键控和幅度键控为单极性非归零矩形脉冲序列,移相键控为为双极性数字基带信号,就模拟调制法而言,与产生2ASK 信号的方法比较,只是对s(t)要求不同,因此2PSK 信号可以看作是双极性基带信号作用下的DSB 调幅信号。 在二进制数字调制中,当正弦载波的相位随二进制数字基带信号离散变化时,则产生二进制移相键控(2PSK)信号。通常用已调信号载波的 0°和 180°分别表示二进制数字基带信号的 1 和 0。二进制移相键控信号的时域表达式为 e2PSK(t)=[ n n a g(t-nT s)]cosw c t 其中, an与2ASK和2FSK时的不同,在2PSK调制中,an应选择双极性。 1, 发送概率为P an= -1, 发送概率为1-P 若g(t)是脉宽为Ts, 高度为1的矩形脉冲时,则有 cosωct, 发送概率为P e2PSK(t)= -cosωct, 发送概率为1-P 由上式(6.2-28)可看出,当发送二进制符号1时,已调信号e2PSK(t)取0°相位,发送二进制符号0时,e2PSK(t)取180°相位。若用φn表示第n个符号的绝对相位,则有 0°, 发送 1 符号 φn= 180°, 发送 0 符号 由于在2PSK信号的载波恢复过程中存在着180°的相位模糊,所以2PSK信

verilog有限状态机实验报告(附源代码)

有限状态机实验报告 一、实验目的 ●进一步学习时序逻辑电路 ●了解有限状态机的工作原理 ●学会使用“三段式”有限状态机设计电路 ●掌握按键去抖动、信号取边沿等处理技巧 二、实验内容 用三段式有限状态机实现序列检测功能电路 a)按从高位到低位逐位串行输入一个序列,输入用拨动开关实现。 b)每当检测到序列“1101”(不重叠)时,LED指示灯亮,否则灭,例如 i.输入:1 1 0 1 1 0 1 1 0 1 ii.输出:0 0 0 1 0 0 0 0 0 1 c)用八段数码管显示最后输入的四个数,每输入一个数,数码管变化一次 d)按键按下的瞬间将拨动开关状态锁存 i.注意防抖动(按键按下瞬间可能会有多次的电平跳变) 三、实验结果 1.Rst_n为0时数码管显示0000,led灯不亮,rst_n拨为1,可以开始输入,将输 入的开关拨到1,按下按钮,数码管示数变为0001,之后一次类推分别输入1, 0,1,按下按钮后,数码管为1101,LED灯亮,再输入1,LED灯灭,之后再输 入0,1(即共输入1101101使1101重叠,第二次LED灯不亮),之后单独输入

1101,LED灯亮 2.仿真图像 刚启动时使用rst_n 一段时间后 其中Y代表输出,即控制led灯的信号,sel表示数码管的选择信号,seg表示数码管信号 四、实验分析 1、实验基本结构

其中状态机部分使用三段式结构: 2、整体结构为:

建立一下模块: Anti_dither.v 输入按键信号和时钟信号,输出去除抖动的按键信号生成的脉冲信号op 这一模块实现思路是利用按钮按下时会持续10ms以上而上下抖动时接触时间不超过10ms来给向下接触的时间计时,达到上限时间才产生输出。 Num.v 输入op和序列输入信号A,时钟信号clk和复位信号,复位信号将num置零,否则若收到脉冲信号则将num左移一位并将输入存进最后一位。输出的num即为即将在数码管上显示的值 Scan.v 输入时钟信号,对其降频以产生1ms一次的扫描信号。 Trigger.v 这一模块即为状态机模块,按三段式书写。 整个模块的输入为时钟信号,脉冲信号,序列输入变量,复位信号,输出LED灯控制信号Y。 第一段是状态转换模块,为时序逻辑电路,功能是描述次态寄存器迁移到现态寄存器。即如果收到复位信号将现态置零,否则将上次得到的next_state赋给current_state。

QPSK调制解调完整程序(配有自己的注释)知识分享

Q P S K调制解调完整程序(配有自己的注释)

QPSK调制解调完整程序(配有注释) clc; clear all; %假定接收端已经实现载波同步,位同步(盲信号解调重点要解决的问题:载波同步(costas环(未见到相关代码)),位同步(Gardner算法(未见相关代码)),帧同步) % carrier frequency for modulation and demodulation fc=5e6; %QPSK transmitter data=5000 ; %码数率为5MHZ %原码个数 rand_data=randn(1,5000); for i=1:data if rand_data(i)>=0.5 rand_data(i)=1; else rand_data(i)=0; end end %seriel to parallel %同时单极性码转为双极性码 for i=1:data if rem(i,2)==1 if rand_data(i)==1 I(i)=1; I(i+1)=1; else I(i)=-1; I(i+1)=-1; end else if rand_data(i)==1 Q(i-1)=1; Q(i)=1; else Q(i-1)=-1; Q(i)=-1; end

end end % zero insertion ,此过程称为成形。成形的意思就是实现由消息到波形的转换,以便发射,脉冲成形应该是在基带调制之后。 zero=5; %sampling rate 25M HZ ,明白了,zero为过采样率。它等于采样率fs/码速率。 for i=1:zero*data % 采样点数目=过采样率*原码数目 if rem(i,zero)==1 Izero(i)=I(fix((i-1)/zero)+1); Qzero(i)=Q(fix((i-1)/zero)+1); else Izero(i)=0; Qzero(i)=0; end end %pulse shape filter,接着,将进行低通滤波,因为随着传输速率的增大,基带脉冲的频谱将变宽 %如果不滤波(如升余弦滤波)进行低通滤波,后面加载频的时候可能会出现困难。 %平方根升余弦滤波器 % psf=rcosfir(rf,n_t,rate,fs,'sqrt') rate:过采样率,rf:滚降因子,n_t:滤波器阶数,fs:采样率 %用在调制或发送之前,用在解调或接受之后,用来降低过采样符号流带宽并不引发ISI(码间串扰) NT=50; N=2*zero*NT; % =500 fs=25e6; rf=0.1; psf=rcosfir(rf,NT,zero,fs,'sqrt');% psf大小为500

第5章-Verilog HDL语法规范(第10讲)-5.10

Verilog HDL语言规范

Verilog HDL 行为描述语句 本部分介绍行为描述语句。通过行为级建模把一个复杂的系统分解成可操作的若干个模块,每个模块之间的逻辑关系通过行为模块的仿真加以验证。同时行为级建模还可以用来生成仿真激励信号,对已设计模块进行仿真验证。

Verilog HDL 行为描述语句 --过程语句 过程分配用于更新reg,integer,time,real, realtime和存储器数据类型。对于过程分配和连续分配来说,有下面的不同之处: ?连续分配 连续分配驱动网络。只要一个输入操作数的值发生变化,则更新和求取所驱动网络的值。 ?过程分配 在过程流结构的控制下,过程分配更新流结构内变量的值。

Verilog HDL 行为描述语句 --过程语句 过程分配的右边可以是求取值的任何表达式。左边应该是一个变量,它接收右边表达式分配的值。 过程分配的左边可以是下面的一种格式: ?reg 、integer 、real 、realtime 或者time 数据类型分配给这些数据类型所引用的名字。 ?reg 、integer 、real 、realtime 或者time 数据类型的位选择分配到单个的比特位

Verilog HDL 行为描述语句 --过程语句 ?reg 、integer 、real 、realtime 或者time 数据类型的部分选择一个或者多个连续的比特位的部分选择。 ?存储器字 存储器的单个字 ?任何上面的并置(连接)或者嵌套的并置(连接) 上面四种形式的并置或者嵌套的并置。这些语句对右边的表达式进行有效的分割,将分割的部分按顺序分配到并置或者嵌套并置的不同部分中。

实验九 QPSK调制与解调

实验九、QPSK 、QDPSK 调制与解调 一、实验目的 1、掌握QPSK 调制与解调的基本原理及实现方法。 2、掌握QDPSK 调制与解调的基本原理及实现方法。 3、分析QPSK 、QDPSK 系统的有效性和可靠性。 二、实验原理 为提高通信的有效性,最常用的办法的是采用多进制的数字调制。MPSK 和MDPSK 就是多进制的数字相移键控即多相制信号,前者称为多进制绝对相移键控,后者称为多进制相对(差分)相移键控,它们都用M 个相位不同的载波来表示M 个不同的符号。一般来说,有n M 2=,因此,一个符号可以代表n bit 的二进制码元。 1、QPSK 信号分析 QPSK (Quadrature Phase Shift Keying ,正交相移键控)又叫四相绝对相移键控(4PSK ),它利用载波的四种不同相位来表征数字信息。由于每一种载波相位代表2bit 信息,故每个四进制符号又被称为双比特码元。把组成双比特码元的前一信息比特记为a 码,后一信息比特记为b 码,为使接收端误码率最小化,双比特码元(a ,b )通常按格雷码(Gray code )方式排列,即任意两个相邻的双比特码元之间只有一个比特发生变化。图9.1给出了双比特码元(a ,b )与载波相位的对应关系,其中图(a )表示A 方式,图(b )表示B 方式。 图9.1 QPSK 信号相位矢量图 (a )A 方式(2/π系统) (b )B 方式(4/π系统)

根据相位矢量图,得到双比特码元与载波相位之间的对应关系,如表9.1所示。 A 方式的QPSK 信号可表示为 )2 cos()cos()(πωθωn t t t s c n c +=+=,3 ,2 ,1 ,0=n B 方式的QPSK 信号可表示为 )4 1 2cos()cos()(πωθω++ =+=n t t t s c n c ,3 ,2 ,1 ,0=n 由于QPSK 信号普遍采用正交调制(又称IQ 调制)法产生,故QPSK 信号统一表示为 t Q t I t t s c c n c ωωθωsin cos )cos()(?-?=+= 这样,将a 码送入I 路,b 码送入Q 路,然后将I 路信号与载波t c ωcos 相乘,Q 路信号与正交载波t c ωsin 相乘,之后通过加法器相加,即可得到QPSK 信号。 2、QPSK 调制 以B 方式为例,QPSK 信号的产生方法有两种:一是正交调制法,二是相位选择法。 (1)正交调制(IQ 调制)法 二进制调相信号通常采用键控法,而多进制调相信号普遍采用IQ 调制法产生。正交调制法产生QPSK 信号的原理框图如图9.2所示,它可以看成由两个2PSK 调制器构成,上支路将a 码与余弦载波相乘,下支路将b 码与余弦载波相乘,这样产生载波相互正交的两路2PSK 信号,再将这两路信号相加,通过矢量合成便是QPSK 信号。 图9.2 正交调制法产生QPSK 信号 (a )原理框图 (b )矢量合成原理 图中输入的数字基带信号)(t A 是二进制的单极性不归零码,通过“串/并变换”电路变成并行的两路码元a 和b 后,其每个码元的传输时间是输入码元的2倍,且单极性信号将变为双极性信号。其变换关系式将“1”变为“+1”、“0”变为“-1”。“串/并变换”过程如图9.3所示,图中0、1、2等表示为二进制基带码元的序号。 从电路实现的角度看,串并变换实现了双比特码元和I 、Q 两路信号幅度之间的映射,如表9.2所示。IQ 信号幅度只有2种取值,设为2/1是为了保证输出QPSK 信号幅度为1。 ) 1(a )0(a ) 1(b ) 0(b ) 1 ,1() 0 ,0() 0 ,1() 1 ,0(

第10章例题verilog源代码(夏宇闻版)

第十章例题 module add_4( X, Y, sum, C); input [3 : 0] X, Y; output [3: 0] sum; output C; assign {C, Sum } = X + Y; endmodule //而16位加法器只需要扩大位数即可,见下例: module add_16( X, Y, sum, C); input [15 : 0] X, Y; output [15 : 0] sum; output C; assign {C, Sum } = X + Y; endmodule 快速乘法器常采用网格形式的迭带阵列结构,图10.3示出两个四位二进制数相乘的结构图,//用Verilog HDL来描述乘法器是相当容易的,只需要把运算表达式写出就可以了,见下例。module mult_4( X, Y, Product); input [3 : 0] X, Y; output [7 : 0] Product; assign Product = X * Y; endmodule // 而8位乘法器只需要扩大位数即可,见下例: module mult_8( X, Y, Product); input [7 : 0] X, Y; output [15 : 0] Product; assign Product = X * Y; endmodule

// 下面就是一个位数可以由用户定义的比较电路模块: module compare_n ( X, Y, XGY, XSY, XEY); input [width-1:0] X, Y; output XGY, XSY, XEY; reg XGY, XSY, XEY; parameter width = 8; always @ ( X or Y ) // 每当X 或Y 变化时 begin if ( X = = Y ) XEY = 1; // 设置X 等于Y的信号为1 else XEY = 0; if (X > Y) XGY = 1; // 设置X 大于Y的信号为1 else XGY = 0; if (X < Y) XSY = 1; // 设置X 小于Y的信号为1 else XSY = 0; end endmodule //下面就是带使能控制信号(nCS)的数据位宽可以由用户定义的(8位)八路数据通道选择器模块: module Mux_8( addr,in1, in2, in3, in4, in5, in6, in7, in8, Mout, nCS); input [2:0] addr; input [width-1:0] in1, in2, in3, in4, in5, in6, in7, in8; input nCS; output [width-1:0] Mout; parameter width = 8; always @ (addr or in1 or in2 or in3 or in4 or in5 or in6 or in7 or in8 or nCS) begin if (!nCS) //nCS 低电平使多路选择器工作 case(addr) 3’b000: Mout = in1; 3’b001: Mout = in2; 3’b010: Mout = in3; 3’b011: Mout = in4;

用verilog语言编写交通灯程序

交通灯 一、实验目的 写一个交通灯,要求: ①有东西南北四个方向,两组交通灯轮流交替变换,其中,红灯时间为30 个时间单位,绿灯时间为25个时间单位,黄灯时间为5个时间单位。最后用modelsim软件进行仿真。 ②要求设计是一个可综合设计。 二、实验原理 根据实验要求的逻辑功能描述,可以分析得出原理图如下: 根据实验要求画出控制器的状态转移图如下:

三、代码 1、源代码 (1)控制器模块 module traffic_lights(clk,rst,count,ew,sn); input clk,rst; input[5:0] count; output[2:0] ew,sn; reg[2:0] ew,sn; reg[3:0] state; parameter Idle=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100; always @(posedge clk) if(!rst) begin state<=Idle; end else casex(state) Idle: if(rst) begin state<=s1; end s1: if(count=='d25) begin state<=s2; end s2: if(count=='d30) begin state<=s3;

end s3: if(count=='d55) begin state<=s4; end s4: if(count=='d60) begin state<=s1; end endcase always @(posedge clk) begin if(!rst) begin ew<=3'b100; sn<=3'b100; end else casex(state) Idle: if(rst) begin ew<=3'b100; sn<=3'b001; end s1: if(count=='d25) begin ew<=3'b100; sn<=3'b010; end

QPSK调制解调

QPSK 即4PSK ,正交相移调制。 在看QPSK 之前,先看一下通信系统的调制解调的过程 为了方便分析,先假设这里是理想信道,没有噪声,接收端已经载波同步,位同步。 调制后的信号数学模型为:cos()c A w t φ+ 上述的x(t)被调制到了A,?上。 如果调制信息在A 上,就是调幅,如果调制信息在φ上,就是调相。 QPSK 正是通过调整φ的变化,来传输信息。φ分别取45135225,315????,,4个相位表示00,01,10,11表示4个信息,调制后的信号表达式为: cos(45),00cos(135),01()cos(225),10 cos(315),11c c c c A w t x A w t x s t A w t x A w t x ?????+=?+=?=?+=??+=? (cos cos 45sin sin 45),00(cos cos135sin sin135),01()(cos cos 225sin sin 225),10 (cos cos315sin sin 315),11c c c c c c c c A w t w t x A w t w t x s t A w t w t x A w t w t x ?????????-=?-=?=?-=??-=? sin ),00cos sin ),01()cos sin ),10sin ),11c c c c c c c c w t w t x w t w t x s t w t w t x w t w t x -=-+==--=+= 这样的话,我们调制任何一个信号,都可以转化为调制在同一时刻的两路上的幅度调制后再相加合并为一路输出,而调制模型cos()c A w t φ+中任意的A 和φ,根据正交分解的原理,又可以分解到两个相互正交个坐标轴上,这就是星座映射、IQ 分路的本质原理。又由于cos()sin()c jw t c c e w t j w t =+,所有我们又经常把需要IQ 分路的调制用c jw t e 这样的复数来表示,也经常说IQ 分别是实部,虚部。当然这么说是不准确的,IQ 两路就是同相和正交,而且默认的调制模型是cos()c A w t φ+,以上才成立。

基于FPGA的SDRAM实验Verilog源代码

// megafunction wizard: %ALTPLL% // GENERATION: STANDARD // VERSION: WM1.0 // MODULE: altpll // ============================================================ // File Name: clk_ctrl.v // Megafunction Name(s): // altpll // // Simulation Library Files(s): // altera_mf // ============================================================ // ************************************************************ // THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! // // 11.0 Build 208 07/03/2011 SP 1 SJ Full Version // ************************************************************ //Copyright (C) 1991-2011 Altera Corporation //Your use of Altera Corporation's design tools, logic functions //and other software and tools, and its AMPP partner logic //functions, and any output files from any of the foregoing //(including device programming or simulation files), and any //associated documentation or information are expressly subject //to the terms and conditions of the Altera Program License //Subscription Agreement, Altera MegaCore Function License //Agreement, or other applicable license agreement, including, //without limitation, that your use is for the sole purpose of //programming logic devices manufactured by Altera and sold by //Altera or its authorized distributors. Please refer to the //applicable agreement for further details. // synopsystranslate_off `timescale 1 ps / 1 ps // synopsystranslate_on moduleclk_ctrl ( areset, inclk0, c0, c1, c2,

相关文档