基于FPGA的psk调制.docx

上传人:b****7 文档编号:23928529 上传时间:2023-05-22 格式:DOCX 页数:17 大小:347.89KB
下载 相关 举报
基于FPGA的psk调制.docx_第1页
第1页 / 共17页
基于FPGA的psk调制.docx_第2页
第2页 / 共17页
基于FPGA的psk调制.docx_第3页
第3页 / 共17页
基于FPGA的psk调制.docx_第4页
第4页 / 共17页
基于FPGA的psk调制.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

基于FPGA的psk调制.docx

《基于FPGA的psk调制.docx》由会员分享,可在线阅读,更多相关《基于FPGA的psk调制.docx(17页珍藏版)》请在冰豆网上搜索。

基于FPGA的psk调制.docx

基于FPGA的psk调制

西南交通大学

信息科学与技术学院

通信工程专业

 

 

工程实习报告

——(psk调制解调器的FPGA实现)课题设计报告

 

年级:

2010

学号:

20100147

姓名:

刘妍

专业:

通信工程

 

二零一三年七月

 

一、(psk调制解调器的FPGA实现)总体设计

基本原理

PSK调制原理

相移键控(PSK):

一种用载波相位表示输入信号信息的调制技术。

移相键控分为绝对移

相和相对移相两种。

以未调载波的相位作为基准的相位调制叫作绝对移相。

以二进制调相

为例,取码元为“1”时,调制后载波与未调载波同相;取码元为“0”时,调制后载波与未调载波反相;“1”和“0”时调制后载波相位差180度。

PSK调制原理图:

PSK解调原理

2PSK信号的解调只能用相干解调一种形式。

解调原理框图及波形如图所示:

二、详细设计

顶层模块

modulebpsk(

clk,

reset_n,

clk_DA,

blank_DA_n,

sync_DA_n,

dataout,

dm_out

);

inputclk;

inputreset_n;

outputclk_DA;

outputblank_DA_n;

outputsync_DA_n;

output[7:

0]dataout;

output[7:

0]dm_out;

wire[6:

0]address;

wiredataoutm;

wireclk1;

wire[7:

0]dataout;

counterCOUNTER(

.clk(clk),

.reset_n(reset_n),

.count(count),

.clk1(clk1)

);

PN_SeqPN_SEQ(

.clk1(clk1),

.reset_n(reset_n),

.dataoutm(dataoutm)

);

ControllerCONTROLLER(

.clk(clk),

.reset_n(reset_n),

.dataoutm(dataoutm),

.address(address),

.clk_DA(clk_DA),

.blank_DA_n(blank_DA_n),

.sync_DA_n(sync_DA_n)

);

LookUpTableLOOKUPTABLE(

.clk(clk),

.reset_n(reset_n),

.address(address),

.dataout(dataout)

);

depskdepsk(

.clk(clk),

.reset_n(reset_n),

.data(dataout),

.dataout(dm_out)

);

endmoduleendmodule

分频模块

modulecounter(clk,reset_n,count,clk1);

inputclk,reset_n;

outputclk1;

output[6:

0]count;

regclk1;

reg[6:

0]count;

parameterN=128;

always@(posedgeclkornegedgereset_n)

if(!

reset_n)

begin

count<=1'b0;

clk1<=1'b0;

end

elseif(count<63)

begin

count<=count+1'b1;

end

else

begin

count<=1'b0;

clk1<=~clk1;

end

endmodule

M序列产生模块

modulePN_Seq(clk1,reset_n,dataoutm);

inputclk1;

inputreset_n;

outputdataoutm;

reg[7:

1]c;

always@(posedgeclk1ornegedgereset_n)

begin

if(!

reset_n)

c<=7'b1000000;

else

begin

c[2]<=c[1];

c[3]<=c[2];

c[4]<=c[3];

c[5]<=c[4];

c[6]<=c[5];

c[7]<=c[6];

c[1]<=c[2]^c[3]^c[4]^c[7];

end

end

assigndataoutm=c[7];

endmodule

控制器模块

moduleController(

clk,

reset_n,

dataoutm,

address,

clk_DA,

blank_DA_n,

sync_DA_n

);

inputclk;

inputreset_n;

inputdataoutm;

output[6:

0]address;

outputclk_DA;

outputsync_DA_n;

outputblank_DA_n;

reg[6:

0]address_data1;

reg[6:

0]address_data2;

reg[6:

0]address_data;

//always@(dataoutm)

//begin

//case(dataoutm)

//1'b0:

begin

//address_data=address_data2;

//end

//1'b1:

begin

//address_data=address_data1;

//end

//default:

begin

//address_data=5'bzzzzz;

//end

//endcase

//end

always@(posedgeclkornegedgereset_n)

begin

if(!

reset_n)//

begin

address_data1<=7'b011_1111;//000_0000;//定义初值相位

address_data2<=7'b000_0000;//111_0011;//定义初值0

end

else//

begin

address_data1<=address_data1+7'b000_0001;//地址依次加一

address_data2<=address_data2+7'b000_0001;

end

end

always@(posedgeclkornegedgereset_n)

begin

if(!

reset_n)

address_data<=7'b000_0000;//赋初值

elseif(!

dataoutm)

address_data<=address_data2;//如果m序列输出为0,则为address_data2值

elseif(dataoutm)

address_data<=address_data1;

