基于Quartus II的HDB3码编解码设计Word文档格式.docx
《基于Quartus II的HDB3码编解码设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于Quartus II的HDB3码编解码设计Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
1.2.1EDA概述
EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
1.2.2EDA技术的应用
如今,EDA技术的应用已经非常广泛,在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。
此外,EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。
例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。
1.3VHDL语言
1.3.1VHDL语言简介
VHDL语言即超高速集成电路硬件描述语言,是一种用于电路设计的高级语言,在80年代的后期出现。
最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。
VHDL主要用于描述数字系统的结构、行为、功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部和内部,既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
1.3.2VHDL语言的优势
首先,与其他的硬件描述语言相比,VHDL语言具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。
强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。
其次,VHDL语言有丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
还有,对于用VHDL语言完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
最后,VHDL语言对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
第二章工作原理
2.1数字基带传输原理
在某些具有低通特性的有线信道中,特别是在传输距离不太远的情况下,基带信号可以不经过载波调制而直接进行传输,这样的传输系统,称为数字基带传输系统。
在实际的基带传输系统中,并不是所有的基带波形都适合在信道中传输。
例如,含有丰富直流分量和低频分量的单极性基带波形就不适宜在低频传输特性差的信道中传输,因为这有可能造成信号的严重畸变。
又如,当消息码中包含长连“0”或“1”时,非归零波形呈现出连续的固定电平,以致于无法提取定时信息。
单极性归零码在传送长连“0”时,也存在同样的问题。
因此,在选择传输码型时会考虑以下一些原则:
(1)不含直流,且低频分量尽量少;
(2)应含有丰富的定时信息,以便于从接收码流中提取定时信号;
(3)功率谱主瓣宽度窄,以节省传输频带;
(4)不受信息源统计特性的影响,即能适应于信息源的变化;
(5)具有内在的检错能力,即码型应具有一定规律性,以便利用这一规律性进行宏观监测;
(6)编译码简单,以降低通信延时和成本。
2.2HDB3码编码原理
(1)将消息代码变换成AMI码;
(2)检查AMI码中的连0情况,当无4个以上的连0传时,则保持AMI的形式不变;
(3)若出现4个或4个以上连0时,则将1后的第4个0变为与前一非0符号(+1或-1)同极性的符号,用V表示(+1记为+V,-1记为-V),V称为破坏码;
(4)检查相邻V符号间的非0符号的个数是否为偶数,若为偶数,则再将当前的V符号的前一非0符号后的第1个0变为+B或-B符号,且B的极性与前一非0符号的极性相反,并使后面的非0符号从V符号开始再交替变化。
编码举例如下:
表2-1HDB3码编码举例
消息码
1
AMI码
+1
-1
HDB3码
+V
-B
-V
HDB3码的特点如下:
(1)基带信号无直流成分,且只有很小的低频成分;
(2)连0串符号最多只有3个,利于定时信息的提取;
(3)不受信源统计特性的影响。
2.3HDB3码解码原理
HDB3码的解码是编码的逆过程。
从上述编码规则可以看出,每一个破坏脉冲“V”总是与前一非“0”脉冲同极性(包括B)。
也就是说,从接收到得消息码中可以很容易的找到破坏点“V”,于是也就断定“V”符号及其前面的三个符号必是连“0”符号,从而恢复4个连“0”码,再将所有“-1”变成“+1”后便可的到源消息码。
解码举例如下:
表2-2HDB3码解码举例
V符号
解码
第三章基于QuartusII的HDB3码编解码器的设计
3.1HDB3编码器设计
3.1.1HDB3编码器总体设计思路
在实际设计中,若按照第二章中编码原理需要先把消息码转换成AMI码,再进行插“V”和“B”的操作,最后还要依据编码规则变换“1”的极性。
这样做需要大量的寄存器,同时电路结构也变得十分复杂。
以我现在所掌握的知识还无法完成。
因此,在实际的设计中,首先完成插“V”工作,然后完成插“B”功能,最后完成单极性变双极性的信号输出。
这样做的好处是:
输入进来的信号和插“V”、插“B”功能电路中处理的信号都是单极性信号,且需要的寄存器的数目可以少很多。
设计框图如图3-1所示:
图3-1HDB3码编码设计框图
3.1.2插V模块
插V设计思路:
首先判断输入的代码是“0”码还是“1”码,如果输入的是“0”码,则接着判断这是第几个“0”码。
若是第四个,则把这一位码元变换成为“V”码(用“11”表示),在其他条件下,让原代码照常输出。
为了方便,每个码元用双相码表示。
图3-2插V波形图
分析:
原消息码(输入):
1000011000011
插V后(理论值):
01000000110101000000110101
插V后(仿真值):
结论:
仿真的结果和理论值一样,是正确的。
但有一个周期的延时,T=20ns。
。
注:
01:
表示1;
11:
表示V;
00:
表示0。
3.1.3插B模块
插B设计思路:
先把消息码寄存在寄存器中,同时设置一个计数器计数两个“V”之间“1”的个数,经过4个码元时间后,由一个判偶电路来给寄存器发送是否插“B”的判决信号,从而实现插“B”功能。
当计数器为偶数时,说明需要插B。
波形图如图3-3所示。
图3-3插B波形图
输入:
01000000110100000011010100000011
插B后(理论值):
01000000110100000011010110000011
插B后(仿真值):
但有5个周期的延时,T=20ns。
表示0;
10:
表示B。
3.1.4单/双极性转换模块
单/双极性转换设计思路:
V”的极性与其之前的非0码的极性相同,并且“V”的极性是正负交替的。
而“B”的极性和其之前的非0码的极性相反,并且可以将除“V”之外的“1”和“B”看成一体,它们的极性是正负交替的。
因此,可以将“V”单独的进行极性变换,而“1”和“B”作为一个整体进行极性变换。
波形图如图3-4所示。
图3-4单/双极性转换波形图
01000000110100000011010110000011
极性转换后(理论值):
01000000011100000011011101000011
极性转换后(仿真值):
但有1个周期的延时,T=20ns。
输入中:
01:
表示B;
极性转换后:
表示+1;
表示-1;
3.1.5HDB3编码器整体仿真
如图3-5所示,即为编码器整体的仿真波形,从图中可以很清楚的看出序列经过插“V”模块,插“B”模块与单/双极性转换模块后的波型变换,由于每一步的输入是上一步的输出信号,因此最终经过单/双极性转换模块后的波形即为编码后的波形。
图3-5HDB3编码波形图
分析:
原消息码(输入):
1000011000011
插V后:
01000000110101000000110101
插B后:
01000000110101100000110101
极性转换后(即编码)
仿真值:
01000000011101110000110111
理论值:
结论:
HDB3编码的仿真结果和理论值一样,是正确的。
注:
插V和插B后:
11:
00:
10:
极性转换后(即编码):
3.2HDB3解码器设计
3.2.1HDB3解码器总体设计思路
1.去V:
“V”的极性与其前的非0码极性相同,因此可以很容易的找出“V”码。
当未编译代码中有3连“0”且其前后两个非零脉冲极性相同,则将最后一个非0码转换为“0”,否则不做改变;
2.去B:
当代码中有2连“0”且其前后两个非0码的极性相同,则将这两个非0码都转换为“0”,否则不做改变。
3.双/单极性转换:
再将所有的-1变换成+1后,就可以得到原消息代码
4.在实际编写VHDL代码时,参照上述译码规则进行编写。
根据HDB3解码器的设计思想,实现HDB3解码功能的流程图如图3-6所示,框图如图3-7所示:
图3-6HDB3解码器流程图
图3-7HDB3码解码设计框图
3.2.2检测V并去V模块
检测V并去V设计思路:
设置两组4位移位寄存器D1和D0,任意一个码元由D1和D0表示(即D1&
D0),然后定义一个信号code_out1,code_out1接收输入码元,当code_out1的值为“01”或者“11(即“+1”或“-1”)时,判断存放在寄存器D1、D0中的码元是否有“11”或者“10”出现(即是否是“0001”或“000-1”这样的形式)。
若有,则表明4位移位寄存器中应是“000V”这样的形式,将V置为“0”输出。
VHDL语言实现检测V并去V的程序如下:
if((code_out1="
11"
andD1(3downto0)="
0001"
andD0(3downto0)="
)or
(code_out1="
01"
0000"
))then
D1(2downto1)<
=D1(3downto2);
D0(2downto1)<
=D0(3downto2);
-----检测到V
D1(3)<
='
0'
;
D0(3)<
D1(0)<
=D1
(1);
D0(0)<
=D0
(1);
-----去V
3.2.3检测B并去B模块
检测B并去B设计思路:
当信号code_out1的值为“01”或者“11(即“+1”或“-1”)时,判断存放在寄存器D1、D0中的码元是否有“11”或者“10”出现(即是否是“001”或“00-1”这样的形式)。
若有,则表明4位移位寄存器中应是“B00”这样的形式,将B置为“0”输出。
VHDL语言实现检测B并去B的程序如下:
if((code_out1="
andD1(3downto1)="
001"
andD0(3downto1)="
000"
D0(2downto1)<
-----检测到B
D0(3)<
D1(0)<
D0(0)<
-----去B
3.2.4双/单极性转换模块
双/单极性转换模块设计思路:
除去以上情形,当信号code_out1的值为“01”或者“11”(即“+1”或“-1”)时,则输出“1”码;
当信号code_out1的值为“00”(即“0”)时,则直接输出“0”码。
VHDL语言实现双/单极性转换的程序如下:
if((D1(0)='
1'
andD0(0)='
)or(D1(0)='
))
D1(2downto1)<
=t
(1);
=t(0);
-----输入为0码,原样输出
))thencode_out<
-----将+1或-1转换为1码输出
3.1.5HDB3解码器整体仿真
如图3-8所示,即为HDB3解码器整体的仿真波形。
仿真波形图中,reset为计数器清零信号,clk为时钟信号,code_in为输入的信号,是上一步单/双极性转换模块的输出信号,code_out为译码之后的输出信号。
D1和D0为4位移位寄存器。
结合HDB3码的译码规则及上图的仿真波形得出以下结论:
图3-8HDB3解码波形图
clr:
低电平有效,高电平清零;
clk:
时钟,T=20ns;
极性转换后(即编码):
解码(仿真值):
1000011000011
解码(理论值):
HDB3解码的仿真结果和理论值一样,是正确的。
但有12个周期的延时,T=20ns。
参考文件
[1]樊昌信,曹丽娜.通信原理.北京:
国防工业出版社,2009
[2]赵鑫,蒋亮,齐兆群,李晓凯.VHDL与数字电路设计.北京:
机械工业出版社,2005
[3]潘松,黄继业.EDA技术与VHDL.北京:
清华大学出版社,2005
[4]江国强.EDA技术与应用.北京:
电子工业出版社,2004
[5]段吉海,黄智伟.基于CPLD/FPGA的数字通信系统建模与设计.北京:
[6]王素珍,王涛.基于VHDL语言的HDB3编译码器的一种实现方法[J].内蒙古师范大学学报:
自然科学版,2006,35(03):
300-303,307.
[7]夏平,向学军,万钧力.基于VHDL的数字基带信号HDB3调制解调器仿真实现[J].三峡大学学报:
自然科学版,2007,29(02):
147-149,166.
体会与建议
经过一个星期的时间,完成了基于Quartus的HDB3码编解码的课程设计,使用的是VHDL语言编写的,属于纯软件实现。
按照HDB3码编码原理:
先将消息码变为AMI码,再进行插“V”、插“B”,理论上是可行的,但是实际操作难度比较大,需要大量的移位寄存器,并且程序编写更加复杂,我目前的知识水平无法实现。
因此,我采用了模块化设计,将HDB3码的编码设计分为三个模块:
插“V”模块、插“B”模块和单/双极性转换模块,使得HDB3码编码的实现更简单,更有层次。
HDB3码的解码设计,本质上是HDB3码编码的逆过程。
设计思路为:
检测“V”并去“V”、检测“B”并去“B”和双/单极性转换,只要一个模块即可以实现。
通过这次的课程设计,我学习了很多东西。
首先,对HDB3码编解码的原理及设计思路有了全新的认识,对HDB3码有了更深刻,更加全面的理解。
此外,对于VHDL语言的学习也更加透彻,对Quartus软件的使用更加熟练。
这次课程设计让我深刻的体会到理论与实际相结合的重要性,要对理论理解透彻,才能灵活的运用到实际当中,绝不是直接生搬硬套。
附录
源程序:
LIBRARYieee;
-----头文件声明
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityV2is------端口设置
port(codein:
instd_logic;
clk:
v:
outstd_logic_vector(1downto0);
b:
p:
code_out:
outstd_logic);
endV2;
architecturert1ofV2is------设置信号
signalflag:
std_logic;
signalcount0:
integer:
=0;
signalcodeoutv:
std_logic_vector(1downto0);
signals0:
std_logic_vector(4downto0):
="
00000"
signals1:
signalcount1:
integerrange1downto0;
signalcodeoutb:
std_logic_vector(1downto0);
signalflagv:
signalfirstv:
integerrange0to1;
signalflag1b:
integerrange1downto0:
=1;
signalD1,D0:
std_logic_vector(3downto0);
signalcode_out1