基于FPGA的PSK调制系统实验报告.docx
《基于FPGA的PSK调制系统实验报告.docx》由会员分享,可在线阅读,更多相关《基于FPGA的PSK调制系统实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
基于FPGA的PSK调制系统实验报告
实验题目:
基于FPGA的PSK调制系统
专业班级:
学生:
指导教师:
设计时间:
基于FPGA的PSK调制系统
一、实验目的
1.掌握利用原理图输入法设计电路的方法,掌握QuartusII的层次化设计方法。
通过PSK调制系统的设计,熟悉用EDA软件进行电路设计的详细流程,以及在硬件上的应用。
2.掌握绝对码、相对码的概念以及它们之间的变换关系和变换方法。
3.掌握用键控法产生2PSK信号的方法。
4.掌握相对码波形与2PSK信号波形之间的关系、绝对码波形与2DPSK信号波形之间的关系。
二、实验要求
利用实验板具有模拟信号处理的功能,设计一个移相键控信号发生器。
要求利用板上的8位DIP开关设置基带信(8bit)。
板上的DAC送出己调信号(正弦波),对8bit基带信号循环调制。
要有用于观察的同步脉冲输出。
传输速率1200bps。
为简单起见,载波频率也是1200Hz。
为简单起见,已调信号的相位和基带信的夫系柬用绝对调相方式。
即基带信号为l,己调信号的相位相对于参考相位改变180度。
基带信号为0,已调信号的相位与参考相位相同。
三、实验容
1、PSK调制原理
相移键控(PhaseShiftKeying,PSK),它是受键控的载波相位按数字基带脉冲的规律而改变的一种数字调制方式。
这种以载波的不同相位直接表示相应数字信息的相位键控,通常被称为绝对移相方式。
当基带信号为二进制数字脉冲序列时,所得到的相位键控信号为二进制相位键控,即2PSK,它的表达式为
式中,φ(t)由数字信息“0”“1”控制。
在绝对移相中,因为φ(t)选用的参考相位基准就是未调制的载波,所以φ(t)就是载波的绝对值。
一般说来,数字信息为“1”时,φ(t)=0,数字信息为“0”时,φ(t)=π。
即
如图所示
2、系统总体设计
系统的结构框图
3、系统详细设计
1分频器设计
根据题目中载波频率小于30kHZ的要求,生成载波信号的正弦信号发生器选择16位累加器,则其需要的时钟在30kHZ以上即可。
因此,设计中对20MHZ的系统时钟进行512分频(39KHZ)和16384分频(1.22KHZ)。
512分频所得时钟作为正弦信号发生器的时钟,16384分频所得时钟则作为整个系统的基带信号。
VNDL具体设计见附录一。
通过VHDL包装生成的分频器模块及其波形仿真图如下面两图所示。
分频器模块
分频器模块波形仿真结果
2正弦信号发生器设计
DDS(DirectDigitalSynthesizer)具有较高的频率分辨率,可以实现频率的快速切换,并且在频率切换时能保持相位的连续,很容易实现频率、相位、幅度的数字调制。
本系统的正弦信号发生器模块就是基于DDS技术设计的。
DDS原理图如下:
DDS基本结构
上图中M为相位累加器的位数。
N为信号数据的位数。
F为频率控制字。
fclk为系统的时钟。
由DDS原理知其基频为:
fSIN=fclk/2M
也即是设计的正弦信号发生器的精度为fSIN。
由以上知,当输入的频率控制字为F时,输出正弦波的频率为:
fout=F*fSIN=F*fclk/2M
基于以上DDS原理,系统选择16位的累加器。
一个周期正弦波取64个采样点,在Excel表格中可以用下拉单元格的方式迅速生成地址,地址围为0~63,即波形表中每种波形每周期取64点。
之后输入公式“=sin((A1/64)*2*3.1415926)”,再利用下拉单元格的方式,得到各个地址单元所对应得正弦函数值。
以上得到的正弦函数表往往不能被D/A转换器直接利用,需要将其置映射到D/A转换器所能接受的数据空间。
设计中所用D/A转换器为8位,其数据空间是0——255,可以利用公式“=127.5*(1+B1)”来映射数据,影射后的数据为小数,还须对其取整,输入公式“=INT(C1)”。
然后复制所得数据,在QuartusII平台中生成hex文件。
由以上可得,系统需要使用6位地址线8位数据线的ROM作为数据存储器。
时钟为512分频(约为39KHZ)所得信号。
具体电路图如图10所示。
正弦信号发生器电路图
设计时将频率控制字设置为8192。
也即输出的正弦波频率为4.88KHZ。
仿真结果如图所示。
正弦信号发生器模块波形仿真结果
3PSK模块设计
PSK模块仿真结果如图
PSK模块仿真波形
4数模转换
本系统数模转换器采用DAC0832,数模转换模块如下图18所示。
输出的模拟量与输入的数字量(DN-1*2N-1+……+D0*20)成正比,这就实现了从数字量到模拟量的转换。
输入可有28(=256)个不同的二进制组态,输出为256个电压之一,即输出电压不是整个电压围任意值,只能是256个可能值中的一个。
本系统要求输出量是电压,而DAC0832输出的是电流量,所以还必须经过一个外接的运算放大器转换成电压,这里选用OP07集成运放,此运放具有极低的输入失调电压、极低的失调电压温漂能长期稳定工作等特点。
图18D/A转换模块
系统总电路
3:
源程序清单
1、分频器程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYclkdivIS
PORT(clk:
INSTD_LOGIC;
--clk_div2:
OUTSTD_LOGIC;
--clk_div4:
OUTSTD_LOGIC;
--clk_div8:
OUTSTD_LOGIC;
--clk_div16:
OUTSTD_LOGIC;
--clk_div32:
OUTSTD_LOGIC;
--clk_div256:
OUTSTD_LOGIC;
clk_div512:
OUTSTD_LOGIC;
clk_div16384:
OUTSTD_LOGIC
);
ENDclkdiv;
ARCHITECTURErtlOFclkdivIS
SIGNALcount:
STD_LOGIC_VECTOR(13DOWNTO0);
BEGIN
PROCESS(clk)
BEGIN
IF(clk'eventANDclk='1')THEN
IF(count="111")THEN
Count<=(OTHERS=>'0');
ELSE
Count<=count+1;
ENDIF;
ENDIF;
ENDPROCESS;
--clk_div2<=count(0);
--clk_div4<=count
(1);
--clk_div8<=count
(2);
--clk_div16<=count(3);
--clk_div32<=count(4);
--clk_div256<=count(7);
clk_div512<=count(8);
clk_div16384<=count(13);
ENDrtl;
2、加法器程序
libraryieee;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYADDER16IS
PORT(
A:
INSTD_LOGIC_VECTOR(15DOWNTO0);
B:
INSTD_LOGIC_VECTOR(15DOWNTO0);
S:
OUTSTD_LOGIC_VECTOR(15DOWNTO0)
);
ENDADDER16;
ARCHITECTUREbehavOFADDER16IS
BEGIN
S<=A+B;
ENDbehav;
3、寄存器程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYREG32BIS
PORT(
LOAD:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(15DOWNTO0);
DOUT:
OUTSTD_LOGIC_VECTOR(15DOWNTO0)
);
ENDREG32B;
ARCHITECTUREbehavOFREG32BIS
BEGIN
PROCESS(LOAD,DIN)
BEGIN
IFLOAD'EVENTANDLOAD='1'THEN
DOUT<=DIN;
ENDIF;
ENDPROCESS;
ENDbehav;
4、ROM程序
LIBRARYieee;
USEieee.std_logic_1164.all;
LIBRARYaltera_mf;
USEaltera_mf.all;
ENTITYDATAROMIS
PORT
(
address:
INSTD_LOGIC_VECTOR(5DOWNTO0);
inclock:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)
);
ENDDATAROM;
ARCHITECTURESYNOFdataromIS
SIGNALsub_wire0:
STD_LOGIC_VECTOR(7DOWNTO0);
COMPONENTaltsyncram
GENERIC(
clock_enable_input_a:
STRING;
clock_enable_output_a:
STRING;
init_file:
STRING;
intended_device_family:
STRING;
lpm_hint:
STRING;
lpm_type:
STRING;
numwords_a:
NATURAL;
operation_mode:
STRING;
outdata_aclr_a:
STRING;
outdata_reg_a:
STRING;
widthad_a:
NATURAL;
width_a:
NATURAL;
width_byteena_a:
NATURAL
);
PORT(
clock0:
INSTD_LOGIC;
address_a:
INSTD_LOGIC_VECTOR(5DOWNTO0);
q_a:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)
);
ENDCOMPONENT;
BEGIN
q<=sub_wire0(7DOWNTO0);
altsyncram_component:
altsyncram
GENERICMAP(
clock_enable_input_a=>"BYPASS",
clock_enable_output_a=>"BYPASS",
init_file=>"data.hex",
intended_device_family=>"CycloneII",
lpm_hint=>"ENABLE_RUNTIME_MOD=YES,INSTANCE_NAME=ROM1",
lpm_type=>"altsyncram",
numwords_a=>64,
operation_mode=>"ROM",
outdata_aclr_a=>"NONE",
outdata_reg_a=>"UNREGISTERED",
widthad_a=>6,
width_a=>8,
width_byteena_a=>1
)
PORTMAP(
clock0=>inclock,
address_a=>address,
q_a=>sub_wire0
);
ENDSYN;
5、PSK模块程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYAP_SKIS
PORT(
SIN:
INSTD_LOGIC_VECTOR(7DOWNTO0);
K,A,P:
INSTD_LOGIC;
SOUT:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)
);
ENDAP_SK;
ARCHITECTUREbehavOFAP_SKIS
BEGIN
process(A,K,P,SIN)
BEGIN
IFK='0'THEN
ELSIFP='0'THENSOUT<=SIN;
ELSESOUT<=NOTSIN;
ENDIF;
ENDPROCESS;
ENDbehav;
四、实验结果
PSK调制测试结果
五、参考书目
1、潘松黄继业EDA技术实用教程科学2006年9月