基于FPGA的二次群异步复接实现(Verilog HDL设计) .doc_第1页
基于FPGA的二次群异步复接实现(Verilog HDL设计) .doc_第2页
基于FPGA的二次群异步复接实现(Verilog HDL设计) .doc_第3页
基于FPGA的二次群异步复接实现(Verilog HDL设计) .doc_第4页
基于FPGA的二次群异步复接实现(Verilog HDL设计) .doc_第5页
免费预览已结束,剩余12页可下载查看

下载本文档

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

文档简介

7.6 基于FPGA的二次群异步复接实现7.6.1 数字复接简介数字通信的优越性推动通信网的数字化,越来越多的数字化业务,包括数据,语音,图像等等要求数字通信网具有大的传输容量和传输效率,数字复接技术正是在这种情况下发展起来的。为了充分利用信道资源,数字复接把若干中低速数字信号合并成一个高速数字合路信号,再通过高速信道传输,从而可以用较少的信道传送更多的信息,到目的地后再分接还原为各个中低速数字信号。针对不同的信源特点把复接分为同步复接和异步复接,同步复接是指各低速分路信号受同一时钟源控制,而异步复接则是由不同时钟源控制,具有标称的相同速率,但实际速率在一个容差范围之内,绝大部分异步复接都属于准同步复接。数字复接是从低速到高速按照一定的规定速率分级进行的,为了使数字终端设备通用化,每一级的低速分路信号的数量和速率以及下一级的高速合路信号的速率都必须符合一个标准,原CCITT已经推荐了两类准同步数字复接系列,考虑到2.048Mbit/s系列帧结构同目前数字交换用帧结构的统一性和该系列的完善性能,我国统一采用2.048Mbit/s的数字系列。 数字复接系统包括数字复接器(digital multiplexer)和数字分接器(digital demultiplexer)两部分,参见图7.6.1。通常总是把数字复接器和数字分接器装在一起做成一个设备,称为复接分接器(缩写为muldex),一般简称数字复接设备(digital multiplex equipment)。数字复接器是由定时、调整和复接单元所组成;数字分接器是由同步、定时、分接和恢复单元所组成。定时单元给设备提供统一的基准时间信号。复接器的定时单元备有内部时钟,也可以由外部时钟推动;分接器的定时单元只能由接收的时钟来推动,借助于同步单元的控制,使得分接器的基准时间信号与复接器的基准时间信号保持正确的相位关系,即保持同步。调整单元与恢复单元是对应的,复接单元与分接单元是对应的。调整单元的作用是把各输入支路数字信号进行必要的频率或相位调整,形成与本机定时信号完全同步的数字信号,然后由复接单元对它们实施时间复用形成合路数字信号;分接单元的作用是把合路数字信号实施时间分离形成同步支路数字信号,然后再通过恢复单元把它们恢复复成为原来的支路数字信号。图7.6.1 数字复接系统由时分复用多路通信原理可知,在复接单元输入端上的各支路数字信号必须是同步的,即它们的生效瞬间与本机相应的定时信号必须保持正确的相位关系。但是在调整单元的输入端即在复接器的输入端上则不必有这样要求。如果复接器输入支路数字信号与本机定时信号是同步的,那么调整单元只需调整相位,有时甚至连相位也无须调整,这种复接器称同步复接器;如果输入支路数字信号与本机定时信号是异步的,即它们的对应生效瞬间不一定以同一速率出现,那么调整单元要对各个支路数字信号实施频率和相位调整,使之成为同步数字信号,这种复接器称异步复接器;如果输入支路数字信号的生效瞬间相对于本机对应的定时信号是以同一标称速率出现,而速率的任何变化都限制在规定的容差范围内,这种复接器称为准同步复接器。近年CCITT把上述异步复接器(heterochronous muldex)和准同复接器(plesiochronous muldex)统称为异步复接器(asynchronous muldex)。7.6.2 时分复用的帧结构现以PCM30/32路电话系统为例,来说明时分复用的帧结构,这样形成的PCM信号称为PCM一次群信号。PCM30/32系统的意思是整个系统共分为32个路时隙,其中30个路时隙分别用来传送30路话音信号,一个路时隙用来传送帧同步码,另一个路时隙用来传送信令码。图7.6.2是CCITT建议G.732规定的帧结构。图7.6.2 PCM30/32路系统帧结构从图中可看出,PCM30/32路系统中一个复帧包16帧,编号为帧、帧帧,一复帧的时间为2毫秒。每一帧(每帧的时间为125微秒)又包含有32个路时隙,其编号 为,每个路时隙的时间为3.9微秒。每一路时隙包含 有8个位时隙,其编号为,每个位时隙的时间为0.488微秒。 路时隙分别传送第1路-第15路的信码,路时隙分别传送第16路第30路的信码。偶帧时隙传送帧同步码,其码型0011011。奇帧时隙码型为1A1SSSSS,帧时隙前4位码为复帧同步码,其码型为0000;A2为复帧失步对告码。帧的时隙用来传送30个话路的信令码。F1帧时隙前4位码用来传送第1路信号的信令码,后4位码用来传送第16 路信号的信令码。直到帧时隙前后各4位码分别传送第15路、第30路信号的信令码,这样一个复帧中各个话路分别轮流传送信令码一次。按图2-3所示的帧结构,并根据抽样理论,每帧频率应为8000帧/秒,帧周期为125微秒,所以PCM30/32路系统的总数码率是=80000(帧/秒)32(路时隙/帧)8(bit/路隙)=2048kbit/s=2.048Mbit/s。7.6.3 数字复接的方法及方式1.数字复接的方法数字复接的方法主要有按位复接和按字复接和按帧复接三种。(1)按位复接按位复接的方法时每次只依次复接每个支路的一位码,所以又叫比特复接。复接以后的码序列中的第一个时隙中的第一位表示第一路的第一位码;第二位表示第二路的第一位码;依此类推,则第n位表示第n路的第一位码。各路的第一位码依次取过以后,再循环取以后的各位,例如第二个时隙中第一位表示第一路的第二位码;第二位表示第二路的第二位码;依此类推,则第n位表示第n路的第二位码。这种复接方法的特点是:复接时每支路依次复接一个比特,设备简单,要求存储容量小,较易实现,目前被广泛采用,但要求各个支路码速和相位相同。图7.6.3(a)所示是4个PCM30/32系统TS1时隙(CH1话路)的码字情况。图7.6.3(b)是按位复接后的二次群中各支路数字码排列情况。图7.6.3 按位复接与按字复接示意图(2)按字复接就PCM基群而言,一路时隙有8位码,复接时现将8位码寄存起来,在规定时间内8位码一次复接,复接以后的码序列顺序为:第一路的TS0、第二路的TS0、第三路的TS0、第四路的TS0、第一路的TS1、第二路的TS1,后面各位依此类推。也就是说,各路的TS0依次取过以后,再循环取以后的各个时隙。这种复接方法的特点是:利用多路合成处理和交换,但要求有较大的存储容量,使得电路较复杂。图2.2(c)是按字复接后的二次群,对PCM30/32系统来说,一个码字有8位码,它是将8位码先存储起来,在规定时间内四个支路轮流复接,这种方法的特点是:每次复接一个支路的一个码字(8位),因此有利于数字交换,但要求有较大的存储容量。(3)按帧复接这种复接方法是每次复接一个支路的一帧数码,复接以后的码序列顺序为:第一路的F0、第二路的F0、第三路的F0、第四路的F0、第一路的F1、第二路的F1,后面各位依此类推。也就是说,各路的第F0依次取过以后,再循环取以后的各个帧。这种复接方法的特点是:每次复接一支路信号的一帧,因此复接时不破坏原来各个帧的结构,有利于交换,但要求有更大容量的缓冲存储器。我国目前的复接设备多采用按位复接方式或者按字复接方式两种方式。2.数字复接的方式按照复接时各低次群时钟的情况,复接方式可分为同步复接、异步复接与准同步复接。(1)同步复接同步复接指被复接的各个输入支路信号在时钟上必须是同步的,即各个支路的时钟频率完全相同的复接方式,但是复接时由于各支路信号不一定具有相同的相位,即使它们具有相同的相位,可能由于各支路的信号到达复接设备的传输距离不同,使得到达复接设备时各支路的相位不一致,因此在复接前必须进行相位调整。此外为了接收端能够正确接收各支路信码及分接的需要,各支路在复接时,必须插入一定数量的帧同步码、告警码及业务码等。PCM基群就是这样复接起来的。(2)异步复接将没有统一的标称频率或相应的数量关系的不同时钟源的各个支路数字信号进行复接的方式称为异步复接。在数据通信中广泛采用这种复接方式。(3)准同步复接准同步复接是指参与复接的各个低次群使用各自的时钟需要在一定容差范围内。准同步复接相对于同步复接增加了码速调整及码速恢复环节。在复接之前使各基群信号有相同的传输码率过程叫做码速调整。码速恢复是指把同步支路码流还原成为原来的准同步支路码流。这种准同步复接方式在复接前必须将各支路的码速都调整到规定值后才能复接,但不要求苛刻的速率同步和相位同步,只要求速率标称值及其容差符合规定,就可以实现复接。基于以上特点,准同步复接使目前使用最广泛的一种复接方式。例如对于二次群复接,4各基群信号虽标称传输码率都是2.048Mb/s,但因为4个基群信码流瞬时传输码率各不相同。比较同步复接和准同步复接的特点可知,准同步复接分接实际上是在同步复接分接的基础上增加了码速调整和码速恢复部分。 7.6.4 异步复接原理异步复接的原理框图见图7.6.4所示,虚线分隔不同的时钟域,四路具有标称速率的支路信息码,因为是异源时钟,速率不能做到精确相等,只能保证在一个容差范围内,如果直接同步复接则会出现重采样或漏采样的情况,造成误码,因此必须进行码速调整,通过码速调整四路支路信息码都被调整到一个标称为的速率上,然后再经同步复接成高速合路信号(速率为4)通过高速信道传送出去。异步复接系统的设计归结为码速调整和同步复接的设计。 图7.6.4 异步复接原理框图 1.正码速调整码速调整的方法较多,本节采用正码速调整方法,即把将被复接的基群的码速率都调高,使其同步在高的标称速率2.112Mbit/s上。认清二次群子帧结构能很好的理解正码速调整的原理,图7.6.5为复接支路帧结构,由前3位帧码组和第54,107,160位共3位插入指示C11,C12,C13,第161位码速调整插入比特V1以及信息位组成,当C11C12C13000时,V1为信息位,当C11C12C13111时,V1为非信息位。 图7.6.5 二次群复接子帧结构设:标称支路比特率:标称复接比特率:每帧每支路的信息码数:每帧每支路的非信息码数,即每帧中非信息比特总数为个比特,其中参与复接的支路数:帧长(Frame length),即一帧中信息比特及非信息比特的总和,所以 (7-6-1)做如下定义:同步复接支路速率同步复接器为每个同步复接支路准备的最大可能的复接速率: (7-6-2):帧频每单位时间内的帧数: (7-6-3):标称码速调整速率(Nommal Justification Rate)当支路速率与复接速率二者都等于其标称值时,插入或删除调整数字的速率。也称标称塞入速率(Nommal Stuffing Rate): (7-6-4):最大码速调整率 (7-6-5):码速调整比率(Justification Rate)实际调整速率与最大调整速率之比,也称塞入比率(Stuffing Rate): (7-6-6)有了以上各参数后,可以得出码速调整的基本关系式: (7-6-7)(7-6-7)式是设计异步复接设备的基本关系式,其中,支路速率复接速率和复接路数都是已知量;帧长对应每个支路的非信息比特数及调整比率是基本设计量。在这三个设计量中通常取帧长做自变量。每取一个值即可按基本公式求得其右端的数值,该数值的整数部分就是值;小数部分就是值。其中所引用的符号、和的单位都是赫;、和都是无量纲的数量。2. 同步复接同步复接也分为按字复接和按位复接,本节采用按位复接的方法,即在码速调整后的一个比特位宽时间内产生四个选通信号,分别选通四路信号,分时的轮流把各支路的一位码传送到线路上去。图7.6.6是按位同步复接的示意图。 图7.6.6 按位同步复接示意图7.6.5 基于FPGA的异步复接各模块设计根据上面的计算,分析可知复接的子帧的结构,由于使用大量分频,延时电路和与非门会使时序仿真波形产生大量的毛刺,使得电路由于毛刺而得不到正确结果,而且加上消除毛刺的电路会使的电路变得复杂,所以本设计用Verilog HDL语言编写码速调整这一部分的内容。将2.048Mbit/s的基群信号输入到码速调整模块后,按照上述的子帧结构输出,输出码速率为2.112Mbit/s,四路信号经过这样调整后以相同的速率输出,就可以进行同步复接了。本设计采普遍的自顶向下的设计流程。首先确定顶层的结构,共有两个模块:发送模块(Transmitter)和接收模块(Receiver)。根据系统要求,确定发送模块和接收模块的接口,如图7.6.7。再进行细化:图7.6.7 发送模块接口图发送模块:CLKn_2048:第n路信号的时钟;CODEn_IN:第n路信码;CLK_8448:发端主时钟即复接时钟;CODE_OUT:复接后的码流输出;其中发送模块由码速调整单元(StuffUnit)、分频器(ClkDivider)、和同步复接器(Mux)组成;1. 码速调整的程序思路仿真实现其中码速调整单元是最重要的单元,对整个发送系统的运行有很大的影响。下面介绍本设计对这一部分的程序编写思路(程序见附录):(1)如图7.6.7所示其中一路的情况,首先设置码速调整器件的输入,输出端口。支路时钟输入为CLK_2048,复接时钟为CLK_8448,一个支路的信码输入为CODE_IN,调整之后的信码输出为CODE_OUT。图7.6.8 码速调整接口图(2)由CLK_8848的时钟四分频产生CLK_2112的调整时钟即读出时钟,同时由CLK_2048的时钟控制信码输入一个8位的移位寄存器code_reg8:1。(3)再定义一个三位寄存器cont12:0,用于控制code_reg的数据输入一个16位的寄存器cash_reg16:1(每输入一位cont1就加1,到7就归零),和一个2位的标志寄存器flag1:0,用于检测数据,控制开始读出。同时当flag是“00”时把code_reg的8:1输入给cash_reg的前8位8:1,同时flag加1。Flag为“01”时把又输入code_reg的8位数据输入给cash_reg的后8位16:9,flag又加1,如此循环,又把8位给cash_reg的前8位,信码不断的输入用于下面调整插码之后再输出。(3)做好上面的准备工作之后就开始由CLK_2112控制和一些寄存器控制标志码的插入和码的读出了,把一个子帧分为四组,如上子帧结构图5.1所示。当flag的值不为零时表示码已准备好了,就开始进行调整。根据子帧结构,首先由寄存器cnt2控制先插入3个比特F11、F12、F13用于帧同步和管理控制,然后再按时钟CLK_2112输出信码,cnt2输出一个就加1,到53就清零,有50位的信码输出。第二,第三组都是由cnt2给一位插入标志位C11和C12,剩下的就控制信码的输出,仍旧是到53时就归零。第四组cnt2使第一位插入C13,然后由一个V_flag寄存器判断下一位输出的是信码或是一位码速调整插入比特V,之后再输出信码,cnt2也是53后归零。如此就完成了一路子帧的码速调整,调整后整个子帧的结构就如上面图7.6.5所示。由CLK_2112控制读出。四路信码都同样进行调整,输出的都是码速率为2112Mb/s的同步信号。下面就可以进行同步复接的设计了。码速调整的Verilog HDL程序module multiplex1(clk_2048,code_in,clk_8448,code_out);input clk_2048,clk_8448,code_in;output code_out;/定义接口reg code_out,clk_2112; reg8:1 code_reg;reg16:1 cash_reg;reg1:0 flag,state,div4;reg2:0 cnt1;reg5:0 cnt2;reg3:0 i;reg5:0 v_flag;/定义各种移位寄存器always (posedge clk_8448)begin if(div4=1) begin clk_2112=1;div4=div4+1;end else if(div4=3) begin clk_2112=0;div4=0;end else div4=div4+1;end/对clk_8448进行四分频得到clk_2112always (posedge clk_2048)begin code_reg8=code_in; code_reg7:1=code_reg8:2; /信号输入code_reg八位移位寄存器,串进并出case (flag) 2b00 :begin if(cnt1=7) begin flag=2b01; cnt1=0;cash_reg8:1=code_reg8:1; end else cnt1=cnt1+1; end 2b01 :begin if(cnt1=7) begin flag=2b10;cnt1=0; cash_reg16:9=code_reg8:1; end else cnt1=cnt1+1; end 2b10 :begin if(cnt1=7) begin flag=2b01;cnt1=0;cash_reg8:1=code_reg8:1; end else cnt1=cnt1+1; end default :flag=2b00; endcaseend/定义flag和使code_reg的信码输入到16位的cash_reg移位寄存器always (posedge clk_2112)begin if(flag=2b01 | flag=2b10) begin case(state) 2b00:begin if(cnt2=0) begin cnt2=cnt2+1;code_out=1; end else if(cnt2=1) begin cnt2=cnt2+1;code_out=0; end else if(cnt2=2) begin cnt2=cnt2+1;code_out=0; end /以上三句为帧头的写入,第一路写为“100”,第二路写为“100”,第三路写为“111”,第四路写为“101”,结果四路按位复接后就得到“111100100011”12位的帧头了。 else begin if(i=0) begin code_out=cash_reg1;i=i+1; end else if(i=1) begin code_out=cash_reg2;i=i+1; end else if(i=2) begin code_out=cash_reg3;i=i+1; end else if(i=3) begin code_out=cash_reg4;i=i+1; end else if(i=4) begin code_out=cash_reg5;i=i+1; end else if(i=5) begin code_out=cash_reg6;i=i+1; end else if(i=6) begin code_out=cash_reg7;i=i+1; end else if(i=7) begin code_out=cash_reg8;i=i+1; end else if(i=8) begin code_out=cash_reg9;i=i+1; end else if(i=9) begin code_out=cash_reg10;i=i+1; end else if(i=10) begin code_out=cash_reg11;i=i+1; end else if(i=11) begin code_out=cash_reg12;i=i+1; end else if(i=12) begin code_out=cash_reg13;i=i+1; end else if(i=13) begin code_out=cash_reg14;i=i+1; end else if(i=14) begin code_out=cash_reg15;i=i+1; end else if(i=15) begin code_out=cash_reg16;i=0; end if(cnt2=52) begin cnt2=0;state=2b01; /if(f_flag=3) / f_flag=0; /else f_flag=f_flag+1; end else cnt2=cnt2+1; end end/子帧的第一组数据的调整输出 2b01:begin if(cnt2=0) begin cnt2=cnt2+1; if(v_flag=0 | v_flag=1 | v_flag=31 | v_flag=2 | v_flag=4 | v_flag=6 | v_flag=8 | v_flag=10 | v_flag=12 | v_flag=14 | v_flag=16 | v_flag=18 | v_flag=20 | v_flag=22 | v_flag=24 | v_flag=26 | v_flag=28 | v_flag=30|v_flag=32) /flag c1:insert info_code; code_out=0; else code_out=1; end else begin if(i=0) begin code_out=cash_reg1;i=i+1; end else if(i=1) begin code_out=cash_reg2;i=i+1; end else if(i=2) begin code_out=cash_reg3;i=i+1; end else if(i=3) begin code_out=cash_reg4;i=i+1; end else if(i=4) begin code_out=cash_reg5;i=i+1; end else if(i=5) begin code_out=cash_reg6;i=i+1; end else if(i=6) begin code_out=cash_reg7;i=i+1; end else if(i=7) begin code_out=cash_reg8;i=i+1; end else if(i=8) begin code_out=cash_reg9;i=i+1; end else if(i=9) begin code_out=cash_reg10;i=i+1; end else if(i=10) begin code_out=cash_reg11;i=i+1; end else if(i=11) begin code_out=cash_reg12;i=i+1; end else if(i=12) begin code_out=cash_reg13;i=i+1; end else if(i=13) begin code_out=cash_reg14;i=i+1; end else if(i=14) begin code_out=cash_reg15;i=i+1; end else if(i=15) begin code_out=cash_reg16;i=0; end if(cnt2=52) begin cnt2=0;state=2b10; end else cnt2=cnt2+1; end end/子帧的第二组数据的调整输出 2b10:begin if(cnt2=0) begin cnt2=cnt2+1; if(v_flag=0 | v_flag=1 | v_flag=31 | v_flag=2 | v_flag=4 | v_flag=6 | v_flag=8 | v_flag=10 | v_flag=12 | v_flag=14 | v_flag=16 | v_flag=18 | v_flag=20 | v_flag=22 | v_flag=24 | v_flag=26 | v_flag=28 | v_flag=30|v_flag=32) /flag c2:insert info_code; code_out=0; else code_out=1; end else begin if(i=0) begin code_out=cash_reg1;i=i+1; end else if(i=1) begin code_out=cash_reg2;i=i+1; end else if(i=2) begin code_out=cash_reg3;i=i+1; end else if(i=3) begin code_out=cash_reg4;i=i+1; end else if(i=4) begin code_out=cash_reg5;i=i+1; end else if(i=5) begin code_out=cash_reg6;i=i+1; end else if(i=6) begin code_out=cash_reg7;i=i+1; end else if(i=7) begin code_out=cash_reg8;i=i+1; end else if(i=8) begin code_out=cash_reg9;i=i+1; end else if(i=9) begin code_out=cash_reg10;i=i+1; end else if(i=10) begin code_out=cash_reg11;i=i+1; end else if(i=11) begin code_out=cash_reg12;i=i+1; end else if(i=12) begin code_out=cash_reg13;i=i+1; end else if(i=13) begin code_out=cash_reg14;i=i+1; end else if(i=14) begin code_out=cash_reg15;i=i+1; end else if(i=15) begin code_out=cash_reg16;i=0; end if(cnt2=52) begin cnt2=0;state=2b11; end else cnt2=cnt2+1; end end/子帧的第三组数据的调整输出 2b11:begin if(cnt2=0) begin cnt2=cnt2+1; if(v_flag=0 | v_flag=1 | v_flag=31 | v_flag=2|v_flag

温馨提示

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

评论

0/150

提交评论