您的当前位置:首页正文

通信系统课程设计

2024-07-16 来源:步旅网



通信系统课程设计

基于FPGA的时分多路数字基带传输系统的设计与开发


指导老师:戴慧洁武卫华班级:通信102班 组长: 组员:

201375通信系统课程设计目录

1通信系统课程设计目的、内容、要求
1.1课程设计目的
1.2课程设计内容
1.3课程设计要求

2. 通信系统课程设计选题及小组划分
2.1课程设计选题



2.2小组划分
3.通信系统课程设计系统框图及各模块参数指标 3.1系统框图
3.2各模块参数指标
4.通信系统课程设计各模块原理与思路

4.1 PCM编译码

4.2 HDB3编译码

4.3一次群时分复用与分接

4.4同步

5•通信系统课程设计各模块编程与波形仿真(含代码)
5.1 PCM编译码

5. 2 HDB3编译码

5.3一次群时分复用与分接

5.4同步
6.通信系统课程设计心得体会
1通信系统课程设计目的、内容、要求及相关工具1.1课程设计目的

通信系统课程设计是一门综合设计性实践课程。使大家在综合已学现代

通信系统理论知识的基础上,借助可编程逻辑器件及EDA技术的灵活性

和可编程性,充分发挥自主创新意识,在规定吋间内完成符合实际需求

的通信系统电路设计与调试任务。




本次课程设计选题为数字基带传输系统。数字通信系统是利用数字信号来传输信息的通信系统,传输的对象通常是二元数字信息,它可能来自计算机等其他数字设备的各种数字代码,也可能来自数字电话终端的脉冲编码,其包括数字基带传输和数字频带传输。数字基带传输就是不经过调制而直接传送的方式,即发送端不使用调制器,接收端也不使用解调器。和频带传输相比,基带传输的优点是:设备简单,易做成“一机多速率”,适应性强。而对于时分多路技术,其具有十分优越的特点。其便于实现数字通信,易于制造,适于采用集成电路实现,成本较低,因此在数字信号传输中得到了广泛的应用。

它不仅能够提高大家对所学理论知识的理解能力,更重要的是能够提高和挖掘大家对所学知识的实际运用能力,为将来进入社会从事相关工
作奠定较好的“能力”基础。

1.2课程设计内容(可选)
A时分多路数字电话基带传输系统的设计与开发

B时分多路数字电话基带传输系统的设计与开发

1.3课程设计要求
A64Kb/SAPCM数字话音编译码器的开发设计

BPCM30/32 -次群时分复接与分接器的开发设计

C数字基带编码HDB3编译码器的开发设计

D)正交相对四相移相键控QDPSK调制器的开发设计(可选)



E同步(帧、位、载波同步(可选))电路的开发设计

根据给定的设计指标,要求能综合运用通信原理理论所学知识,借

助可编程逻辑器件,灵活使用EDA开发工具平台QuartusII,独立进行时分多路数字电话基带传输系统初步方案设计、单元电路设计、VHDL

序设计、程序调试等工作。

附工具quartusII 6.0FPGAVHDL语言
本次课程设计使用的软件是EDA开发T具平台QuartusII6. 0, Quartus I【是Altera公司提供的可编程逻辑器件的集成开发软件,可编程逻辑器

件开发的所有过程为:设计输入、综合、布局和布线、验证和仿真以及

可编程逻辑器件的编程或配置。使用的芯片是EPlC6Q240C8o VHDL 的全名是very-high-speed integrated circuit hardware descriptionlanguage,
VHDL主要用于描述数字系统的结构,行为,功能和接口。FPGA
Field—Programmable Gate Array,即现场可编程门阵列,它是在PALGALCPLD等可编程器件的基础上进一步发展的产物。它是作为专用集

成电路ASIC领域中的一种半定制电路而出现的,既解决了定制电路的

不足,又克服了原有可编程器件门电路数有限的缺点。

2课程设计选题、小组划分

2.1选题:时分多路数字电话基带传输系统的设计与开发

2.2模块划分

A负责

64Kb/SAPCM数字话音编码器的开发设计





B负责
64Kb/SAPCM数字话音译码器的开发设计

C负责
数字基带编码HDB3编码器的开发设计

D负责

数字基带编码HDB3译码器的开发设计

E 负责

PCM30/32 一次群时分复接器的开发设计F负责
PCM30/32 一次群时分分接器的开发设计

G

负责


同步(帧、位同步)电路的开发设计

3 •通信系统课程设计系统框图及各模块技术指标
3.1系统框图
PCM时分复用数字基带传输,是各路信号在同一信道上占有不同的时间间隙进行通 信。它把模拟信号通过抽样、量化、编码转变为数字信号,这些都靠编码器来实 现,然后在位同步和帧同步信号的控制下通过复接器实现复接,复接后的信号通 过信道传输,分接器在同步信号的作用下把接收到的信号进行分路,分



路后的信号通过PCM译码、低通滤波器还原岀输入的模拟语音信号。同步技术是时分复用数字通信的乂一个重要特点。

位同步是最基本的同步,是实现帧同步的前提。它的基本含义是收、发两端机的时钟频率必须同频、同相,这样接收端才能止确判断和接收发送端送来的每一个码元。帧同步是为了保证收、发各对应的话路在时间上保持一致,这样接收端就能正确接收发送端送来的每一-个话路信号。

