基于 CPLD 的曼彻斯特编码技术
王 奇,王英民,牛奕龙,陶林伟 时间:2010 年 03 月 15 日
字 体: 大 中 小
关键词:CPLD 曼彻斯特编解码 MAX+PLUS II
摘 要: 研究了曼彻斯特编解码方法,采用 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 个,时钟最高可达 MHz,使用 V 电压供电。
本文的编解码分别在 2 个 CPLD 中完成。编码端的 CPLD 内部程序框图如图 1 所示,
首先锁存并行信号,然后根据编码时钟把并行数据用移位寄存器进行并/串转换,最后曼彻
斯特编码模块对串行 NRZ 数据进行编码输出。
解码端的 CPLD 内部程序框图如图 2 所示,首先曼彻斯特解码模块把输入的曼彻斯特
码解码成 NRZ 码,并从码元中提取同步时钟,然后在移位寄存器中对串行 NRZ 码完成串/
并转换,最后把并行信号锁存到锁存器中并输出。
3 曼彻斯特编解码器设计
在编解码器的设计中,VHDL 设计语言和原理图方式混合使用,提高了软件设计的灵活
性。
编码器设计
(1)同步头
解码时,何时开始一个解码周期是解码正确与否的关键,为此在曼彻斯特码的前面增加
了 4 个时钟周期(此时钟是数据传输速率的 2 倍)的高电平作为同步头。编码时首先输出同步
头,接着输出曼彻斯特码元。解码器检测到此同步头时启动一个解码周期。
本文中采用的曼彻斯特编码的数据帧格式如图 3 所示,第 1~2 位为高电平,作为数据帧
的同步头;第 3~18 位是 16 个经过曼彻斯特编码的数据位。
(2)曼彻斯特编码
根据曼彻斯特码的特点,常规设计方法是将 NRZ 码和时钟信号相异或进行编码,这种
方法的缺点是会在数据的跳变沿产生毛刺。设计中采用如下编码方式:
选用二倍频于数据传输速率的时钟,当时钟个数为奇数时,曼彻斯特码等于 NRZ 码;当
时钟个数为偶数时,曼彻斯特码等于 NRZ 码取反。
这种编码方式简单易行,而且解决了常规通过异或方式编码产生的毛刺现象。
解码器设计
曼彻斯特解码框图如图 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 位时,表明一帧数据解码完成,产生解码完成信号,可用这个信号通知外部处理单元
对解码后的信号进行读取。
软件仿真
(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. .
[5] RODGER E Z 著.数字通信基础[M].尹长川译.北京:机械工业出版社,2005.