通信原理多路信号复用课设.docx
《通信原理多路信号复用课设.docx》由会员分享,可在线阅读,更多相关《通信原理多路信号复用课设.docx(25页珍藏版)》请在冰点文库上搜索。
通信原理多路信号复用课设
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
信息工程学院
题目:
多路信号复用的基带发信系统设计与建模
初始条件:
(1)MAXPLUSII、QuartusII、ISE等软件;
(2)课程设计辅导书:
《通信原理课程设计指导》
(3)先修课程:
数字电子技术、模拟电子技术、电子设计EDA、通信原理。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
(1)课程设计时间:
(2)课程设计题目:
多路信号复用的基带发信系统设计与建模;
(3)本课程设计统一技术要求:
按照要求对选定的设计题目进行逻辑分析,设计通信系统框图,设计出分频器、内码产生器、时序信号产生器、基带发信系统等模块的逻辑功能,编写出相应模块的VHDL语言程序并上机调试、仿真,记录仿真波形并进行分析;
(4)课程设计说明书按学校“课程设计工作规范”中的“统一书写格式”撰写,并标明参考文献至少5篇;
(5)写出本次课程设计的心得体会(至少500字)。
时间安排:
第19周
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
在通信系统中,为了提高信道的利用率,采用多路复用技术能把多个信号组合起来在一条物理信道上进行传输,在远距离传输时可大大节省电缆的安装和维护费用,在数字通信系统中主要采用时分多路复用(TDM)方式。
并将复用信号进行HDB3码转换以利于在信道中传输。
关键词:
时分复用;模型;原理;模块建模
1绪论
在数字通信中,为了扩大传输容量和提高传输效率,通常需要将若干个低速数字码流按一定格式合并成一个高速数据码流,以便在高速宽带信道中传输。
数字复接就是依据时分复用基本原理完成数码合并的一种技术,并且是数字通信中的一项基础技术。
当今社会是数字话的社会,数字集成电路应用广泛。
而在以往的PDH复接电路中,系统的许多部分采用的是模拟电路,依次有很大的局限性。
随着微电子技术的发展,出现了现场可编辑逻辑器件(PLD),其中应用最广泛的当属现场可编程门阵列(FPGA)和复杂可编程逻辑器件(CPLD)。
本文就是用硬件描述语言等软件与技术来实现一个基于CPLD/FPGA的简单数字同步复接系统的设计。
在通信系统中,为了提高信道的利用率,使多路信号在同一条信道上传输时互相不产生干扰的方式叫做多路复用。
在数字通信系统中主要采用时分多路复用(TDM)方式,把时间划分为若干时隙,让多路数字信号的每一路占用不同的时隙,即多路信号在不同的时间内被传送,各路信号在时域中互不重叠。
1.1多路信号复用的基带系统的设计
时分多路复用(TDM)是按传输信号的时间进行分割的,它使不同的信号在不同的时间
内传送,将整个传输时间分为许多时间间隔,每个时间片被一路信号占用。
TDM就是通过在时间上交叉发送每一路信号的一部分来实现一条电路传送多路信号的。
电路上的每一短暂时刻只有一路信号存在。
因数字信号是有限个离散值,所以TDM技术广泛应用于数字通信系统。
多路信号复用的基带系统中的发信设备由数字信源与复接器、码型变换器等组成,其中数字信号包括晶振、分频和内部基带码产生等;系统的接收设备由码型逆变换与时钟提取电路、帧同步信号提取、数字终端与分接器等。
当前,根据国际电报电话咨询委员会(CCITT)建议,目前TDM采用两种标准系列:
一种是欧洲和我们国家所采用的30路系列,即由32个话路组成一个PCM基群;另一种是北美和日本等国所采用的24路体系,即由24个话路组成一个PCM基群。
1.2时分多路复用信号的产生模型
多路信号复用的模型它包括了内码控制器、内码产生器、时序产生器及复用输出电路等功能模块。
晶振输出信号送给内码控制器分频后得到低频信号作为内码产生器的时钟信号;每个内码产生器用于产生8位数据码且为串行输出,作为内部分路数据信号,其串行数据码输出受到时序产生器输出的时序信号控制;时序产生器的功能是产生四路宽度为8位数据码宽度的时序信号,每路时序信号的相对相位延迟按规定顺序为8位数据码宽度:
输出电路的功能是将四路分路码组合成一路完整的复用信号。
2各功能模块的VHDL建模与程序设计
2.1内码控制器
实际是一个分频器即一个4位二进制计数器,一个输出端口输出三位行信号作为内码产生器的地址控制端(选择输入端),另一输出端作为时序产生器的控制端。
内码控制器对内码产生器的控制功能表如下。
表中的A2、A1、A0分别表示内码控制器的二进制分频器的8、4、2分频信号。
内码产生器应循环并依次输出从“000”、“001’’一直到“111”。
这样,内码发生器每个时钟节拍,输出一位码,通过输出电路送到合路信道上,最终形成一路串行码流。
内码控制器的VHDL程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityNMKZQis
port(clk:
instd_logic;
a:
outstd_logic_vector(2downto0);
b:
bufferstd_logic:
='0');
endentityNMKZQ;
architectureNMKZQ_archiofNMKZQis
begin
process(clk)
variableq:
std_logic_vector(3downto0):
="0000";
begin
ifclk'eventandclk='1'then
q:
=q+1;
ifq>7then
q:
="0000";
b<=notb;
endif;
a<=q(2downto0);
endif;
endprocess;
endarchitectureNMKZQ_archi;
内码控制器的TESTBENCH程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.numeric_std.all;
entityNMKZQ_tbis
endentityNMKZQ_tb;
architectureNMKZQ_tb_archiofNMKZQ_tbis
componentNMKZQ
port(clk:
instd_logic;
a:
outstd_logic_vector(2downto0):
="000";
b:
bufferstd_logic:
='0');
endcomponent;
signalclk:
std_logic:
='0';
signala:
std_logic_vector(2downto0);
signalb:
std_logic;
constantclk_period:
time:
=20ns;
begin
dut:
NMKZQportmap(clk=>clk,a=>a,b=>b);
tb_clk:
process
begin
clk<='1';
waitfor20ns;
clk<='0';
waitfor20ns;
endprocess;
endarchitectureNMKZQ_tb_archi;
内码控制器的仿真图:
由图可以看出,b与a[2..0]组成一个4位的二进制计数器,b为最高位,a(0)为最低位。
每来一个时钟脉冲,计数器便加1,。
当计数值达到16时,计数器自动归零。
2.2时序产生器
时序发生器用于产生四路宽度为8位数据码宽度的时序信号。
具体实现是将内码控制器的b端即16分频端口通过一个2分频器,b端口和2分频器的输出端作为2/4译码器的控制端,2/4译码器的四个输出端,经过反相器输出。
时序产生器的VHDL程序:
libraryieee;
useieee.std_logic_1164.all;
entitySXCSQis
port(b:
instd_logic:
='0';
s3,s2,s1,s0:
outstd_logic);
endentitySXCSQ;
architectureSXCSQ_archiofSXCSQis
begin
process(b)
variableb_hc:
std_logic:
='0';
variableab_hc:
std_logic_vector(1downto0);
begin
ifb'eventandb='1'then
b_hc:
=notb_hc;
endif;
ab_hc:
=b_hc&b;
caseab_hcis
when"00"=>s0<='0';s1<='1';s2<='1';s3<='1';
when"01"=>s0<='1';s1<='0';s2<='1';s3<='1';
when"10"=>s0<='1';s1<='1';s2<='0';s3<='1';
when"11"=>s0<='1';s1<='1';s2<='1';s3<='0';
whenothers=>null;
endcase;
endprocess;
endarchitectureSXCSQ_archi;
时序产生器的TESTBENCH程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.numeric_std.all;
entitySXCSQ_tbis
endentitySXCSQ_tb;
architectureSXCSQ_tb_archiofSXCSQ_tbis
componentSXCSQ
port(b:
instd_logic:
='0';
s3,s2,s1,s0:
outstd_logic);
endcomponent;
signalb:
std_logic:
='0';
signals3,s2,s1,s0:
std_logic;
constantclk_period:
time:
=20ns;
begin
dut:
SXCSQportmap(b=>b,s3=>s3,s2=>s2,s1=>s1,s0=>s0);
tb_b:
process
begin
b<='1';
waitfor10ns;
b<='0';
waitfor10ns;
endprocess;
endarchitectureSXCSQ_tb_archi;
时序产生器的仿真图:
由仿真图可以看出,s3,s2,s1,s0依次输出低电平,用以控制内码产生器。
2.3内码产生器
四个内码产生器可产生四路独立的八位数据码,并在内码控制器的控制下输出相应的数码,例如:
k
(2),k
(1),k(0)为三个地址控制端,Y7,Y6,Y5,Y4.Y3,Y2,Y1,Y0为八位码的输出。
内码产生器的建模符号如图所示。
每个内码产生器受内码控制器和时序产生器器的控制产生一路8位数据码,并且具有三态串行输出功能。
图中,data[7..0]为8位数据码输入,可通过输入高、低电平设定;k[2..0]为对8位数据进行选择控制的控制码,有8种状态选择;sx接时序信号;cout为内码串行数据输出。
内码产生器的VHDL程序:
libraryieee;
useieee.std_logic_1164.all;
entityNMCSQis
port(data_in:
instd_logic_vector(7downto0);
k:
instd_logic_vector(2downto0);
sx:
instd_logic;
cout:
outstd_logic);
endentityNMCSQ;
architectureNMCSQ_archiofNMCSQis
begin
process(data_in,k,sx)
begin
ifsx='0'then
casekis
when"000"=>cout<=data_in(0);
when"001"=>cout<=data_in
(1);
when"010"=>cout<=data_in
(2);
when"011"=>cout<=data_in(3);
when"100"=>cout<=data_in(4);
when"101"=>cout<=data_in(5);
when"110"=>cout<=data_in(6);
when"111"=>cout<=data_in(7);
whenothers=>null;
endcase;
elsecout<='1';
endif;
endprocess;
endarchitectureNMCSQ_archi;
内码产生器的TESTBENCH如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.numeric_std.all;
entityNMCSQ_tbis
endentityNMCSQ_tb;
architectureNMCSQ_tb_archiofNMCSQ_tbis
componentNMCSQ
port(data_in:
instd_logic_vector(7downto0);
k:
instd_logic_vector(2downto0);
sx:
instd_logic;
cout:
outstd_logic);
endcomponent;
signaldata_in:
std_logic_vector(7downto0):
="11001010";
signalk:
std_logic_vector(2downto0);
signalsx:
std_logic;
signalcout:
std_logic;
constantclk_period:
time:
=20ns;
begin
dut:
NMCSQportmap(data_in=>data_in,k=>k,sx=>sx,cout=>cout);
tb_sx:
process
begin
sx<='1';
waitfor80ns;
sx<='0';
waitfor80ns;
endprocess;
tb_k:
process
begin
k<="000";
waitfor10ns;
k<="001";
waitfor10ns;
k<="010";
waitfor10ns;
k<="011";
waitfor10ns;
k<="100";
waitfor10ns;
k<="101";
waitfor10ns;
k<="110";
waitfor10ns;
k<="111";
waitfor10ns;
endprocess;
endarchitectureNMCSQ_tb_archi;
内码产生器的仿真图:
由仿真图可以看出,当sx=1时,内码产生器默认输出高电平。
当sx=0时,内码产生器被选通,k由000变为111的同时,内码产生器依次将并行的8位输入数据转为串行数据输出,低位在前,高位在后。
2.4输出电路
在时序发生器产生的四路时序信号的控制下,按顺序依次将四路数据码接入同一通道,形成了一路串行码,从而完成了四路数据码的复用。
实现的关键是4输入与门的利用。
建模符号如图所示。
它由一个4输入与门和一个D触发器构成。
其中4输入与门具有将四路在时序上独立的分路数据信号进行合路的功能;D触发器的作用是对合路信号进行整形,避免输出信号波形出现冒险现象(毛刺)。
输入电路如下:
4输入与门的VHDL程序如下:
libraryieee;
useieee.std_logic_1164.all;
entityand_4is
port(a,b,c,d:
instd_logic;
y:
outstd_logic);
endentityand_4;
architectureand_4_archiofand_4is
begin
y<=(aandb)and(candd);
endarchitectureand_4_archi;
D触发器的VHDL程序:
libraryieee;
useieee.std_logic_1164.all;
entityD_trigis
port(clk,d:
instd_logic;
q:
outstd_logic);
endentityD_trig;
architectureD_trig_archiofD_trigis
signalq1:
std_logic;
begin
process(clk,q1)
begin
ifclk'eventandclk='1'then
q1<=d;
endif;
endprocess;
q<=q1;
endarchitectureD_trig_archi;
输出电路的VHDL程序:
LIBRARYieee;
USEieee.std_logic_1164.all;
LIBRARYwork;
ENTITYSCDLIS
PORT(CLK:
INSTD_LOGIC;
IN_1:
INSTD_LOGIC;
IN_2:
INSTD_LOGIC;
IN_3:
INSTD_LOGIC;
IN_4:
INSTD_LOGIC;
OUTP:
OUTSTD_LOGIC);
ENDSCDL;
ARCHITECTUREbdf_typeOFSCDLIS
COMPONENTand_4
PORT(a:
INSTD_LOGIC;
b:
INSTD_LOGIC;
c:
INSTD_LOGIC;
d:
INSTD_LOGIC;
y:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTd_trig
PORT(clk:
INSTD_LOGIC;
d:
INSTD_LOGIC;
q:
OUTSTD_LOGIC);
ENDCOMPONENT;
SIGNALSYNTHESIZED_WIRE_0:
STD_LOGIC;
BEGIN
b2v_inst:
and_4
PORTMAP(a=>IN_1,b=>IN_2,c=>IN_3,d=>IN_4,y=>SYNTHESIZED_WIRE_0);
b2v_inst2:
d_trig
PORTMAP(clk=>CLK,d=>SYNTHESIZED_WIRE_0,q=>OUTP);
ENDbdf_type;
输出电路的TESTBENCH如下:
LIBRARYieee;
USEieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYSCDL_tbIS
ENDSCDL_tb;
ARCHITECTUREbdf_type_tbOFSCDL_tbIS
COMPONENTSCDL
PORT(CLK:
INSTD_LOGIC;
IN_1:
INSTD_LOGIC;
IN_2:
INSTD_LOGIC;
IN_3:
INSTD_LOGIC;
IN_4:
INSTD_LOGIC;
OUTP:
OUTSTD_LOGIC);
ENDCOMPONENT;
SIGNALCLK:
STD_LOGIC;
SIGNALIN_1:
STD_LOGIC;
SIGNALIN_2:
STD_LOGIC;
SIGNALIN_3:
STD_LOGIC;
SIGNALIN_4:
STD_LOGIC;
SIGNALOUTP:
STD_LOGIC;
BEGIN
b2v_inst:
SCDL
PORTMAP(clk=>clk,
IN_1=>IN_1,
IN_2=>IN_2,
IN_3=>IN_3,
IN_4=>IN_4,
OUTP=>OUTP);
tb_clk:
process
begin
clk<='1';
waitfor10ns;
clk<='0';
waitfor10ns;
endprocess;
tb_IN_1:
process
variabledata_in:
std_logic_vector(3downto0);
begin
ifdata_in<15then
data_in:
=data_in+1;
elsedata_in:
="0000";
endif;
IN_4<=data_in(3);
IN_3<=data_in
(2);
IN_2<=data_in
(1);
IN_1<=data_in(0);
waitfor20ns;
endprocess;
ENDbdf_type_tb;
输出电路的仿真图:
由仿真图可以看出,只有当IN_4,IN_3,IN_2,IN_1都为1时,在下个时钟脉冲上升沿到来,输出OUTP才为1。
当IN_4,IN_3,IN_2IN_1中有一位为0时,输出OUTP都为0。
3.系统的整体电路与程序
整体电路如下:
VHDL程序:
LIBRARYieee;
USEieee.std_logic_1164.all;
LIBRARYwork;
ENTITYkeshe_allIS
PORT(clk:
INSTD_LOGIC;
data_in0:
INSTD_LOGIC_VECTOR(7DOWNTO0);
data_in1:
INSTD_LOGIC_VECTOR(7DOWNTO0);
data_in2:
INSTD_LOGIC_VECTOR(7DOWNTO0);