2ASK调制解调的VERILOG程序代码

2ASK调制解调的VERILOG程序代码
2ASK调制解调的VERILOG程序代码

调制模块

module two_ASK(clk,reset,x,y); input clk;

input reset;

input x;

output y;

reg[1:0]cnt;

reg carriers;

always@(posedge clk)begin

if(!reset)begin

cnt<=2'b00;

carriers<=0;

end

else begin

if(cnt==2'b11)begin

cnt<=2'b00;

carriers<=~carriers;

end

else begin

carriers<=carriers;

cnt<=cnt+1;

end

end

end

assign y=x&carriers;

endmodule

解调模块

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

input clk;

input reset;

input x;

output y;

reg y;

reg[2:0]cnt;

reg[2:0]m;

always@(posedge clk)begin

if(!reset)begin

cnt<=3'b000;

end

else if(cnt==3'b111)

cnt<=3'b000;

else

cnt<=cnt+1;

end

always@(posedge x)begin if(!reset)begin

m<=3'b000;

end

else begin

if(cnt==3'b110)begin

if(m<=3'b010)

y<=1'b0;

else

y<=1'b1;

m<=3'b000;

end

else

m<=m+1; end

end

endmodule

verilog经典三段式状态机设计实例

Moore型verilog源代码:FSM实现10010串的检测Moore状态转移图 module moorefsm(clk,rst,a,z); input clk,rst; input a; output z; reg z; reg [3:0] currentstate,nextstate; parameter S0 = 4'b0000; parameter S1 = 4'b0001; parameter S2 = 4'b0010; parameter S3 = 4'b0011; parameter S4 = 4'b0100; parameter S5 = 4'b0101; always@(posedge clk or negedge rst) begin if(!rst) currentstate <= S0; else

currentstate <= nextstate; end always@(currentstate or a or rst) begin if(!rst) nextstate = S0; else case(currentstate) S0: nextstate = (a==1)?S1:S0; S1: nextstate = (a==0)?S2:S1; S2: nextstate = (a==0)?S3:S1; S3: nextstate = (a==1)?S4:S0; S4: nextstate = (a==0)?S5:S1; S5: nextstate = (a==0)?S3:S1; default: nextstate = S0; endcase end always@(rst or currentstate) begin if(!rst) z = 0; else case(currentstate) S0: z = 0;S1: z = 0;S2: z = 0; S3: z = 0;S4: z = 0;S5: z = 1; default: z = 0; endcase end endmodule

帧格式头数据检测_VerilogHDL有限状态机

题目1:串行通讯中,经常要检测数据包的开始标志,例如:USB 数据包的起 始数据是8‘b00101010设计一个电路,能够检测串行数据流中的特殊数据串,并在数据串有效时,给出相应的指示信号; (1)RTL Code /*信号定义与说明 Clk:同步时钟 rstb: 异步复位信号,低电平复位 up_down: 加/减计数方向控制信号,1为加计数 Din:串行数据输入 pat_det: 检测结果输出 */ `timescale 1ns/1ns module serialdata(din,clk,rstb,pat_det); input clk,rstb; input din; output pat_det; parameter S0='d0,S1='d1,S2='d2,S3='d3,S4='d4,S5='d5,S6='d6,IDLE='d7; reg[2:0] state; assign pat_det=(state= =S6&&din= =0)?1:0; always@(posedge clk or negedge rstb) begin if(!rstb) state<=IDLE; else begin case(state) IDLE: begin if(din==0) state<=S0; else state<=IDLE; end S0: begin if(din==0) state<=S1; else state<=IDLE; end S1: begin if(din==1) state<=S2; else state<=S1; end S2:

begin if(din==0) state<=S3; else state<=IDLE; end S3: begin if(din==1) state<=S4; else state<=S1; end S4: begin if(din==0) state<=S5; else state<=IDLE; end S5: begin if(din==1) state<=S6; else state<=S1; end S6: state<=IDLE; default: state<=IDLE; endcase end end endmodule (2)Test File `timescale 1ns/1ns `include "serialdata.v" module tb_serialdata; reg clk,rstb; wire din; wire pat_det; reg[31:0] data; assign din=data[31]; serialdata t1(din,clk,rstb,pat_det); initial begin clk=1'b0; rstb=1'b0; data=32'b1001_0010_1010_1100_1010_1000_1010_1010; #10 rstb=1'b1; #640 $stop; end

Verilog设计练习十例及答案

设计练习进阶 前言: 在前面九章学习的基础上,通过本章的练习,一定能逐步掌握Verilog HDL设计的要点。我们可以先理解样板模块中每一条语句的作用,然后对样板模块进行综合前和综合后仿真,再独立完成每一阶段规定的练习。当十个阶段的练习做完后,便可以开始设计一些简单的逻辑电路和系统。很快我们就能过渡到设计相当复杂的数字逻辑系统。当然,复杂的数字逻辑系统的设计和验证,不但需要系统结构的知识和经验的积累,还需要了解更多的语法现象和掌握高级的Verilog HDL系统任务,以及与C语言模块接口的方法(即PLI),这些已超出的本书的范围。有兴趣的同学可以阅读Verilog语法参考资料和有关文献,自己学习,我们将在下一本书中介绍Verilog较高级的用法。 练习一.简单的组合逻辑设计 目的: 掌握基本组合逻辑电路的实现方法。 这是一个可综合的数据比较器,很容易看出它的功能是比较数据a与数据b,如果两个数据相同,则给出结果1,否则给出结果0。在Verilog HDL中,描述组合逻辑时常使用assign 结构。注意equal=(a==b)1:0,这是一种在组合逻辑实现分支判断时常使用的格式。 模块源代码: " qual(equal),.a(a),.b(b)); 简单时序逻辑电路的设计 目的:掌握基本时序逻辑电路的实现。

在Verilog HDL中,相对于组合逻辑电路,时序逻辑电路也有规定的表述方式。在可综合的Verilog HDL模型,我们通常使用always块和@(posedge clk)或@(negedge clk)的结构来表述时序逻辑。下面是一个1/2分频器的可综合模型。 eset(reset),.clk_in(clk),.clk_out(clk_out)); endmodule 仿真波形: 练习:依然作clk_in的二分频clk_out,要求输出与上例的输出正好反相。编写测试模块,给出仿真波形。 练习三. 利用条件语句实现较复杂的时序逻辑电路 目的:掌握条件语句在Verilog HDL中的使用。 与常用的高级程序语言一样,为了描述较为复杂的时序关系,Verilog HDL提供了条件语句供分支判断时使用。在可综合风格的Verilog HDL模型中常用的条件语句有if…else和case…endcase两种结构,用法和C程序语言中类似。两者相较,if…else用于不很复杂的分支关系,实际编写可综合风格的模块、特别是用状态机构成的模块时,更常用的是case…endcase 风格的代码。这一节我们给的是有关if…else的范例,有关case…endcase结构的代码已后会经常用到。 下面给出的范例也是一个可综合风格的分频器,是将10M的时钟分频为500K的时钟。

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;

verilog可综合有限状态机的4种写法(夏文宇书注)

verilog可综合有限状态机的4种写法(夏文宇书注) 第一种:自然编码 module fsm1( input i_clk, input rst_n, input A, output reg K1, output reg K2, output reg [1:0] state ); parameter Idle=2'b00, Start=2'b01, Stop=2'b10, Clear=2'b11; [email=always@(posedge]always@(posedge[/email] i_clk) if(!rst_n) begin state<=Idle; K2<=0; K1<=0; end else case(state) Idle:if(A) begin state<=Start; K1<=0; end else begin state<=Idle; K2<=0; K1<=0; end Start:if(!A) state<=Stop; else state<=Start; Stop:if(A) begin state<=Clear; K2<=1;

else begin state<=Stop; K2<=0; K1<=0; end Clear:if(!A) begin state<=Idle; K1<=1; K2<=0; end else begin state<=Clear; K2<=0; K1<=1; end default: state<=Idle; endcase endmodule 这种大家应该都熟悉的 第二种:采用独热编码,据说其可靠性和速度都不错module fsm2( input i_clk, input rst_n, input A, output reg K1, output reg K2, output reg [3:0] state ); parameter Idle=4'b1000; parameter Start=4'b0100; parameter Stop=4'b0010; parameter Clear=4'b0001; always@(posedge i_clk) begin if(!rst_n)

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 的主要调制方式

Verilog三段式状态机的建模方法和注意事项

Verilog三段式状态机(FSM) 网上收集整理…… 时序电路的状态是一个状态变量集合,这些状态变量在任意时刻的值都包含了为确定电路的未来行为而必需考虑的所有历史信息。 状态机采用VerilogHDL语言编码,建议分为三个always段完成。这是为什么呢? 设计FSM的方法和技巧多种多样,但是总结起来有两大类:第一种,将状态转移和状态的操作和判断等写到一个模块(process、block)中。另一种是将状态转移单独写成一个模块,将状态的操作和判断等写到另一个模块中(在Verilog代码中,相当于使用两个“always”block)。其中较好的方式是后者。其原因如下。 首先FSM和其他设计一样,最好使用同步时序方式设计,好处不再累述。而状态机实现后,状态转移是用寄存器实现的,是同步时序部分。状态的转移条件的判断是通过组合逻辑判断实现的,之所以第二种比第一种编码方式合理,就在于第二种编码将同步时序和组合逻辑分别放到不同的程序块(process,block)中实现。这样做的好处不仅仅是便于阅读、理解、维护,更重要的是利于综合器优化代码,利于用户添加合适的时序约束条件,利于布局布线器实现设计。 三段式建模描述FSM的状态机输出时,只需指定case敏感表为次态寄存器,然后直接在每个次态的case分支中描述该状态的输出即可,不用考虑状态转移条件。 三段式描述方法虽然代码结构复杂了一些,但是换来的优势是使FSM做到了同步寄存器输出,消除了组合逻辑输出的不稳定与毛刺的隐患,而且更利于时序路径分组,一般来说在FPGA/CPLD等可编程逻辑器件上的综合与布局布线效果更佳。 示例如下: //第一个进程,同步时序always模块,格式化描述次态寄存器迁移到现态寄存器 always @ (posedge clk or negedge rst_n) //异步复位 if(!rst_n) current_state <= IDLE; else current_state <= next_state;//注意,使用的是非阻塞赋值 //第二个进程,组合逻辑always模块,描述状态转移条件判断 always @ (current_state) //电平触发 begin next_state = x; //要初始化,使得系统复位后能进入正确的状态 case(current_state) S1: if(...) next_state = S2; //阻塞赋值 ... endcase end

通信原理实验 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 HDL代码描述对状态机综合的研究 1 引言 Verilog HDL作为当今国际主流的HDL语言,在芯片的前端设计中有着广泛的应用。它的语法丰富,成功地应用于设计的各个阶段:建模、仿真、验证和综合等。可综合是指综合工具能将Verilog HDL代码转换成标准的门级结构网表,因此代码的描述必须符合一定的规则。大部分数字系统都可以分为控制单元和数据单元两个部分,控制单元的主体是一个状态机,它接收外部信号以及数据单元产生的状态信息,产生控制信号,因而状态机性能的好坏对系统性能有很大的影响。 有许多可综合状态机的Verilog代码描述风格,不同代码描述风格经综合后得到电路的物理实现在速度和面积上有很大差别。优秀的代码描述应当易于修改、易于编写和理解,有助于仿真和调试,并能生成高效的综合结果。 2 有限状态机 有限状态机(Finite State Machine,FSM)在数字系统设计中应用十分广泛。根据状态机的输出是否与输入有关,可将状态机分为两大类:摩尔(Moore)型状态机和米莉(Mealy)型状态机。Moore型状态机的输出仅与现态有关;Mealy型状态机的输出不仅与现态有关,而且和输入也有关。图1是有限状态机的一般结构图,它主要包括三个部分,其中组合逻辑部分包括状态译码器和输出译码器,状态译码器确定状态机的下一个状态,输出译码器确定状态机的输出,状态寄存器属于时序逻辑部分,用来存储状态机的内部状态。 图1 状态机的结构框图 2.1 好的状态机标准 好的状态机的标准很多,最重要的几个方面如下: 第一,状态机要安全,是指FSM不会进入死循环,特别是不会进入非预知的状态,而且由于某些扰动进入非设计状态,也能很快的恢复到正常的状态循环中来。这里面有两层含义。其一要求该FSM的综合实现结果无毛刺等异常扰动,其二要求FSM要完备,即使受到异常扰动进入非设计状态,也能很快恢复到正常状态。 第二,状态机的设计要满足设计的面积和速度的要求。 第三,状态机的设计要清晰易懂、易维护。 需要说明的是,以上各项标准,不是割裂的,它们有着直接紧密的内在联系。在芯片设计中,对综合结果评判的两个基本标准为:面积和速度。“面积”是指设计所占用的逻辑资源数量;“速度”指设计在芯片上稳定运行所能够达到的最高频率。两者是对立统一的矛盾体,要求一个设计同时具备设计面积最小,运行频率最高,这是不现实的。科学的设计目标应该是:在满足设计时序要求(包含对设计最高频率的要求)的前提下,占用最小

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。

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信

转《明德扬分享》之【状态机的使用】

转《明德扬分享》之【状态机的使用】 (本文档由明德扬精心设计,版权归明德扬科教所有,转载请注明出处,否则明德扬有权追究其法律责任) 1.状态机概述 1.1 状态机的定义及作用 有限状态机FSM(Finite State Machine)简称状态机,通俗地说,状态机就是把全部的情况分成几个场景,这些场景的工作方式明显不同。广义而言,因触发器本身就是若干状态的集合,故只要涉及触发器应用的电路都属于状态机范畴,也即任何时序模型都可以归结为一个状态机。 状态机是数字系统设计的重要组成部分,对于数字系统设计工程师,面对的只要是时序电路设计,状态机的概念则是必须贯穿于整个设计始终的最基本的设计思想和设计方法论。只有从电路状态的角度去考虑,才能从根本上把握可靠、高效的时序逻辑的设计关键。在现代数字系统设计中,状态机的设计对系统的高速性能、高可靠性、高稳定性都具有决定性的作用。 状态机应用广泛(特别是对于操作和控制流程非常明确的系统设计),在数字通信领域、自动化控制领域、CPU设计领域等都拥有不可或缺的重要地位。 1.2 状态机的分类 按照不同的标准,状态机也有多种不同的分类形式,主要有以下几种: 1) 以状态机的信号输出方式分,有Mealy型和Moore型两种状态机。Mealy型状态机输出由当前状态和输入共同确定,Moore型状态机输出则仅取决于当前状态。 2) 以状态机的描述结构上分,有一段式、两段式、三段式三种类型状态机。 l 将整个状态机写到1个进程模块里,在该模块中既描述状态转移又描述状态的输入输出,称为一段式描述方法,即所谓的单进程状态机; l 一个模块用同步时序描述状态转移,另一个模块用组合逻辑判断状态转移条件、描述状态转移规律及逻辑输出,称为两段式描述方法;

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

Verilog奇偶分频、一段式、两段式、三段式状态机

汇报总结 1、偶数分频 偶数倍分频相对简单,可以通过计数器对预分频的脉冲沿计数实现,如果要进行N倍(N为整数)偶数分频,可由预分频的时钟触发计数器计数,当计数器从0计数到N/2—1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数,以此循环下去。分频的主体程序如下: `define div_en 8 module freq_div_even(clk_in, reset, clk_out ); input clk_in; input reset; output clk_out; reg clk_out; reg[2:0] count; initial begin count=0; clk_out=0; end always@(posedge clk_in) begin if(!reset) begin count<=0; clk_out<=0; end else if(count==(`div_en/2-1)) begin clk_out<=~clk_out; count<=0; end else begin count<=count+1; end end endmodule 下面定义N为8,对一个脉冲8分频,测试程序如下: `timescale 1ns/1ns module testbench; reg reset; reg clk_in; reg[2:0] count;

wire clk_out; freq_div_even test(.clk_in(clk_in), .reset(reset), .clk_out(clk_out) ); initial begin reset=0; clk_in=0; #5 reset=1; end always #10 clk_in=~clk_in; endmodule 波形图如下: 2、奇数分频 对于对占空比没有特殊要求的奇数分频,需要对上升沿和下降沿脉冲进行计数,利用下降沿产生的波形移相半个输入脉冲的作用,最后用错位“异或”法实现。一个n(n=3)分频的程序如下: module clk_divN( clk_in, reset, clk_out ); input clk_in; input reset; output clk_out; integer cnt1,cnt2; reg clk_divp; reg clk_divn; parameter n=3; always@(posedge clk_in) begin if(!reset) begin clk_divp<=0; cnt1<=0; end else

实验九 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(

Verilog状态机的写法

Verilog状态机的写法-转 1 引言 Verilog HDL作为当今国际主流的HDL语言,在芯片的前端设计中有着广泛的应用。它的语法丰富,成功地应用于设计的各个阶段:建模、仿真、验证和综合等。可综合是指综合工具能将Verilog HDL代码转换成标准的门级结构网表,因此代码的描述必须符合一定的规则。大部分数字系统都可以分为控制单元和数据单元两个部分,控制单元的主体是一个状态机,它接收外部信号以及数据单元产生的状态信息,产生控制信号,因而状态机性能的好坏对系统性能有很大的影响。 有许多可综合状态机的Verilog代码描述风格,不同代码描述风格经综合后得到电路的物理实现在速度和面积上有很大差别。优秀的代码描述应当易于修改、易于编写和理解,有助于仿真和调试,并能生成高效的综合结果。 2 有限状态机 有限状态机(Finite State Machine,FSM)在数字系统设计中应用十分广泛。根据状态机的输出是否与输入有关,可将状态机分为两大类:摩尔(Moore)型状态机和米莉 (Mealy)型状态机。Moore型状态机的输出仅与现态有关;Mealy型状态机的输出不仅与现态有关,而且和输入也有关。图1是有限状态机的一般结构图,它主要包括三个部分,其中组合逻辑部分包括状态译码器和输出译码器,状态译码器确定状态机的下一个状态,输出译码器确定状态机的输出,状态寄存器属于时序逻辑部分,用来存储状态机的内部状态。 图1 状态机的结构框图 2.1 好的状态机标准 好的状态机的标准很多,最重要的几个方面如下: 第一,状态机要安全,是指FSM不会进入死循环,特别是不会进入非预知的状态,而且由于某些扰动进入非设计状态,也能很快的恢复到正常的状态循环中来。这里面有两层含义。其一要求该FSM的综合实现结果无毛刺等异常扰动,其

状态机写法

1 引言 Verilog HDL作为当今国际主流的HDL语言,在芯片的前端设计中有着广泛的应用。它的语法丰富,成功地应用于设计的各个阶段:建模、仿真、验证和综合等。可综合是指综合工具能将Verilog HDL代码转换成标准的门级结构网表,因此代码的描述必须符合一定的规则。大部分数字系统都可以分为控制单元和数据单元两个部分,控制单元的主体是一个状态机,它接收外部信号以及数据单元产生的状态信息,产生控制信号,因而状态机性能的好坏对系统性能有很大的影响。 有许多可综合状态机的Verilog代码描述风格,不同代码描述风格经综合后得到电路的物理实现在速度和面积上有很大差别。优秀的代码描述应当易于修改、易于编写和理解,有助于仿真和调试,并能生成高效的综合结果。 2 有限状态机 有限状态机(Finite State Machine,FSM)在数字系统设计中应用十分广泛。根据状态机的输出是否与输入有关,可将状态机分为两大类:摩尔(Moore)型状态机和米莉(Mealy)型状态机。Moore型状态机的输出仅与现态有关;Mealy型状态机的输出不仅与现态有关,而且和输入也有关。图1是有限状态机的一般结构图,它主要包括三个部分,其中组合逻辑部分包括状态译码器和输出译码器,状态译码器确定状态机的下一个状态,输出译码器确定状态机的输出,状态寄存器属于时序逻辑部分,用来存储状态机的内部状态。

图1 状态机的结构框图 2.1 好的状态机标准 好的状态机的标准很多,最重要的几个方面如下: 第一,状态机要安全,是指FSM不会进入死循环,特别是不会进入非预知的状态,而且由于某些扰动进入非设计状态,也能很快的恢复到正常的状态循环中来。这里面有两层含义。其一要求该FSM的综合实现结果无毛刺等异常扰动,其二要求FSM要完备,即使受到异常扰动进入非设计状态,也能很快恢复到正常状态。 第二,状态机的设计要满足设计的面积和速度的要求。 第三,状态机的设计要清晰易懂、易维护。 需要说明的是,以上各项标准,不是割裂的,它们有着直接紧密的内在联系。在芯片设计中,对综合结果评判的两个基本标准为:面积和速度。“面积”是指设计所占用的逻辑资源数量;“速度”指设计在芯片上稳定运行所能够达到的最高频率。两者是对立统一的矛盾体,要求一个设计同时具备设计面积最小,运行频率最高,这是不现实的。科学的设计目标应该是:在满足设计时序要求(包含对设计最高频率的要求)的前提下,占用最小的芯片面积,或者在所规定的面积下,使设计的时序余量更大,频率更高。另外,如果要求FSM安全,则很多时候需要使用“full case”的编码方式,即将状态转移变量的所有向量组合情况都在FSM 中有相应的处理,这经常势必意味着要多花更

相关文档
最新文档