摘 要:研究了曼彻斯特编解码方法,采用VHDL语言在CPLD上实现了编解码,使系统的功能高度集成,提高了系统的灵活性与兼容性。通过MAX+PLUS II仿真了2 MB/s速率下的编解码,结果和理论分析一致,验证了编解码电路设计的有效性和可行性。
关键词:CPLD;曼彻斯特编解码;MAX+PLUS II
在工业现场控制网络中,曼彻斯特码由于编码方式简单易行、无直流分量,且含有丰富的时钟信息,常被用作高速基带数据传输。曼彻斯特编码已经广泛应用在数控测井和无线监控等领域。
要实现曼彻斯特编解码,专业的编解码器必不可少,目前曼彻斯特编解码器HD-6408、HD-6409最高速率只有1 MB/s,而且这种器件是对串行信号进行编解码,在电路设计中需要专门的并/串、串/并转换支持,增加了设计成本。
本文主要介绍一种通过CPLD来实现曼彻斯特编解码的方法,在CPLD内部完成并/串、串/并转换以及曼彻斯特编解码,提高了编解码的通用性,大大节省了开发成本,并且可以实现更高的编码速率。
1 曼彻斯特码
在曼彻斯特编码[1-2]中,每一位的中间有一个跳变,位中间的跳变既作时钟信号,又作数据信号。从高到低跳变表示“0”,从低到高跳变表示“1”。
从曼彻斯特码的特点可以看出曼彻斯特码是一种自同步码,且没有直流分量,因此抗干扰能力强。但其缺点是编码后每一个码元都被调成2个电平,所以数据传输速率只有调制速率的1/2。
2 可编程逻辑器件的选择
系统中CPLD器件选择Altera公司的MAX7000系列[3]的EPM7128AETC100-10。EPM7128AE系列CPLD具有2 500个可用门,内部具有128个宏单元,最多可用I/O引脚100个,时钟最高可达192.3 MHz,使用3.3 V电压供电。
本文的编解码分别在2个CPLD中完成。编码端的CPLD内部程序框图如图1所示,首先锁存并行信号,然后根据编码时钟把并行数据用移位寄存器进行并/串转换,最后曼彻斯特编码模块对串行NRZ数据进行编码输出。
解码端的CPLD内部程序框图如图2所示,首先曼彻斯特解码模块把输入的曼彻斯特码解码成NRZ码,并从码元中提取同步时钟,然后在移位寄存器中对串行NRZ码完成串/并转换,最后把并行信号锁存到锁存器中并输出。
3 曼彻斯特编解码器设计
在编解码器的设计中,VHDL设计语言和原理图方式混合使用,提高了软件设计的灵活性。
3.1 编码器设计
(1)同步头
解码时,何时开始一个解码周期是解码正确与否的关键,为此在曼彻斯特码的前面增加了4个时钟周期(此时钟是数据传输速率的2倍)的高电平作为同步头。编码时首先输出同步头,接着输出曼彻斯特码元。解码器检测到此同步头时启动一个解码周期。
本文中采用的曼彻斯特编码的数据帧格式如图3所示,第1~2位为高电平,作为数据帧的同步头;第3~18位是16个经过曼彻斯特编码的数据位。
(2)曼彻斯特编码
根据曼彻斯特码的特点,常规设计方法是将NRZ码和时钟信号相异或进行编码,这种方法的缺点是会在数据的跳变沿产生毛刺。设计中采用如下编码方式:
选用二倍频于数据传输速率的时钟,当时钟个数为奇数时,曼彻斯特码等于NRZ码;当时钟个数为偶数时,曼彻斯特码等于NRZ码取反。
这种编码方式简单易行,而且解决了常规通过异或方式编码产生的毛刺现象。
3.2 解码器设计
曼彻斯特解码框图如图4所示,主要分为4个部分:同步头检测电路、同步时钟提取器、解码的判决器和计数器。
其中同步头检测电路和判决器采用VHDL语言设计,同步时钟提取器和计数器使用原理图方式设计。下面分别介绍这4部分:
(1)同步头检测电路
同步头检测电路有2个功能:检测同步头和去掉同步头。这部分电路不断对接收到的数据进行检测,当检测到同步头后,向其他3部分发送使能信号,控制这3个部分开始工作,并且同步头检测电路还将去掉同步头后的标准曼彻斯特码发送给判决器,由判决器对接收到的曼彻斯特码解码。
(2)同步时钟提取器[4]
曼彻斯特码的一个优点是本身含有时钟信息,可以很方便地进行位同步。时钟提取器就是要从曼彻斯特码中提取出同步时钟。从曼彻斯特码的特点可以看出每个码元中间都有一次跳变,时钟提取电路提取出跳变信息,以此来恢复出位同步时钟。
同步时钟提取电路如图5所示,DataIn是输入的曼彻斯特码;CLK16x是解码用的高倍时钟;DataIn2是曼彻斯特码经过2次时延后的信号,此信号与经过1次时延的信号异或运算得到曼彻斯特码的跳变信息;CLR是从曼彻斯特码中提取出的跳变信息,把这个跳变信息作为计数器的清零信号,同时利用高倍时钟就可以从输入的曼彻斯特码中恢复出同步时钟,图5中CLKOUT是同步时钟的输出端,可用于电路的其他部分。
(3)判决器
判决器是曼彻斯特解码的核心部分,采用16倍频于传输速率的时钟作为解码时钟。解码流程图如图6所示。在接收到曼彻斯特码后使用16倍频的时钟对信号进行采样,为了正确解码出一位NRZ码,需要进行16次采样,即一个解码周期等于16个时钟周期。
解码时设置了2个计数器:tHigh和tClock。tHigh用于记录每16次采样时前8次采样的高电平的个数。如果tHigh等于8,那么原始码元就是“1”,反之为“0”。在每次采样时tClock都会加1,记录采样的次数。当tClock等于16时,一个解码周期完成,将tHigh和tClock清零。
在实际设计中,为了提高对解码的抗干扰能力,将tHigh的判决门限设定为8-2,即6,当tHigh≥6就认为原始信号是“1”,反之为“0”。
(4)计数器
计数器的时钟是从曼彻斯特码恢复出的同步时钟,主要用来记录解码的位数,当解码完16位时,表明一帧数据解码完成,产生解码完成信号,可用这个信号通知外部处理单元对解码后的信号进行读取。
3.3 软件仿真
(1)编码仿真[5]
本文使用VHDL语言进行设计,使用MAX+PLUS II进行仿真,仿真的数据编码速率设为2 MB/s,仿真图形如图7所示。其中D[0..5]是发送端的并行信号;DSP_CLK是由外部提供的40 MHz的时钟信号,在CPLD中进行10分频,产生需要的4 MHz的二倍频时钟信号;MAN_OUT是最终的曼彻斯特码。从图7可以看出,曼彻斯特码的最前面有4个时钟周期的高电平,是编码信号的同步头。
从图7中还可以看出,输入的并行信号是0xA756,由于程序中使数据的最低位在前,最高位在后,因此进行并串转换后的NRZ码是0110,1010,1110,0101,对应的曼彻斯特码为01 10 10 01,10 01 10 01,10 10 10 01,01 10 01 10(如图7中MAN_OUT所示)。
(2)解码仿真
仿真时所用的解码时钟是16 MHz,仿真图如图8所示。其中,DataIn是输入的曼彻斯特码,速率是原始数据速率的2倍,即4 MB/s;DataIn2是由输入信号延迟一个时钟周期产生的;CLK16x是外部提供的16 MHz高倍时钟信号;CLR是从曼彻斯特码提取的跳变信息;CLKOUT是恢复出的时钟信号;enable是同步头检测电路产生的使能信号;NRZ是判决器输出的NRZ码;q[0..15]是解码出的数据,从图8中可以看出其值为0xA756,正确解码了输入的曼彻斯特码。
本文使用VHDL语言在Altera公司的EMP7128AETC100-10实现了曼彻斯特编解码,在MAX+PLUS II下正确实现了2 MHz时钟下的编解码。比专用器件具有更高的速率和更好的灵活性。大大增加了曼彻斯特编解码的可移植性,并且为编解码器的扩展预留了足够的空间。
参考文献
[1] 杨刚,龙海燕.现代电子技术-VHDL与数字电路系统设计[M].北京:电子工业出版社,2004.
[2] VOLNEI A P著,VHDL数字电路设计教程[M]. 乔庐峰, 王志功译.北京:电子工业出版社,2005.
[3] ALTERA. MAX7000A programmable logic device family data sheet. 2003.
[4] INTERSIL. HD-6408 Data Sheet. www.intersil.com.2006.
[5] RODGER E Z著.数字通信基础[M].尹长川译.北京:机械工业出版社,2005.