else

;

end

assignaddress=address_data;

assignclk_DA=clk;

assignblank_DA_n=1'b1;

assignsync_DA_n=1'b1;

endmodule

查找表模块

moduleLookUpTable(

clk,

reset_n,

address,

dataout,

);

inputclk;

inputreset_n;

input[6:

0]address;

output[7:

0]dataout;

reg[7:

0]LUT[0:

127];

always@(posedgeclkornegedgereset_n)

begin

LUT[34]<=115;

LUT[35]<=109;

LUT[36]<=103;

LUT[37]<=97;

LUT[38]<=91;

LUT[39]<=85;

LUT[40]<=79;

LUT[41]<=73;

LUT[42]<=68;

LUT[43]<=62;

LUT[44]<=57;

LUT[45]<=52;

LUT[46]<=47;

LUT[47]<=42;

LUT[48]<=38;

LUT[49]<=33;

LUT[50]<=29;

LUT[51]<=25;

LUT[52]<=22;

LUT[53]<=19;

LUT[54]<=15;

LUT[55]<=13;

LUT[56]<=10;

LUT[57]<=8;

LUT[58]<=6;

LUT[59]<=4;

LUT[60]<=3;

LUT[61]<=2;

LUT[62]<=1;

LUT[63]<=1;

LUT[64]<=0;

LUT[65]<=1;

LUT[66]<=1;

LUT[67]<=2;

LUT[68]<=3;

LUT[69]<=4;

LUT[70]<=6;

LUT[71]<=8;

if(!

reset_n)

begin

LUT[0]<=255;

LUT[1]<=254;

LUT[2]<=253;

LUT[3]<=252;

LUT[4]<=251;

LUT[5]<=250;

LUT[6]<=248;

LUT[7]<=246;

LUT[8]<=244;

LUT[9]<=241;

LUT[10]<=239;

LUT[11]<=235;

LUT[12]<=232;

LUT[13]<=229;

LUT[14]<=225;

LUT[15]<=221;

LUT[16]<=216;

LUT[17]<=212;

LUT[18]<=207;

LUT[19]<=202;

LUT[20]<=197;

LUT[21]<=192;

LUT[22]<=186;

LUT[23]<=181;

LUT[24]<=175;

LUT[25]<=169;

LUT[26]<=163;

LUT[27]<=157;

LUT[28]<=151;

LUT[29]<=145;

LUT[30]<=139;

LUT[31]<=133;

LUT[32]<=127;

LUT[33]<=121;

LUT[122]<=248;

LUT[123]<=250;

LUT[124]<=251;

LUT[125]<=252;

LUT[126]<=253;

LUT[127]<=255;

end

end

assigndataout=LUT[address];

endmodule

LUT[72]<=10;

LUT[73]<=13;

LUT[74]<=15;

LUT[75]<=19;

LUT[76]<=22;

LUT[77]<=25;

LUT[78]<=29;

LUT[79]<=33;

LUT[84]<=57;

LUT[85]<=62;

LUT[86]<=68;

LUT[87]<=73;

LUT[88]<=79;

LUT[89]<=85;

LUT[90]<=91;

LUT[91]<=97;

LUT[92]<=103;

LUT[93]<=109;

LUT[94]<=115;

LUT[95]<=121;

LUT[96]<=127;

LUT[97]<=133;

LUT[98]<=139;

LUT[99]<=145;

LUT[100]<=151;

LUT[101]<=157;

LUT[102]<=163;

LUT[103]<=169;

LUT[104]<=175;

LUT[105]<=181;

LUT[106]<=186;

LUT[107]<=192;

LUT[108]<=197;

LUT[109]<=202;

LUT[110]<=207;

LUT[111]<=212;

LUT[112]<=216;

LUT[113]<=221;

LUT[114]<=225;

LUT[115]<=229;

LUT[116]<=232;

LUT[117]<=235;

LUT[118]<=239;

LUT[119]<=241;

LUT[120]<=244;

LUT[121]<=246;

解调模块

moduledepsk(

clk,

reset_n,

data,

dataout,

);

inputclk;

inputreset_n;

input[7:

0]data;

output[7:

0]dataout;

reg[6:

0]counter_value;

reg[7:

0]middata;

always@(posedgeclkornegedgereset_n)

begin

if(!

reset_n)

begin

counter_value[6:

0]<=7'b000_0000;//赋初值

middata[7:

0]<=8'b00000000;//寄存器赋初值

end

else

begin

counter_value<=counter_value+7'b000_0001;//时钟沿依次加一

if(counter_value==7'b010_0000)

begin

middata[7:

0]<=data[7:

0];//如果读到的值等于32,则取采样值

end

else

begin

middata[7:

0]<=middata[7:

0];//如果没有读到32,则取0值

end

end

end

assigndataout[0]=~middata[7];//寄存器

assigndataout[1]=~middata[7];

assigndataout[2]=~middata[7];

assigndataout[3]=~middata[7];

assigndataout[4]=~middata[7];

assigndataout[5]=~middata[7];

assigndataout[6]=~middata[7];

assigndataout[7]=~middata[7];

endmodule

三、结果测试

Psk调制部分功能仿真

Psk调制部分时序仿真

PSK调制解调功能仿真

PSK调制解调时序仿真

PSK调制解调FPGA实现开发板验证

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职高对口

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1