模拟话音1-


HDB3编码器



HDB3译码器


僕拟话音30-

------------------------------------ 藝端机 3」时分多路数字基带传输系统框图3.2各模块技术指标
3.2.1PCM编码器参数指标(符合ITU-TG711建议)
1PCM编码器输入信号为: 一个13位逻辑矢量的均匀量化值:DO,D1・・・D12 其中:DO为极性位,取值范围在-4096-44096之间; 一个占空比为1/328K/S的取样时钟信号;

一个占空比为50%2.048Mb/S的合路时钟信号;2PCM编码器输出信号为:

一个8位逻辑矢量的13折线非均匀量化值:CO,C1・・・C7其中:CO为极性位C0=l为正,C0=0为负;
一个占空比为1/328K/S的取样时钟信号;

一个占空比为50%2.048Mb/S的合路吋钟信号;



PCM编码规则

PCM鍋码段潘起点:

APC\I译码表:


C1-C7

靴电平

1111111

4032

| 1111110

3904

1 1111101

3776

1 1111100

3648

:1111011

3520

i 1111010

3392

\ 1111000

3264

i 1110111

3136

i mono

3008

i 1110101

2880

| 1110101

2752

:1110100

2624

j 1110011

2496

I 1110010

2368

1 1110001

2240

:1110000

2112

i 1101111

2016

j

• ••

\ 1100000

272

• • •

0000000

1


r

+3968 +4°96

11111111

11111110

+3712

+3840

11111101

8个段落的

11111100

+3584

11111011

+3456

量化间隔

11111010

+3328

11111001

+3200

8: 128

11111000

+3072

+2944

11110111

7:

64

L

11110110

+2816

+2688

6:

32

11110101

11110100

+2560

5:

16

+2432

11110011

11110010

+2304

4:

8

11110001

+2176

L

3:

4

11110000

+19昭严

11101111

2: 2 1: 2

• • • 11100000

+1088 +1024»/

・・+512

+64

+0
321 PCM编码规则
3.2.2 PCM译码器参数指标(符合ITU-TG711建议)

6

1PCM译码器输入信号为:
一个8位逻辑矢量的13折线非均匀量化值:CO,C1…C7其中:C0为极性位・ C0=l为正,C0=0为负;
一个占空比为1/328K/S的取样时钟信号;
一个占空比为50%2.048KB/S的合路吋钟信号;
2PCM译码器输出信号为:
一个13位逻辑矢量的均匀量化值:DO,D1…D12其屮:D0为极性位,取值 范围在・4096+4096之间;
一个占空比为1/328K/S的取样时钟信号;



一个占空比为50%2.048Mb/S的合路时钟信号;

(3)PCM译码规则

A13折线非线性码与线性码间的关系










电平































































































































































SSfi

3.2.2 PCM译码规则
3.2.3HDB3编码器参数指标(符合ITU-TG703建议)
(1 )HDB3编码器输入信号为:
一路串行2.048Mb/S合路数据流
一路2.048Mb/S位同步时钟脉冲
(2)HDB3编码器输出信号为:
一路串行2.048Mb/S合路HDB3编码的正极性数据流H+
一路串行2.048Mb/S合路HDB3编码的负极性数据流H-一路2.048Mb/S

位同步时钟脉冲

324 HDB3译码器参数指标(符合ITU-TG703建议) (1)HDB3译码器输入信号为:





一路串行2048Mb/S合路HDB3编码的止极性数据流H+
一路串行2.048Mb/S合路HDB3编码的负极性数据流H-一路2.048Mb/S

位同步吋钟脉冲

(2)HDB3译码器输出信号为:
一路串行2.048Mb/S合路数据流
一路2.048Mb/S位同步时钟脉冲
325 次群吋分复接器参数指标()

(1) 一次群时分复接器输入信号为:
一个8位数据总线D7DO
一个一次群串行位同步时钟2.048Mb/S信号; (2)—次群时分复接器输出信号为:
一个一次群串行合路数据流2.048Mb/S信号 一个一次群串行位同步时钟2.048Mb/S信号
一个5位吋隙地址总线信号
326 —次群吋分接器参数指标

(1)一次群时分分接器输入信号为:

一个一次群串行合路数据流2.048Mb/S信号一个一次群串行位同步吋钟2.048Mb/S信号(2)一次群时分分接器输岀信号为:

一个一次群串行合路数据流2.048Mb/S信号
一个30位逻辑矢量时隙脉冲信号

一个一次群串行位同步吋钟2.048Mb/S信号





326相关帧结构图

3.2.7同步的参数指标

同步主耍是进行帧同步与位同步,具体设计体现在一次群时分分接器设

计,还有提供各模块的时钟。

4通信系统课程设计各模块原理与思路

4.1PCM编码器原理

4.1.1PCM编码器分析

脉冲编码调制(PCM, Pulse CodeModulation)在通信系统中完成将语音信号数字化功能。是一种对模拟信号数字化的取样技术,将模拟信号变换为数字信号的编码方式,特别是对丁音频信号。PCM对信号每秒钟取样8000次;每次取样为8个位,总共64kbpsoPCM的实现主耍包括三个步骤完成:抽样、量化、编码。分别完成时间上离散、幅度上离散、及量化信号的二进制表



