通信原理课程设计-基于VHDL的HDB3码实现.doc_第1页
通信原理课程设计-基于VHDL的HDB3码实现.doc_第2页
通信原理课程设计-基于VHDL的HDB3码实现.doc_第3页
通信原理课程设计-基于VHDL的HDB3码实现.doc_第4页
通信原理课程设计-基于VHDL的HDB3码实现.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

通信原理课程设计报告 题 目 基于vhdl的hdb3码实现 学院(部) 电子信息工程学院 专 业 通信工程(本) 学生姓名 * 学 号 2008* 年级 2008 指导教师 * 职称 讲师 二o一0年 十二 月目 录摘 要2第一章 eda辅助设计工具的介绍31.1 fpga的介绍31.2 vhdl语言和quartus3 1.2.1 vhdl语言3 1.2.2 eda工具quartus3第二章 hdb3码编码器的建模与实现52.1 hdb3码编码规则52.2 基于vhdl的编码器的建模及实现6 2.2.1 编码器的vhdl建模及难点分析6 2.2.2 基于vhdl编码器的实现72.3编码中单/双极性转换的实现11 2.3.1单/双极性转换的流程图11 2.3.2单/双极性变换的vhdl实现132.4 hdb3码编码器的波形仿真及分析14结论与心得16参考文献17附 录 hdb3码编码器完整源程序18 摘 要 本文以fpga为硬件平台,基于eda工具quartus为软件平台上对hdb3编码进行实现。通过本课程设计对eda工具软件quartus有一个初步的认识,并熟悉其基本的编译仿真等功能。由于在eda的软件平台quartus上不能处理双极性的信号,因此对hdb3码的编码采用双相码代替原代码,编码部分分为加v、加b以及单/双极性变换三个部分;quartus的平台上对输入的码元进行编码、系统仿真,验证了hdb3码的编码的正确性。关键词:hdb3;vhdl;编码;quartus第一章 eda辅助设计工具的介绍1.1 fpga的介绍 fpga是20世纪80年代中期,美国altera公司推出一种现场可编程门阵列,其结构主要分为三部分:可编程逻辑单元,可编程输入输出单元和可编程连线部分。fpga器件采用逻辑单元阵列结构和静态随机存取存储器工艺,设计灵活,集成度高,可利用计算机辅助设计,绘出实现用户逻辑原理图、用硬件描述语言等方式设计输入;然后经一系列转换程序、自动布局布线、模拟仿真的过程;最后生成配置fpga器件的数据文件,对fpga器件初始化。这样实现了满足用户要求的专用集成电路,真正达到了用户自行设计、自行研制和自行生产集成电路的目的。概括来说,fpga器件具有下列优点:高密度、高效率、系列化、标准化、小型化、多功能、低功耗、低成本、设计灵活方便,可无限次反复编程,并可现场模拟调试验证。使得使用fpga器件,一般可在几天到几周内完成一个电子系统的设计和制作,可以缩短研制周期,达到快速上市和进一步降低成本要求。1.2 vhdl语言和quartus1.2.1 vhdl语言常用的硬件描述性语言有vhdl和abel语言。vhdl语言起源于美国国防部的vhsic,vhdl是一种高级描述语言,适用于行为级的描述。vhdl语言具有以下的优点:1 计方法灵活、支持广泛 vhdl语言可以支持自顶至下的设计方法,而且还支持同步电路、异步电路、fpga设计。其范围之广是其它方法所不能比拟的。目前大多数eda工具几乎都支持vhdl语言。这给vhdl语言进一步推广和应用创造了良好的环境。2 统硬件描述能力强 vhdl语言具有多层次描述系统硬件功能的能力,可以从系统的框图直接到门级电路。1.2.2 eda工具quartusquartus软件是美国altera公司为sopc(系统级可编程芯片) 提供最全面的设计平台。它具有比起其他的编译软件,具有以下的优点:开放的界面quartus ii软件可与其它eda厂家的设计输入、综合、验证工具相连接。设计人员可使用altera或标准eda设计输入工具建立电路设计,使用quartusii编译器对altera的器件进行编译,然后使用altera或其他标准eda验证工具进行验证。quartus ii系统的核心编译器支持altera公司的flex10k, flex6000, max7000等可编程逻辑器件系列,除了max+plus ii以外惟一真正与结构无关的可编程逻辑设计环境。quartus的编译器还提供了强大的逻辑综合与优化功能,使设计人员能比较容易地将其设计集成到可编程逻辑器件中。2.接受高级描述语言quartus ii接受多种硬件描述语言,包括vhdl、ahdl、c、c+等语言。3.良好的人机界面quartus具有比max+plus更加人性化的人机界面,方便工程人员的操作。基于上述的特点,本文采用quartus软件对hdb3编、译码的仿真验证。第二章 hdb3码编码器的建模与实现2.1 hdb3码编码规则在现实的通信系统中,为了满足基带传输的要求,单极性脉冲序列必须经过适当的基带编码,以保证传输码型中无直流分量,有一定的自检能力和适应不同信源的统计特性的能力。在基带传输中,常用的码型有ami码、hdb3码等。其中,ami码是将输入单极性波形的所有正脉冲变为适合于在信道传输的正负极性交替的脉冲,而hdb3码则是在ami码基础上改进的一种双极性归零码,它除具有ami码功率谱中无直流分量,可进行差错自检等优点外,还克服了ami码当信息中出现连“0” 码时定时提取困难的缺点,同时hdb3码占用频带较窄。因此要了解hdb3码的编码规则,首先要知道ami码的构成规则,ami码就是把单极性脉冲序列中相邻的“1”码(即正脉冲)变为极性交替的正、负脉冲。将“0”码保持不变,把“1”码变为+1、-1交替的脉冲。如:表2.1 hdb3码编码规则代码串1001101111100010 10 ami+1000010000+110000+10加v+1000+v1000v+11000v+10加b+1000+v1000v+11+b00v+10hdb3+1000+110001+11+1001+10hdb3码是一种ami码的改进型,它的编码过程为:没有4个或4个连“0”串时,hdb3编码规律与ami码相同,即“1”码变为“+1”、 “-1”交替脉冲。当代码序列中出现4个或4个以上连“0”串时,则将每4个连“0”小段即“0000”的第4个0变换成与前一非“0”符号(+1或-1)同极性的符号,用破坏符号v表示(即+1记为+v,-1记为-v)。为了使附加v符号后的序列不破坏“极性交替反转”造成的无直流特性,还必须保证相邻v符号也应极性交替。这一点,当相邻v符号之间有奇数个非0符号时,则是能得到保证,当有偶数个非0符号时,则就得不到保证,这时再将该小段的第一个0变换成+b或-b,b符号的极性与前一非0符号的极性相反,并让后面的非0符号从v符号开始再交替变换。2.2 基于vhdl的编码器的建模及实现2.2.1 编码器的vhdl建模及难点分析从编码规则来分析,hdb3码的编码器的设计的难点是在于如何判决是否应该添加符号“b”在实际的电路中,可以考虑用寄存器的方法,首先把信码寄存在寄存器里,同时设置一个计数器计算两个“v”之间“1”的个数,经过4个码元时间后,有一个判偶电路来给寄存器发送是否添加符号“b”的判决信号,从而实现添加符号“b”功能。为了减少资源的消耗和电路的复杂度,在对信号进行hdb3码编码时,先依据hdb3码的编码规则进行添加破坏符号“v”然后进行添加符号“b”操作,最后才进行单极性信号变成双极性信号的转换。hdb3码的编码模型如图2.1所示。添加破坏节v添加符号b单/双极变换换数据输入 hdb3码图 2.1 hdb3码编码器模型如图所示:整个hdb3码的编码器包括3个功能部分:添加破坏节“v”、添加符号“b”和单极性码转变成双极性码,各部分之间采用同步时钟作用。 不过,信号处理的顺序不能像编码规则那样:首先把代码串变换成为ami码,完成添加破坏节“v”、符号“b”工作之后,其后的“+1”和“-1”的极性还要依据编码规则的规定变换。这样做需要大量的寄存器,同时电路结构也变得复杂。因此本设计在此处把信号处理的顺序变换一下:首先完成添加破坏符号“v”工作,接着执行添加符号“b”功能,最后实现单极性变双极性的信号输出。这样做的好处是输入进来的信号和添加破坏符号“v”、添加符号“b”功能电路中处理的信号都是单极性信号,且需要的寄存器的数目可以很少。另外,如何准备识别电路中的“1”、“v”和“b”,这也是一个难点,因为“v”和“b”符号是人为标识的符号,但在电路中最终的表示形式还是逻辑电平“1”,同时quartus软件也不能像hdb3码的编码规则那样把代码串变换成ami码,这是因为quartus软件不能处理带负号的信号,因此在软件中本设计还是利用双相码来表示。双相码的编码规则如下:对每个二进制代码分别利用两个不同相位的二进制代码去取代。例如:表2.2 双相码的编码规则信息序列11001100111双相码10100101101001011010102.2.2 基于vhdl编码器的实现1. 添加破坏符号“v”的实现添加破坏符号“v”模块的功能实际上就是对消息代码里的四个连0串的检测,即当出现四个连0串的时候,把第四个“0”变换成符号“v”(“v”可以是逻辑电平“1”),而在其他的情况下,则保持消息代码的原样输出,同时为了区别代码“1”、 “v”和“0”,在添加破坏符号“v”时,用“11”标识符号“v”,用“01”标识符号“1”,用“00”标识符号“0”。如表2.3所示:表2.3 标识符代替代码规则代码01v标识符000111因此,添加破坏符号“v”的设计思想如下:首先判断输入的代码是什么,如果输入的符号是“0”码,则接着判断这是第几个“0”码,如果是第四个“0”码,则把这个“0”码变换成“v”码。在其他的情况下,让原码照常输出。程序流程图如图2.2所示:其中: count0是作为连0的计数器。 count0_s是四个连“0”状态寄存器。1表示遇到四个连0,0表示未遇到四个连0的状态。开始codein_v=0? ncount0=0count0_s=0countout_v=“01” ycount0_s=0countout_v=“00”count0= count0+1count0=3? n ycount0=0count0_s=1countout_v=“11” 结束图2.2 添加破坏符号“v”符号流程图根据图2.2的思想,完成hdb3码编码的程序实现添加破坏符号“v”功能的程序,以下给出实现添加破坏符号“v”功能的关键代码,具体程序见附录一。add_v: process(clk,clr) -添加破坏符号v程序 begin if(clkevent and clk=1)then if(clr=1)then codeoutv=00; count0codeoutv=01; -01表示1 count0 if(count0=3)then count0_s=1; codeoutv=11; count0=0; end process add_v; s0(0)=codeoutv(0); s1(0)=codeoutv(1);信息序列: 10000100001100011添加破坏符号v后:0100000011010000001101010000000101此添加破坏符号“v”功能程序设计了一个计数器count0,用来作为应添加破坏符号“v”符号的标志。假设输入某信息序列,根据设计思想,输入代码一添加破坏符号“v”后的关系如下:信息序列: 10000100001100011添加破坏符号v后:01000000110100000011010100000001012.添加符号“b”的实现根据hdb3码的编码规则可知:添加破坏符号“v”模块的是为了保证附加“v”符号后的序列不破坏“极性交替反转”造成的无直流特性,即当相邻“v”符号之间有偶数个非0符号的时候,把后一小段的第一个“0”变换成一个非破坏符号“b”符号。如图2.3所示。其中: firstv作为前面是否出现“11”即符号“v”的标志位,其中0表示前面没有出现v,1表示前面已经出现过符号v。 count1作为记非0符号的奇偶数,其中0表示为偶数,1表示为奇数。 first_1遇1状态寄存器,1表示前面遇到过1,0表示没有遇到过。表2.4标识符代替代码规则代码01vb标识符00011110开始codeout_v=11codeout_v=00codeout_v=01firstv=0? ncount1=0?count1=0?first1=1?ycount0-s=1?count1=count1 n n n n结束codeout_b=s1(4)&s0(4)s1(4)=s1(3)s0(4)=s0(3)s1(4)=s1(3)s0(4)=s0(3)s1(4)=s1(3)s0(4)=s0(3)s1(4)=s1(3)s0(4)=s0(3)s1(4)=1s0(4)=0s1(4)=s1(3)s0(4)=s0(3)s1(4)=1s0(4)=0s1(4)=s1(3)s0(4)=s0(3)first1=1first1=1first1=1first1=1firstv=1count1=0count1=1count1=0count1=0count1=0count1=0count1=0 y y y图2.3 添加符号“b”符号流程图如图2.3所示可知,如何确定是“1”,还是“v”,是本课程设计所遇到的第一个难点。本程序处理难点的思路是:先把码元(经过添加破坏符号“v”处理过的)放入一个四位的移位寄存器中,在同步脉冲(时钟信号)的作用下,同时进行是否添加符号“b”的判决,等到码元从移位寄存器里出来的时候,就可以决定是应该变换成“b”符号,还是照原码输出。因此,在程序的结构中进行元件声明,调用库里的d触发来实现延迟作用。为了使程序的流程更加清晰,用了四个元件例化语句dffx:dff port map(),来说明信号的流向。以下给出添加符号“b”模块的部分程序,完整的程序见附录。ds11: dff port map(s1(0),clk,s1(1); ds01: dff port map(s0(0),clk,s0(1); ds12: dff port map(s1(1),clk,s1(2); ds02: dff port map(s0(1),clk,s0(2); ds13: dff port map(s1(2),clk,s1(3); ds03: dff port map(s0(2),clk,s0(3); -调元件dff,即d触发器 bclk: clkb=not clk; add_b: process(clkb) begin if(clkbevent and clkb=1)then if(codeoutv=11)then elsif(codeoutv=01)then if(count1=0)then first_1=1; count1=1; s1(4)=s1(3); s0(4)=s0(3); else s1(4)=s1(3); s0(4)=s0(3); end if; else count1=count1; s1(4)=s1(3); s0(4)=s0(3); end if;end if; end process add_b; codeoutb=s1(4)&s0(4);2.3编码中单/双极性转换的实现2.3.1单/双极性转换的流程图根据hdb3码的编码规则,可知 “v”的极性是正负交替变换的,而余下的“1”和“b”本课程设计把其看成为一体且是正负交替变换的,同时满足“v”的极性与前面的非零码极性一致。由此本课程设计就把“1”和“b”看成一组,而“v”单独作为一组来做正负交替变换。由此可得到程序流程图如图2.4、图2.5、图2.6所示。开始codeoutb=01 orcodeoutb=10接codeoutb=11和codeoutb=00flagob=2?flagob=1?flagob=0?n n n y y yflagov=2?flagov=1?flagov=0? n n y y y y yflagob=1flagob=2flagob=1flagob=2flagob=1 codeout=01codeout=11codeout=01codeout=11codeout=01结束图2.4 单双极性变换控制的程序流程图“01”和“10”部分接codeoutb=11和codeoutb=00codeoutb=11flagov=2?flagov=1?flagov=0?n n n y y yflagob=2?flagob=1?flagob=0?n n flagov=1flagov=2yy ycodeout=01codeout=11flagov=2flagov=1flagov=1codeout=11codeout=01codeout=01结束图2.5 单双极性变换控制的程序流程图“11”部分接codeoutb=11和codeoutb=00flagob=flagobflagov=flagovcode=00结束图2.6单双极性变换控制的程序流程图“00”部分2.3.2单/双极性变换的vhdl实现以下是部分实现单双极性变换控制功能的关键代码,具体程序见附录。 if(clkevent and clk=1)then if(codeoutb=01) or (codeoutb=10)then -1/b if(flagob=0)then if(flagov=0)then codeout=01; flagob=1; elsif(flagov=1)then codeout=11; flagob=2; elsif(flagov=2)then codeout=01; end if; elsif(flagob=1)then codeout=11; flagob=2; elsif(flagob=2)then codeout=01; flagob=1; -判01/10end if; elsif(codeoutb=11)then if(flagov=0)then elsif(flagov=1)then elsif(flagov=2)then codeout=01; flagov=1; -判v -flagov/flagob:0表示还未遇到v/b,1表示遇到奇数个v/b,2表示遇到偶数个v/b else codeout=00; flagob=flagob;flagov=flagov; end if; end if; end process output;end architecture rtl;2.4 hdb3码编码器的波形仿真及分析图2.7 输入全 “0”时编码输出图2.8 输入全“1”时编码输出图2.9 输入“000000000000001000000”时编码输出图2.10 输入“100001000011000011000010” 时编码输出由仿真波形可以得出:codein: 11111111111111111111 codeout:0111011101110111011101110111011101110111codein: 00000000000001000000codeout:01000001110000110100000100110000000110100codein: 100001000011000011000010codeout:010000000111000000110111010000011101110000110100结论与心得本课程设计采用fpga为硬件平台,以美国altera公司的quartus为软件平台,根据hdb3码的编译码原理,基于vhdl硬件描述性语言,采用“至顶向下”的方法来对hdb3码进行建模。此种设计方法就是把一个复杂的系统分成几个部分,再把每部分划分成若干子模块,各模块独立进行设计,采用这种模块化设计,有利于提高工作效率。同时在系统仿真校验时,若发现不符合要求,只要查找出有问题的模块,修改一次,则使该系统有问题的模块得到更正,从而解决了由此模块产生的系统错误。本课程设计采用以fpga为硬件平台,基于vhdl语言对hdb3码的编码的实现具有如下的优势: 使用vhdl语言对hdb3码的编码,相对于采用硬件电路来实现,可以对其采用模块化的设计,简化了系统设计的难度,降低了工程人员的工作强度。 可以在vhdl的软件quartus上对hdb3码的编码代码进行调试,正确后才下载到硬件平台上,节省了系统开发的成本。通过本次课程设计不仅对fpga的硬件描述语言有了进一步的认识和了解,而且认识并熟练掌握了quartus软件的使用。本次课程设计从选题、规划设计思路、设计模块到仿真实现使我们对设计有了一个系统的概念,并规范了我们的设计思路。参考文献1 樊昌信、张甫翎通信原理国防工业出版社,2005.52 谭会生、张昌凡eda技术及应用.西安科技大学出版社,200443 童诗白、华成英模拟电子技术基础.高等教育出版社,200344 黄葆华 杨晓静 牟华坤.通信原理.西安电子科技大学出版社.20075 潘松 黄继业eda技术实用教程科学出版社20056 潘松 黄继业eda技术与vhdl清华大学出版社20098 王开军,姜宇柏等.面向cpld/fpga的vhdl设计.北京:机械工业出版社,2007附录 hdb3码编码器完整源程序-本程序在添加破坏符号v时用11表示v,00表示0,01表示1-添加符号b时用00表示0,01表示1,10表示b-最终输出时是以11表示+1,00表示-1,10表示0library ieee;use ieee.std_logic_1164.all;entity enhdb3 is port(codein : in std_logic; clk : in std_logic; clr : in std_logic; codeout : out std_logic_vector(1 downto 0);end entity enhdb3;architecture rtl of enhdb3 is signal codeoutv: std_logic_vector(1 downto 0); signal count0: integer:=0; signal s0: std_logic_vector(4 downto 0):=00000; signal count1: integer range 1 downto 0;-0表示在v之间有偶数个1,1表示在v之间有奇数个1 signal codeoutb: std_logic_vector(1 downto 0); signal s1: std_logic_vector(4 downto 0):=00000; signal clkb: std_logic; signal s3: std_logic_vector(1 downto 0); signal flagob: integer range 2 downto 0; signal flagov: integer range 2 downto 0; signal firstv: integer range 1 downto 0; signal first_1: std_logic; signal count0_s:std_logic; component dff -调元件dff,即d触发器 port(d: in std_logic; clk: in std_logic; q: out std_logic); end component dff; begin add_v: process(clk,clr) -添加破坏符号v程序begin if(clkevent and clk=1)then if(clr=1)then codeoutv=00; count0codeoutv=01; -01表示1 count0 if(count0=3)then count0_s=1; codeoutv=11; count0=0; else count0_s=0; count0=count0+1; codeoutv codeoutv=00; count0=count0; count0_s=0; end case; end if; end if; end process add_v; s0(0)=codeoutv(0); s1(0)=codeoutv(1); ds11: dff port map(s1(0),clk,s1(1); ds01: dff port map(s0(0),clk,s0(1); ds12: dff port map(s1(1),clk,s1(2); ds02: dff port map(s0(1),clk,s0(2); ds13: dff port map(s1(2),clk,s1(3); ds03: dff port map(s0(2),clk,s0(3); -调元件dff,即d触发器bclk: clkb=not clk; add_b: process(clkb) begin if(clkbevent and clkb=1)then if(codeoutv=11)then if(firstv=0)then if(first_1=1)then count1=0; firstv=1; s1(4)=s1(3); s0(4)=s0(3); else if(count0_s=1)then firstv=1; s1(4)=1; s0(4)=0; count1=0; else count1=0; firstv=1; s1(4)=s1(3); s0(4)=s0(3); end if; end if; else if(count1=0)then-v之

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论