摘要:本文主要讨论了如何利用fpga可编程芯片实现计算机输出的异步非标码速(如9.6k、19.2k、57.6k、115.2k、460.8k等)到其邻近的标准码速(如64k、128k、256k、512k)的调整,实现该数据与通用传输系统的适配,以便能进行远程监控。
关键词:码速调整 fpga
一、概述
现在,利用计算机进行异地数据采集正应用到越来越多的场合,如何高效而低成本地回传数据成为一个值得讨论的问题。由于计算机输出的数据一般都是异步数据,而且码率与通信的标准码率也不一致,如果要利用现有的电信网络进行传输,就会涉及到码速调整和异同步转换的接口问题,由于码速调整的内型比较多,本文将只讨论如何将较低的异步非标码速调整到比它高的标准码速上。
二、方案设计
在传统的数字电路中,对异步数据的变换处理一般采用通用异步收发器与单片机联合工作的方式。这种方式的优点就是电路结构成熟,软件编程简单,只要掌握一定的单片机语言即可进行开发。但它的缺点也是显而易见的,集成度不高,硬件电路结构复杂,当同时处理多路数据时,软件设计的难度也将加大。现在随着科技的进步,可编程器件的价格已经可以接受,一块一万逻辑门的fpga芯片百元左右就可以买到,而这样一块芯片足可以集成3~4路独立的码速调整电路,所以采用fpga芯片编程实现异步数据的处理将会使外围电路变得非常简洁,同时由于数据绝大部分时间都是在芯片内部运行,也有利于其传输稳定性的提高。另外,fpga芯片大部分都可以重复擦写,只要改动程序设计即可实现不同功能的转换,从而加速同类型产品的开发速度,节约投资。用于开发可编程器件的软件可以到各器件厂家的网站直接下载。
码速调整方案的具体框图见图一,在其数据接收端内置了一个类似异步收发器的结构,采用16倍速高速采样检测异步信号起始电平的到来。为了便于描述,这里我们假设要处理的异步数据为7bit,加上一位起始位和一位停止位,总共为9bit。
三、工作流程描述
我们设计的思路是仿照通用异步收发器的执行过程,但在接收数据时并不去掉起始位和停止位,而是将数据按原来的码速全部接收下来后再以标准的码速发送出去,接收方的电路结构与发送方基本相同,只是少了一个空闲时插入“1”码的电路。
根据异步信号的通信规则,没有信号时数据线应表现为高电平,这时使用一个16倍于数据流的高速时钟对数据线进行采样,当检测到信号下降沿后,表示数据的起始电平有可能已经到来,这时采样器会输出一个reset信号使一个16分频的计数器复位,如果在8个高速脉冲内输入信号又恢复到高电平,则说明刚才是干扰信号,系统又回到起始状态;反之如果信号仍维持低电平,则表示数据起始电平已经到来, 16分频的计数器开始工作,
经16分频后输出一个与输入数据准同步的数据写入时钟write_clk,将数据读入并存放在一个9位寄存器中。
在异步数据的读取过程中,使用一个10位计数器进行计数,在一帧数据读入结束后计数器复位并产生一个标志信号over=‘1’,一方面使16分频计数器停止工作,数据暂停读入,直到下一帧数据的起始电平到来;另一方面将数据转移到发送区,准备数据的发送。
数据发送由ready信号控制,也是通过一个10bit的计数器进行发送计数。发送区在上电后将一直发送“1”码,直至检测到第二帧数据的起始位,这时发送区将发送已经结束完毕的第一帧数据,依次类推。由于码速都是由低向高调整(即慢收快发),故一帧数据发送完毕后,其下一帧数据的读入还没有完成,为了保证数据的连续性和完整性,这时系统将自动插入空码“1” ,这些插入的“1”码在接收端接收时会因码速的差别(即快收慢发)而被自动去掉。
当处理多路数据时,如果大家都采用相同的clock2,则经变换后输出的多路数据将变成同步数据,可以直接进行同步复接。