示。根据CCITT的建议,为改善小信号量化性能,采用压扩非均匀量化,有两种建议方

式,分别为A律和“律方式,本设计采用了A律方式。

13折线法中,无论输入信号是正是负,均按8段折线8个段落)进行编码。若用8位折叠二进制码来表示输入信号的抽样量化值,其中用第一位表示量化值的极性,其余七位(第二位至第八位)则表示抽样量化值的绝对大小。具体的做法是:用第二至第四位表示段落码,它的8种可能状态来分别代表8个段落的起点电平。其它四位表示段内码,它的16种可能状态来分别代表每一段落的16个均匀划分的量化级。这样处理的结呆,8个段落被划分成128个量化级。段落码和8个段落Z间的关系如表1所示;段内码与16个量化级Z间的关系见表4.1. 2所示。

4.1.2PCM编码规则

1段落码

2段内码




4.1.3流程图如下





4.1.3PCM编码器流程图

4.2 PCM译码器原理


4.2.1 PCM译码分析PCM译码是PCM编码的逆过程。通过对PCM编码的分析,可以进行8 PCM编码到13A13折线的转换,具体转换见下译码规则图。其中注 意,在译码时的13位码是对应段的中间值,既所得的编码应加上对应段

量化值的一半。

4.2.2 PCM译码规则





A13折线非线性码与线性码间的关系










电平





































































































































































注,BCFBIT码下面的数值为该码的权直顷为收

端解码时2V2补差项丁





422 PCM译码规则

4.2.3流程图如下



423 PCM译码流程图



4.3HDB3编码器原理
4.3.1HDB3编码规则分析:
1对输入为1码元交替翻转编码即依次在H+H-端口输出1
2对输入为0码元同时在H+H-端口输出0
3当连续输入40码元,且与上一个连续0码元之间1码元为
奇数个时,第四个0码元改为1码元,且与之前1码元的最后一个1码元同极

性,即:在同端口输出

4当连续输入40码元,且与上一个连续40码元之间1码元为偶数个时,第一个0码元改为1码元,与之前1码元的最后一个1码元反极性,即:在不同端II输出,第四个0码元改为

1码元,且与之前1码元的最后一个1码元同极性,即:在同端口输出

4.3.2HDB3编码VHDL语言设计

1逐位处理输入输出数据,即:每输入一比特数据就判断处理,并在H+ H-端口同时输出一位比特脉冲.

2为了能修改含本时钟之前4个时钟周期的输出比特,建立一个4位移位寄 存器保存输入数据temp;
3输出1”吋,确定下次1码元输出端II的确定,即极性是+
-;每输入一个1”极性反转一次,记录信息county;
4检测当前是否为连续0000”记当前零个数countO
5记录两个连续"0000"之前连续1的个数记数count1,(即

奇偶数)。



6If“BOOV”“OOOV” 时,更新信息countO,count!, county

4.3.3流程图如卜:

0000”

插入000V”

单双极性码


B00V”

转换



4.4 HDB3译码器原理

4.4.1HDB3译码规则分析
将编码修改过的0码元恢复,并将双极性交替1脉冲改为单极性1脉冲

4.4.2HDB3译码VHDL语言设计

对输入的H+H分别设立一个五级缓存移位寄存器,每一拍源码输入 H-,H殆输出 都判断是否存在10001,1001X若存在分别改成10000, 0000Xo再将H+H相或输出。

4.4.3流程图如下:





H-,H祸输入

A

4.5一次群时分复接器原理
复接器的功能是将30PCM信号与帧同步和勤务信号综合成一路
2.048Mb/s的串行合路输出,并包括•生成吋隙地址信号。其中主耍包括多路数据

选择器,串并转换器,计数器等。

次群时分复接器VHDL语言谏计

8位数据总线

10011011

多多

珞珞

串行合路数据滾输岀

D鰹发器

帧同步码

数数

jin




00004 411" 复帧
同步码

勤务信息
11111111
信令信息





64时陳复位[

8位脉冲复位 ]时陳地址总线信号
位计数器

位同步时钟2.048Mb/S

位同步时钟2.048Mb/S

4.6一次群时分分接器原理
分接器的功能是将32路合路的2.048Mb/s的信号分成32
64K/S的分路信号,同时生成32路时隙脉冲。其中主耍是帧同步与位同步的捕捉

与确定。

一次群时分分接器VHDL语言设计

合路数据流2048Mb/S





4.7同步模块原理
在数字通信系统中,同步包括载波同步,码元同步(位同步),群同步(帧同步),网同步四种,木课程设计主要用到帧同步与位同步。

1)帧同步是为接收信号而使给定数字信道的接收端与发送端的相应信道
对齐的过程,帧同步码有集中插入和分散插入两种插入方法,此课程设计中主要研究集中插入帧同步法,详细设计可见一次群时分分接。

2位同步是为了在准确的时刻对接收码元进行判决,以及对接收码元能量正确积分,它是从接收码元的起止时刻产生一个码元同步脉冲序列。位同步可分为外同步法和自同步法。外同步法是一种利用辅助信息同步的方法,需要在信号中另外加入包含码元定时信息的导频或数据序列。自同步法不需要辅助同步信息,直接从信息码元屮提取出码元定时信息,这种方法要求在信息码元序列中含有码元定时信息,在此课程设计中,用数字锁相环法实现码元的自同步。

