1.引言
随着现代通信向着多业务方向发展,为了节省信道资源、降低调制解调设备的复杂度,数据复接设备得到了更充分的利用。它能将多路不同类型的数据流复接成一路高速数据流,通过信道传输,在收端分接出发端对应的数据流,以实现多业务双向通信。
这里利用了XILINX公司的VIRTEX-ⅡPRO系列FPGA实现了数据复接、数据分接及帧同步过程。之所以选用FPGA完成设计功能,是由于数据复接、分接涉及大量的时序过程,FPGA综合工具应用了广泛的时序调整与流水处理技术以改善时序电路性能。巧妙地应用流水处理技术,可以实现输入输出端口之间寄存器的移动和均衡实现逻辑的分隔,并且不会对原有设计引入额外的处理等待延迟,可以实现高性能设计的高效率综合,确保最优的时序性能。该设备输入端是8路话音,16路数据,其中8路并行输入的话音均分为V1、V2,16路并行输入的异步数据均分为d1、d2,设备完成将并行输入复接为一路高速数据流(复接后的帧格式见图3)经过信道传送后再由分接模块分解出各个支路。设计流程图见图1所示。
本文结构安排如下:首先,介绍引言部分;其次,对数据复接分接、帧头同步捕获以及由DDS进行时钟分频做了详细的设计分析,并给出了相应的设计流程图和原理图;再次,分析仿真结果,从结论对设计过程进行验证;最后,总结全文。
2.数据复接方法与实现
数字复接的方法主要有按位复接、按字复接和按帧复接三种。按位复接又叫比特复接,即复接时每支路依次复接一个比特。按位复接方法简单易行,设备也简单,存储器容量小,目前被广泛采用,其缺点是对信号交换不利。按字复接,一个码字有8位码,它是将8位码先储存起来,在规定时间对各个支路轮流复接,这种方法比较复杂,具体原因后续分析。还有一种是按帧复接,这种方法的存储容量要求太大,而且不适用于同步与异步复接情况。这里选用按字复接,原因是经过ADPCM编码后进入的话音数据为4bit并入(共2路),这里将一组V1,V2看为8bit(1个字),数据异步接收后出来的数据,每组也为8bit。
在设计数据复接与分接设备过程中,主要有用DDS生成所需时钟、帧结构定义、码速调整、控制模块设计、帧同步头捕获设计几大难点,现分别做一说明:
1) DDS生成时钟:本设计的晶振为30MHz,由总体考虑所需的话音时钟为8kHz,异步数据为117kHz。所以可以先由30MHz时钟源由DDS得到4.096MHz的时钟,再由4.096MHz这个时钟进行512分频得到8kHz时钟,由4.096MHz时钟进行35分频得到117kHz时钟,具体原理图见图2。对于DDS控制字的求解针对此设计可由以下公式得到32位码字:(见书P50)
其中gen_constant为生成控制字的模块,clk_512和clk_35为分频模块。
2) 帧结构定义:对于输入话音V1和V2其写入时钟为8kHz的同步时钟,数据d1和d2其写入时钟为117kHz的异步时钟。帧同步头选用2个255bit的m序列后补一个0作为256bit同步头,并存放在ROM中。他们经过复接后得到117kHz的高速数据流,送入信道,接收端通过同步头捕获模块进行帧同步,捕获后由数据分接模块进行分路,得到发端对应的8路话音,16路数据。由于本设计输入端还需要插入数据指示、话音信令等码元(以供区分业务类别),在此,我分析了复接端多路输入时钟与合路后读取时钟的关系,同时综合考虑同步话音的解复接后的连续性以及异步数据的重要性等问题,定义如图2的帧格式。
这里需要强调的是异步数据在帧格式里的定义,数据是突发性质的异步数据,虽然数据的传输速率很高为117kbps,但是其平均速率很低,经过实际分析其平均速率约0.6K×8bps,而且该数据作为控制指令所以在帧格式设计时要特别注意,此处定义帧格式时对数据每字重复传送3次以提高可靠性。
3) 码速调整:码速调整部分主要是缓冲存储器,还包括一些必要的控制电路,这里缓冲器选用Asynchronous FIFO。在很多设计中,是通过扣除一个读取脉冲的方法来防止缓存器的信息被取空,这样做的问题是需要判断写入写出时钟的相位关系,并且输出同类型数据将存在不连续性。在设计中通过利用帧定义格式以及设计一个读时钟控制模块来避免缓冲读空问题,保证了各类数据的连续性。缓冲的深度与输入有很大关系。现计算FIFO要求具备的最低深度(其宽度话音为4bit,数据为8bit):
首先对FIFO的工作过程做一个简要说明,Asynchronous FIFO是一个先入先出存储器,并具有支持读写时钟不同步的功能,在输出口有empty指示(empty=1,表示下一时钟所读的数据为无效数据,反之为有效)。这里在控制模块中要求在最后一位即第211个bit处对设备中所有FIFO复位,目的是防止缓冲存储器被取空。
输入端单路话音是以8×4(Kbit)传送,成帧后每个数据包512(bit)中包含单路话音40×4(bit),数据包以117kbps传送,则话音写入FIFO的速率与读取FIFO的速率可以表示为(1)、(2)两式所示。
V话音=8×4(kbps) (2)
Vread=[40/(512/117)]×4=9.14×4(kbps) (3)
ΔV=1.14×4(kbps) (4)
设缓冲区深度为X,则在7个数据包完成时间内由速率差完成的深度为:
ΔX=1.14×7×512/117=34.92 (5)
这个即话音FIFO的最小深度,这里选择深度为64,宽度为4bit的Asynchronous FIFO。
对于异步数据在每个数据包512bit中留出了8×3×3bit空间,由于数据量很小,且考虑到每帧开始会对设备所有FIFO复位一次,在此不需要考虑写入读出的时钟问题,FIFO的深度只要大于7×3就可以。对于加强数据可靠性,重传3次的问题在FIFO中不加考虑,由控制模块完成。最后定义数据FIFO深度32,宽度8bit的Asynchronous FIFO。
4) 控制模块的设计:这部分设计关键是对时钟的控制以及时隙的安排,这个也是整个复接设备设计的主要难点,同步报头的插入使能信号、帧格式的定义都有控制模块中一个12位计数器来统一控制。对于异步数据每个字节重复3次传送这个过程的设计,这里主要引入模块设计,它通过前后时隙空余期间,利用时钟上升沿与下降沿一起促发,将FIFO的输出扩展为1个与FIFO输出同相的信号并存入本地RAM,这样解决了FIFO的先入先出的工作特点(同个数据无法返回再读)。对于分接模块,难点同样也是在异步数据部分,由于在帧格式中预定了数据重复3次发送,所以在分解模块中采取的是3中取2的方法,对异步数据进行判决。
5) 帧头同步捕获模块的设计:由于m序列具有很强的自相关性,利用255的m序列末尾加1个0作为同步头。当输入序列匹配与本地码相匹配时将出现相关峰值(输入序列存放在移位寄存器中),当不匹配时相关值很小。这里用2个上述码字,分别作为帧同步头和保密机同步头,其相关捕获过程的MATLAB仿真图如图3所示。这里在256和512处出现了相关峰值,即在这2点处本地码与寄存器中数据匹配相关。相关检测技术在很多文献都有介绍,这里采取的也是通用的方法,只是在具体实现时,根据256bit来设计了一个移位寄存方法,采取2个4×64bit的移位寄存器作为输入序列的存放地点,分别用于帧同步头和保密机同步头捕获时输入序列与本地码元的自相关。由于在设计中需要捕获成功的使能信号提前一个时钟周期,因此本文的解决方法是将本地码沿着输入序列的反方向循环移动1bit,这样可以在序列进入255bit时得到相关峰,以提前1个时钟周期给出捕获成功的使能信号。
由于信道中存在干扰,在控制模块中不可以用m序列的自相关大小作为捕获判断基准值,这里设置的捕获环路的基准值,它是通过相关峰值加上一定的偏移值而定的,这样可使得同步的误判率减小。用户还可以通过设定软基准值,即通过信噪比来自适应决定偏移值,这样可以更加可靠的达到同步状态。
3.仿真结果分析
通过在ISE软件中编写UCF文件,把程序下载到xc2vp20-fg676中测试通过,已经作为总体设计的一部分投入使用,并使用正常。在此,对整个设计用Modesim进行仿真一下,并给出结果:当话音输入为图5所示,从0000到0110,写入FIFO时钟如图v_in_buff_w为8kHz,则输出见图6所示,当时钟下降沿促发得empty为0后,下一时钟下降沿所抽取的数据为开始的有效值。
需要说明的是话音是同步的,必须保证话音输出要连续,确保这个连续性跟定义的帧格式大小以及信道传送的速据速率等因数有关。
对于异步数据部分需要不断的对empty信号进行判断,以确定下个时钟下降沿抽取的数据是否有效,根据FIFO工作特点输出指示empty为0后,下一个时钟下降沿取得的数据有效,输入数据见图7,相应的输出结果见图8。
4.总结
数据复接在多业务通行中应用广泛,它能将多路不同类型的数据流复接成一路高速数据流,通过信道传输,在收端分接出发端对应的数据流,以实现多业务双向通信。数据复接设备的设计方法多样,这里所做的设计方法具有一定的通用性与实用性,给出了同步、异步合路的解决方案,并且介绍了利用DDS进行产生所需时钟的方法。在设计帧结构以及FIFO深度方面,本文也做了较详细的推理。由于在设计数据复接、分解过程中,大量涉及进程概念,时序性很强,所以选用FPGA去完成软过程,这相比其他器件可以进行更有效的时序调整与流水处理技术,进而改善时序电路性能。