位同步原理图:

Clk











5通信系统课程设计各模块编程与上机实现

5.1PCM编码程序与仿真图

-PCM编码,符合1TU-TG.711建议
-一个输入为13位逻辑矢量的均匀量化值,一个8000HZ占空比为1/32的取样脉冲
-输出为八位逻辑矢量的APCM编码,和一个8000HZ的吋钟
-虽然设计要求输入输出2.048MB/S时钟,个人觉得用不上,故舍去了-qumlus软件是以下标大的位为高位,所以十三位输入采用D(⑵为符号位

libraryieee;-程序调用的库是IEEE

useieee.std_logic_H64.all;-定义了stdjogic,std_logic_vector 类型

entityPCMencode is port(clkin :in std_logic;一输入吋钟8000HZ
D:in std_logic_vector( 12 downto O);~std_logic_vector 全拼standardogic标准逻辑矢量

C:out std_Iogic_vector(7 downto 0);
clkout:outstd_logic);
endPCMencode;

architecturebehavior of PCMencode is

begin

process(cl kin,D)

begin



ifclkin^vent and clkin=,Vthen
ifD( 11 )=T then C<=D(12)&4&T&T&D(10)&D(9)&D(8)&D(7);
elsifD( 10)=* 1 * then C<=D( 12)&*1 &T&O&D(9)&D(8)&D(7)&D(6); elsifD(9)=rthen C<=D(12)&T&O&T&D(8)&D(7)&D(6)&D(5); elsifD(8)=r then C<=D(12)&T&'0&'0&D(7)&D(6)&D(5)&D(4); elsifD(7)=T then Cv=D( 12)&'O&T&T&D(6)&D(5)&D(4)&D(3); elsifD(6)=T then C<=D( 12)&*0&T&O&D(5)&D(4)&D(3)&D(2); elsifD(5)=rthen C<=D(12)&'0&O&T&D(4)&D(3)&D(2)&D(l); elseC<=D( 12)&'0&'0&'0&D(4)&D(3)&D(2)&D(l);
endif;
endif;
endprocess;
clkout<=clkin;
end
behavior;





仿真图:

b MasteiTmeBar:

16.175 ns

Jj Pointer

51.61 n$

Interval

35.44 re

Start:

E«t


A Q --

lane


130.0 ns

叫“

390.0


16.

r

5 ns
[

010 n f 11

-4

4

0C
clkin
clkout 0 D



nuoioi

onwHo

|

oioiiuo


J
U



U

iioioioioim

\

oioiiooinooo

\

oooimooioio


JI

Ki

5.2PCM译码程序与仿真图

-PCM译码

-偷入A律八位PCM编码,占空比为1/328000HZ的去取样吋钟
-输出为十三位逻辑矢量均匀量化值,占空比为1/328000HZ的去収样吋钟libraryieee;

useieee.std_logic_l 164.all;
entityPCMdecode is

port(

clkin:in std_logic;
C:in std_logic_vector(7 downto 0);
D:out std_logic_vector( 12 downto 0);
clkout:out stcl_logic);

endPCMdecode;
architecturebehavior of PCMdecode is
signaltenip:std_logic_vector(2 downto 0);
begin

temp<= C( 6 downto 4);

process(clkin)
begin
ifclkiifevent and clkin=T then
casetemp is
whennlir=>D<=C(7)&”1”&C(3 downto 0)&H1000000M;when ”011”=>Dv=C(7)&“01'&C(3 downto 0)&T 00000”; whenT01”=>Dv=C(7)&”001”&C(3 downto 0)&" 10000";when ,,001"=>D<=C(7)&HOOOr&C(3downto 0)&“1000”;

whenT 10”=>Dv=C&“00001”&C(3downto0)&TOO";

whenn010M=>D<=C(7)&"000001M&C(3downto 0)&"10”; when H100M=>D<=C(7)&"00000011&C(3 downto 0)&”l”; when H000M=>D<=C(7)&M0000000r&C(3downto 0)&T;





whenothers=>D<=nulI;
endcase;
endif;
endprocess; clkout<=clkin;
endbehavior;

仿真图:

80."

0"

240ns

)PS

0 c

:

oi iiii

X

moioooi

X

liiiiiii

liopoiii

elk:

4 -

_

_H| _______________________

5.3HDB3编码器程序与仿真图

-HDB3编码

■■输入2.048Mb/s数据流,占空比为50%2.048MHZ的去収样时钟
-输出为两路双极性2.048Mb/s数据流,占空比为50%2.048MHZ的去収样时钟libraryieee;

useieee.std_logic_l 164.all;

use ieee.nunieric_std;
use ieee. std_l ogi c_ari th; entity hdbnecode is
port(clkin:in std.logic;
datain:in std_logic;



dataouthh:outstdjogic;
dataouthkoutstd_logic;
clkout:outstd_logic);
endhdbnecode;
architecturebehavior of hdbnecode is

beginprocess(clkin)
variablecountO,count 1:integer: =0 ; variable county:boolean;

variabletemp:stdogic_vec(or(3downto 0);

begin

ifclkinfeventand c!kin=,0,then ifdatain=Tthen-输入为1时处理4位寄存器count0:=0;

temp(0):=datain;
count1 :=countl+ 1;

iftemp(3)='0' then—首位0处理输出

dataouthh<=,0,;
dataouthl<=,0,;

elseif county then—首位1处理输出

dataouthh<=,rdataouthl<=,Of;county: =not county;



else
dataouthh<=,0,;
dataouthl<=T;
county:=not county;
endif;

endif;
else

temp(0):=datain;-输入为0吋处理4位寄存器count0:=count0+l;if count0=4 then-检测到0000,处理4位寄存器count0:=0;

countl:=(countl rem 2);-两个四连零间1的奇偶 ifcount 1 = 1 then-两个四连零间1的奇偶 count

1:=0;

mp:0001";

dataouthh<=*0,;
dataouthl<=,0,;
county:=not county;
else

countl:=0;-两个四连零间1的偶 tenip:="100r';

ifcounty then

dataouthh<=frdataouthl<=lO,;

dataouthh<=,0,; else

dataouthl<=,r





endif;
endif;
else

iftemp(3)='0' then■■未检测到0000处理输出dataouthh<=,0,;

dataouthl<=,0,;
else
ifcounty then dataouthh<=,1 dataouthl<=,0,;
county:=notcounty;
else
dataouthh<=,01;

dataouthl<=,rcounty:=notcounty;

endif;
endif;
endif;

endif;
endif;
temp(3downto 1):= temp(2 down to 0);
endprocess;
clkout<=clkin;
endbehavior;

仿真图:


17 775 nt )PS

土]P 40 9 ns 80.0 ns 120 0 ns 200 0 ns

Time Bar

clkin

17 78 ns

17.775 ns

-TLrLrLrLrLrLrLrLrLT

Ln _n mTrEnjiTmTiru 1
------------r~i ,:r~r mi
------------rn_rn_rn_

5.4HDB3译码器程序与仿真图

-输入为两路双极性2.048Mb/s数据流,占空比为50%2.048MHZ的去収样时钟-输出为一路单极性2.048Mb/s数据流,占空比为50%2.048MHZ的去収样时钟libraryieee;

useieee.stdogic_l164.all;

entityhdbdecode is
port(

clkin:in std_logic;
datainhh:in std_logic; datainhkinstd_logic; dataout:out std_logic; clkout:out stdjogic); endhdbdecode; architecture behavior of hdbdecode is
signalhh,hl:std_logic_vector(4 downto 0);
signal temp:std_logic;
begin



AHH:process(clkin)
variabletemphh:std_logic_vector(4 downto 0); begin
ifclkin^vent and clkin=,0,then temphh(O):=datainhh;
iftemphh=" 10001" then temphh:=H10000";

elsif(temphh=H10010" or temphh="10011") thentemphh:=,,0000,,&datainhh; endif;
endif;
hh<=temphh;
temphh(4downto l):=temphh(3 downto 0); end process;

AHL:process(clkin)
variabletemphl:std_logic_vector(4 downto 0); begin
ifclkin^vent and clkin=,0,then temphl(0):=datainhl;
iftemphl=H10001Mthen temphl:=u10000M;
elsif(temphl=" 10010Hor temphl="10011H)then temphl:=n0000,*&datainhl; endif;
endif;
hl<=temphl;
temphl(4downto l):=temphl(3 downto 0);
endprocess;
emp<=(hh(4)orhl(4));

dataout<=temp; clkout<=clkin; end behavior;

仿真图:



5.5 一次群复接器程序与仿真图

■■时分复接器

-输入-8位数据总线(30PCM话音并行数据共用总线)-输入-个一次群串行位同步吋钟2.048MB/S信号

-输出一个一次群串行合路数据流2.048MB/S信号;一个一次群串行位同步时钟2.048MB/S信号“一个5位时隙地址总线信号(30PCM话音并行地址总线)
-(其说明当前输入的数据总线上是哪个时隙数据)

-此程序要特别注意器件的选择,该程序选择cyclone系列EPIC6Q240C8吋得到所期望的结果
-若选用其他器件警如StratixII系列的器件会丢失第一路信息



libraryieee;-程序所调用的库是IEEE
useieee.stdogic_l164.all;--定义了std_logic,std_logic_vector 类型

useieee.std_logic_unsigned.all;—用到基于stdjogic,std_logic_vector 类型的

无符号的算术运算

entityfujieqi is
port(clkin: in std_logic;

datain:in std_logic_vector(7 downto 0);—30 路语音信号输入dataout:outstd_logic;--输出串行数据流ads:outstd_logic_vector(4 downto ());■五位时隙总线信号clkout:outstd_logic);—输出时钟

endfujieqi;
architecturebehav of fujieqi is

sharedvariable tscount:std_logic_vector(8 downto 0);-时隙计数器

sharedvariable bitcount:std_logic_vector(2 downto 0);--il数器

begin

pl:process(cl kin)—位时钟和吋隙计数

begin

clkin'eve nt and clkin=*r then

ifbitcount=Ml11" then
bitcount:=M000H;

tscount:=tscount+,1

else bitcount:=bitcount+*l \ end if;
end if;
end process pl;
p2:process(clkin)



variableregester:std_logic_vector(7 downto 0);-定义一个内部的寄存器,

-用于寄存输入的八位数据

variabletemp:std_logic_vector(7 downto 0);■■定义一个中间变量,用于数据的串行输出begin
ifclkin'event and clkin=T then
ads<=tscount(4downto 0);■■记录当前输出的是第几路信号
ifbitcount=nOOO"then
iftscount(5 downto 0)=,'000000Hthen

regester:=M10011011“

双帧计数为0吋传帧同码

elsif tscount(5 downto 0)=" 100000" then

regester:=nl 1111111“

-双帧计数为32时传勒务涪息

elsif tscount=H00001(X)00" then

regester^'WOOllir1;

■■复帧计数为16时传复帧同步码

elsif tscount(4 downto 0)=" 10000" then

信息

regester:=MllllllllM;-F0帧外,每帧的第16时隙都传信令

elseregester:=datain; 一不满足以上条件吋传语音信号

endif;

temp:=regester;

■■并串转换





dat aout<=te mp(7);-时隙的第一个时钟上升沿输出最高位else
temp(7downto l):=temp(6 downto 0);■■右移

dataout<=te mp( 7);■■接着发英他位
endif;
endif;
clkout<=clkin;—输出时钟
endprocess p2;
endbehav;







仿真图:

]ps 40.0 ns 80.0 ns 120.0 ns 160.0 ns 200.0 ns 240.0 ns 280.0 ns 320.0 ns 360.0 ns 400.0 ns 440.0 ns

i

I

i

i

i

*

i

i

i

I

i

i

90.0ns

ads clkin

00M0

00001

00010

00011

00100

\ 00101

clkout

dat&in

JUUWWI





dataout

00000010

00000011

00001111

Tf

00000000




n

5.6一次群分接器程序与仿真图

-吋分分接程序
-同步码捕获三次后方确认同步完成,若失步三次后重新捕获
■•输入一个一次群串行合路数据流2.048MB/S信号,一个一次群串行位同步时钟2.048MB/S信号
输出一个一次群串行合路数据流2.048MB/S信号,一个30位逻辑矢量时隙脉冲信号(每位对应一路吋隙脉冲)
-一个一次群串行位同步时钟2.048MB/S信号
-输出串行数据流分别于A1……A31相与即可得到齐路话音信号

use ieee.std_logic_l 164.all; library ieee;

useieee. std_l ogi c_u ns i gned. a 11;

entityfenjieqi is
port(datmn,clkin:instd_logic;—输入2.048MB/S的合路数据流,输入
-串行位同步时钟2.048MB/S
A1,A2,A3, A4, A5, A6, A7, A & A9, Al 0,A 11, Al 2, A13, Al 4, A15,Al 7, A18, A19,A20,A21,A22,A23,A24,A25,A26,A27,A2&A29,A30,A31:ou(std_logic;
输出30位逻辑矢量时隙脉冲信号,dataout相与的结果就是所选择的一•路语音■■输出

clkout,dataout:outstd_logic);—输出串行数据流和输出时■钟endfenjieqi;

architecturebehave of fenjieqi is
signalregester,singlecount:std_logic_vector(7 downto0):="000(X)000";
-regester为八位移位寄存器用于捕获同步码,singlecount为单帧计数器
signaldoublecount:std_logic_vector(8 downto0):="000000000";-双帧计数器以位为单位signalcatchistdJogic^'O*;-同步码捕捉状态标志0农捕捉态,1衣示同步态
signalsyncount,lostcount:std_logic_vector(l downto 0):="00,f;—同步计数器以位为单位

-与失步计数器





begin

P1:processed kin)-利用移位寄存器暂存当前输入码,敏感信号为时钟上升沿-即当时钟上升沿到达时该进程执行一次

begin

ifclkin'event and clkin='l' then-时钟上升沿有效暂存输入数据

regester<=regester(6downto 0)&datain;
endif;
endprocess P1;

P2:process(clkin)-同步码捕捉,同步保持比较

begin

ifclkin'event and clkin='O' then-时钟下降沿有效验证是否为同步码

-及验证落后于暂存刚好半个吋钟周期,敏感信号为吋钟下降沿,即吋钟下降沿到达一•次程序执行一-

doublecount<=doublecount+1;

singlecount<=doublecount(7downto 0)+1;-借用双帧第八位单帧计数

ifcatch='O* then -catch0时为捕捉态

ifsyncount=M00Hthen
ifregester=M100l1011" then

syncount<=syncount+l;doublecount<="000000111 ”

■■农示第一•次捕捉到同步码,将其次数加一,并且让输出变为第八位end if;
elsif doublecount="0(X)000110" then••已捕捉到同步码的同时验证捕获ifregester=M100I1011n then

if syncount=,'10,, then catch<=* 1 ';syncount<="00";■■验证同步次数达到3次时转为同步状态

elsesyncount<=syncount4-l;
endif;

elsesyncount<="00M;--验证不是同步码吋转为重新捕获状态

endif;
endif;

else -catch1,同步态时,同步保持比较
ifdoublecount=M000000110Mand regester/=M10011011 ” then --表示同步时■验证不是

同步码

if lostcount="10M then catch<=,0,; lostcount<="00";

次时转为捕捉状态

else lostcount<=Iostcount+1; end if;
end if;
end if;
end if;

--验证失步次数达到三













if singlecount>=" 10011111 "and

singlecount<=M 1010011 OMthen

else

A20<=*r

A20<=,0,;end if;

singlecount<="10101110"then

A21<=T;else

if singlecount>=" 10100111 "and

A21<=r0,;endif;

if singlecount>=" 10101111 uand

singlecount<='r10110110Mthen

else

A22<=T;else

A22<=,0,;end if;

singlecount<=" 10111110"then

A23<=*r

if singlecount>=" 10110111 "and

A23<=,0,;end if;

singlecount<="l 1000110"then

A24<='relse

if singlecount>=" 10111111 "and

A24<=,0';endif;

if singlecount>="l 10001 lT'and

singlecount<="l 1001110"then

A25<=T;else

A25<=,0,;endif;

if singlecount>=" 110011 llHand

singlecount<=" 11010110Mthen

A26<=,l,;else

A26<=r0,;endif;

if singlecount>="l 1010111 "and

singlecount<=" 11011110Mthen

A27<=relse

A27<='0';endif;

if singIecount>=H 11011111 "and

singlecount<=Hl 1100110'rthen

A28<=relse

A28<=,0';endif;

if singlecount>=" 11100111 uand

singlecount<="l 1101110Hthen

A29<=T;else

A29<=,0,;endif;

if singlecount>=Ml 1101111 "and

singlecount<=ul 1110110"then

A30<=relse

A31<=,T;else

A30<=,0,;end if; if singlecount>="l 1110111 "and singlecount<=" 11111110"then A31<=,0,;end if; end if;

endif;

endprocess P3;

clkout<=clkin;

endbehave;

仿真图:



Name

oo

catch
clkin

clkout
detain

dettout

H doublecount S loztcount

S regester

S singl«count

S syncount
Al

A2

A3
M

A5

A6
AT

AR

u^l

5

1^3


5

35

18

<>27

V36

<^39

<*>40


<>42

<>43

<>44


<*>4R


J PS

5.12 us

12.8 us

16. 175 ns

00000000

RJ'JOIJU

00000000

00000000


i




+

10. 33 us

10JI9 us

10 57 us

10.65 uJ

wmniinminnjinruuuuinnjinRnnnAnnfmrumnjumnRnnrmnrmnnnnmirm Tn

5.7位同步程序与仿真图

libraryIEEE;■■相位比较模块

use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH. ALL;
use IEEE.STD LOGIC UNSIGNED.ALL;

port(Reset :in std_logic; entity phase_compare is

Clk_Est :instdjogic;
Date_In :instdjogic;
Phase_Error:out std_logic_vector( 1 downto 0)

);
endphase_compare;

architecturertl of phase_compare is signal Temp_SampleA
signalTemp_SampleB signal Temp_SampleC begin

process( Reset,Clk_Est) begin
if( Reset='0,)then

:stdjogic;
:stdjogic;
:stdjogic;

Tenip_SanipleA<=,0';
Temp_SampleC<=,0,;
elsif(Clk_Estevent and Clk_Est=,O,)then





Temp_S ample A<=Te mp_S ampleC;
Temp_SampleC<=Date_in;
endif;
endprocess;

process(Reset,Cl k_Est)
begin
if(Reset='O,)then
Temp_SampleB<=*0';

elsif(Clk_Est'eventand Clk_Est='r)then

Temp_S ampleB <=D ate_i n;
endif;
endprocess;

process(Reset,CLK_Est)
begin
if(Reset='O')then
Phase_Error<="00";
e1 sif(C1 k_Est'event and Clk_Est='O,)then
Phase_EtTor(0)<=Temp_SampleAxor Temp_SampleC;

Phase_Error(l )<=Temp_SampleB xor Temp_SanipleC; end if; end process;

use

end rtl;


library IEEE;

■■数字滤波模

IEEE.STDLOGIC 1164.ALL;
useIEEE.STD LOGIC ARITH.ALL;
useIEEE.STD LOGIC UNSIGNED.ALL;

entityloop_filter is
generic(M:integer);port(Reset :in stdjogic;
Clk:in std_logic;
Clk_Est:in std_logic;
Phase_Error:instd_logic_vector(l downto 0);
insert_signal
:outstd_logic; reduce_signal :outstd_logic

)
endloop_filter;





architecturertl of loop_filter is

signalvalue_lever :integer range 0 to 255;
signalcount_sample :integerrange 0 to 7;

beginprocess( Reset,Clk_Est)
begin
if(Reset= ’O') then
Value_Lever<= M/2-1;

elsif(Clk_Est'eventand Clk_Est=*r)then

if((V£ilue_Lever= 0) or (Value_Lever = M-l)) then
Value_Lever<= M/2-1;
else
casePhase_Error is
when”01”=>
Value_Lever<= Value_Lever - 1;
whenT 1 “ =>
Value_Lever<= Value_Lever + 1;
whenothers =>

end case; end if;
end if;
end process;



process(Reset, Clk)
begin
if(Reset= '0') then
Count_sample<= 0;

elsiftClk^ventand CLk = *r)then

Count_sample<= Count_sample+1;
endif;
endprocess;

process(Reset,Clk)
begin
if(Reset= '0') then

insert_signal<= I)reduce_signal<= ‘0elsifCClk^vent

andCLk = Q) then





if(Count_sample=0)thenif(Viilue_lever=O)then reduce_signal v=T; elsif(value_lever=M-l)theninsert_signal <= 11r;
endif;
else
insert_signal<= O; reduce_signal <= O; end if;
endif;
endprocess;

endrtl;

libraryIEEE; -可控分频模块

useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;

entitydigital_co is port(Reset :in stdjogic;

Clk
Clk_Est
insert_signal reduce_signal

);
end digital_co;

:in std_logic;
:buffer std_logic;
:in stcl_logic;

:in stdjogic



architecturertl of digitid_co is begin

signalCount_Control :integerrange 0 to 7;
process(Reset,Clk)
begin
if(Reset= '0')then
Count_Control<= 0;
elsiftCIk'eventand CLk = T) then if(Insert_Signal = T) then Count_Control<= Count_Control; elsif(Reduce_Signal =T) then
Count_Control<= Count_ControI + 2; else
Count_Control<= Count_Control + 1; end if;
endif;
endprocess;

process(Reset, Clk)
begin
if(Reset = '0') then
clk_est<= O;



elsif(Clk*eventand CLk = '0') then if(Count_Control = 7) then clk_est <=notclk_est;

endif;
endif;
endprocess;

endrtl;

libraryIEEE; -顶层设计模块

useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;

entitydigital_pll is port(Reset :in stdjogic;

Clk
Date_In
Clk_estimate

:in std_logic;
:in std_logic;
:out std_logic;

data_out:out std_logic

);

end digital_pll;


architecture rtl of digital_pll is

component phase_compare port(Reset

:in std_logic;

Clk_Est

:in stdjogic;

Date_In

:in stdjogic;

Phase_Error:out std_logic_vectoi< 1 downto 0)





endcomponent;

componentloop_filter
generic(M:integer);
port(Reset :instdjogic;
Clk :instdjogic;
Clk_Est :instd_logic;
insert_signal :outstd_logic;
reduce_signal :outstd_logic;
Phase_Error:instd_logic_vector(l downto 0) );

endcomponent;

componentdigital_co

port(Reset :instd_logic;
Clk :instd_logic;
Clk_Est :bufferstd_logic;
insert_signal :instd_logic;
reduce_signal :instdjogic

);

signal clk_est :stdjogic; end component;

signal phase_error :std_logic_vector( 1 downto 0); signalinsert_signal :stdjogic; signal reduce_signal :std_logic;

begin

u1: phase_compare
portmap( re set=>re set,
clk_est=>clk_est,date_in=>date_in, ph ase_e rro r=>p h ase_e rro r

);

u2:loop_filter
genericmap(256)
portmap(reset=>reset,
clk=>clk,
clk_est=>clk_est,phase_error=>phase_error,





msert_sign al=>inse rt_sign al, reduce_signal=>reduce_signal );

u3:digital_co

portmap( reset=>reset, clk=>clk, insert_signal=>insert_signal,reduce_signal=>reduce_signah

clk_est=>clk_est

);

clk_estimate<=clk_est;data_out<=date_in;

endrtl;

仿真图:

)PS

1.95 us

3.91 us
i

5.86 us
i

9.77 us

11.72 us

13.67 us

1& 83 ns

18.825 ns

Clk

VI

nj"Ln n n n m

Di..

VO

Reset

VO

jRKnnnnrLnrLrLrLnLrLrirLr

Cl...

VO

6通信系统课程设计心得体会

在学习了通信原理专业课后,对于通信系统课程设计,我们进行 了两
周左右的准备与调试,中间暴露了很多问题,当然也有很多挑战, 经过小

组的共同努力和老师的耐心指导下完成了本小组选题。作为对于通信原理专业必修课的一种检验,我们发现自己对于知识的掌握和理解还不够,尤其是涉及到实际运用当中的具体问题,比如同步过程的建立,尤其是位同步的建模与设计、上机调试。我们尝试了几种方法,在具体比较后,最后挑选了一个最小误差的数字锁相环成熟方案。还有在使用软件的过程屮暴露出来的问题,软件的使用、调试,尤其是各个模块合成时的同步。

在刚开始,以课程设计要求为基础,我们进行了一次讨论,完成了方案的总体思路和小组模块划分,并确定了完成课程设计的总体过程。首先是收集资料,比如图书馆里关于FPGA通信系统建模方面的书籍,网上关于数



字基带传输系统的资料。然后基于资料做了一个基本模型,关于这个基本

模型又进行了一次讨论,大家对每个模块发表自己的建议与修改提议,再

由模块负责人进行改进、提高。经过一段时间的修改,终于由基本模型过

渡到了最终模型。最终再基于最终模型进行了编程与上机调试。

本次通信系统课程设计,加深了我们对于本专业的认识,尤其对通信

原理的理解得到了很深的提高,更为以后的实际运用得到了锻炼。我们也

在小组分工合作中体会到了分工合作、协调共进的重要性,一个大的系统

工程涉及到方方面面,需耍很多人的通力合作才能取得最后的整体成功。

比如我们一直关心的同步问题。对于这次课程设计收获颇丰,很实在的锻

炼了自己的各项能力,是对未来进入通信行业的一次铺垫。 希望能够在此

基础上还能提高与进步。





附录:

参考资料:

[1]樊昌信,曹丽娜.通信原理(第6版)[M].北京:国防工业出版社,2011.[2]王兴权.QuartusIIFPGA设计手册.桂林电子科技大学计算机与控制学院,2007.褚振勇等.FPGA设计与应用[M].西安:西安电子科技大学出版社,2002.





显示全文