基于CPLD的曼徹斯特編碼技術(shù)
摘 要: 研究了曼徹斯特編解碼方法,采用VHDL語言在CPLD上實(shí)現(xiàn)了編解碼,使系統(tǒng)的功能高度集成,提高了系統(tǒng)的靈活性與兼容性。通過MAX+PLUS II仿真了2 MB/s速率下的編解碼,結(jié)果和理論分析一致,驗(yàn)證了編解碼電路設(shè)計(jì)的有效性和可行性。
關(guān)鍵詞:CPLD;曼徹斯特編解碼;MAX+PLUS II
在工業(yè)現(xiàn)場控制網(wǎng)絡(luò)中,曼徹斯特碼由于編碼方式簡單易行、無直流分量,且含有豐富的時(shí)鐘信息,常被用作高速基帶數(shù)據(jù)傳輸。曼徹斯特編碼已經(jīng)廣泛應(yīng)用在數(shù)控測井和無線監(jiān)控等領(lǐng)域。
要實(shí)現(xiàn)曼徹斯特編解碼,專業(yè)的編解碼器必不可少,目前曼徹斯特編解碼器HD-6408、HD-6409最高速率只有1 MB/s,而且這種器件是對串行信號進(jìn)行編解碼,在電路設(shè)計(jì)中需要專門的并/串、串/并轉(zhuǎn)換支持,增加了設(shè)計(jì)成本。
本文主要介紹一種通過CPLD來實(shí)現(xiàn)曼徹斯特編解碼的方法,在CPLD內(nèi)部完成并/串、串/并轉(zhuǎn)換以及曼徹斯特編解碼,提高了編解碼的通用性,大大節(jié)省了開發(fā)成本,并且可以實(shí)現(xiàn)更高的編碼速率。
1 曼徹斯特碼
在曼徹斯特編碼[1-2]中,每一位的中間有一個(gè)跳變,位中間的跳變既作時(shí)鐘信號,又作數(shù)據(jù)信號。從高到低跳變表示“0”,從低到高跳變表示“1”。
從曼徹斯特碼的特點(diǎn)可以看出曼徹斯特碼是一種自同步碼,且沒有直流分量,因此抗干擾能力強(qiáng)。但其缺點(diǎn)是編碼后每一個(gè)碼元都被調(diào)成2個(gè)電平,所以數(shù)據(jù)傳輸速率只有調(diào)制速率的1/2。
2 可編程邏輯器件的選擇
系統(tǒng)中CPLD器件選擇Altera公司的MAX7000系列[3]的EPM7128AETC100-10。EPM7128AE系列CPLD具有2 500個(gè)可用門,內(nèi)部具有128個(gè)宏單元,最多可用I/O引腳100個(gè),時(shí)鐘最高可達(dá)192.3 MHz,使用3.3 V電壓供電。
本文的編解碼分別在2個(gè)CPLD中完成。編碼端的CPLD內(nèi)部程序框圖如圖1所示,首先鎖存并行信號,然后根據(jù)編碼時(shí)鐘把并行數(shù)據(jù)用移位寄存器進(jìn)行并/串轉(zhuǎn)換,最后曼徹斯特編碼模塊對串行NRZ數(shù)據(jù)進(jìn)行編碼輸出。
解碼端的CPLD內(nèi)部程序框圖如圖2所示,首先曼徹斯特解碼模塊把輸入的曼徹斯特碼解碼成NRZ碼,并從碼元中提取同步時(shí)鐘,然后在移位寄存器中對串行NRZ碼完成串/并轉(zhuǎn)換,最后把并行信號鎖存到鎖存器中并輸出。
3 曼徹斯特編解碼器設(shè)計(jì)
在編解碼器的設(shè)計(jì)中,VHDL設(shè)計(jì)語言和原理圖方式混合使用,提高了軟件設(shè)計(jì)的靈活性。
3.1 編碼器設(shè)計(jì)
(1)同步頭
解碼時(shí),何時(shí)開始一個(gè)解碼周期是解碼正確與否的關(guān)鍵,為此在曼徹斯特碼的前面增加了4個(gè)時(shí)鐘周期(此時(shí)鐘是數(shù)據(jù)傳輸速率的2倍)的高電平作為同步頭。編碼時(shí)首先輸出同步頭,接著輸出曼徹斯特碼元。解碼器檢測到此同步頭時(shí)啟動一個(gè)解碼周期。
本文中采用的曼徹斯特編碼的數(shù)據(jù)幀格式如圖3所示,第1~2位為高電平,作為數(shù)據(jù)幀的同步頭;第3~18位是16個(gè)經(jīng)過曼徹斯特編碼的數(shù)據(jù)位。
(2)曼徹斯特編碼
根據(jù)曼徹斯特碼的特點(diǎn),常規(guī)設(shè)計(jì)方法是將NRZ碼和時(shí)鐘信號相異或進(jìn)行編碼,這種方法的缺點(diǎn)是會在數(shù)據(jù)的跳變沿產(chǎn)生毛刺。設(shè)計(jì)中采用如下編碼方式:
選用二倍頻于數(shù)據(jù)傳輸速率的時(shí)鐘,當(dāng)時(shí)鐘個(gè)數(shù)為奇數(shù)時(shí),曼徹斯特碼等于NRZ碼;當(dāng)時(shí)鐘個(gè)數(shù)為偶數(shù)時(shí),曼徹斯特碼等于NRZ碼取反。
這種編碼方式簡單易行,而且解決了常規(guī)通過異或方式編碼產(chǎn)生的毛刺現(xiàn)象。
3.2 解碼器設(shè)計(jì)
曼徹斯特解碼框圖如圖4所示,主要分為4個(gè)部分:同步頭檢測電路、同步時(shí)鐘提取器、解碼的判決器和計(jì)數(shù)器。
其中同步頭檢測電路和判決器采用VHDL語言設(shè)計(jì),同步時(shí)鐘提取器和計(jì)數(shù)器使用原理圖方式設(shè)計(jì)。下面分別介紹這4部分:
(1)同步頭檢測電路
同步頭檢測電路有2個(gè)功能:檢測同步頭和去掉同步頭。這部分電路不斷對接收到的數(shù)據(jù)進(jìn)行檢測,當(dāng)檢測到同步頭后,向其他3部分發(fā)送使能信號,控制這3個(gè)部分開始工作,并且同步頭檢測電路還將去掉同步頭后的標(biāo)準(zhǔn)曼徹斯特碼發(fā)送給判決器,由判決器對接收到的曼徹斯特碼解碼。
(2)同步時(shí)鐘提取器[4]
曼徹斯特碼的一個(gè)優(yōu)點(diǎn)是本身含有時(shí)鐘信息,可以很方便地進(jìn)行位同步。時(shí)鐘提取器就是要從曼徹斯特碼中提取出同步時(shí)鐘。從曼徹斯特碼的特點(diǎn)可以看出每個(gè)碼元中間都有一次跳變,時(shí)鐘提取電路提取出跳變信息,以此來恢復(fù)出位同步時(shí)鐘。
同步時(shí)鐘提取電路如圖5所示,DataIn是輸入的曼徹斯特碼;CLK16x是解碼用的高倍時(shí)鐘;DataIn2是曼徹斯特碼經(jīng)過2次時(shí)延后的信號,此信號與經(jīng)過1次時(shí)延的信號異或運(yùn)算得到曼徹斯特碼的跳變信息;CLR是從曼徹斯特碼中提取出的跳變信息,把這個(gè)跳變信息作為計(jì)數(shù)器的清零信號,同時(shí)利用高倍時(shí)鐘就可以從輸入的曼徹斯特碼中恢復(fù)出同步時(shí)鐘,圖5中CLKOUT是同步時(shí)鐘的輸出端,可用于電路的其他部分。
(3)判決器
判決器是曼徹斯特解碼的核心部分,采用16倍頻于傳輸速率的時(shí)鐘作為解碼時(shí)鐘。解碼流程圖如圖6所示。在接收到曼徹斯特碼后使用16倍頻的時(shí)鐘對信號進(jìn)行采樣,為了正確解碼出一位NRZ碼,需要進(jìn)行16次采樣,即一個(gè)解碼周期等于16個(gè)時(shí)鐘周期。
解碼時(shí)設(shè)置了2個(gè)計(jì)數(shù)器:tHigh和tClock。tHigh用于記錄每16次采樣時(shí)前8次采樣的高電平的個(gè)數(shù)。如果tHigh等于8,那么原始碼元就是“1”,反之為“0”。在每次采樣時(shí)tClock都會加1,記錄采樣的次數(shù)。當(dāng)tClock等于16時(shí),一個(gè)解碼周期完成,將tHigh和tClock清零。
在實(shí)際設(shè)計(jì)中,為了提高對解碼的抗干擾能力,將tHigh的判決門限設(shè)定為8-2,即6,當(dāng)tHigh≥6就認(rèn)為原始信號是“1”,反之為“0”。
(4)計(jì)數(shù)器
計(jì)數(shù)器的時(shí)鐘是從曼徹斯特碼恢復(fù)出的同步時(shí)鐘,主要用來記錄解碼的位數(shù),當(dāng)解碼完16位時(shí),表明一幀數(shù)據(jù)解碼完成,產(chǎn)生解碼完成信號,可用這個(gè)信號通知外部處理單元對解碼后的信號進(jìn)行讀取。
3.3 軟件仿真
(1)編碼仿真[5]
本文使用VHDL語言進(jìn)行設(shè)計(jì),使用MAX+PLUS II進(jìn)行仿真,仿真的數(shù)據(jù)編碼速率設(shè)為2 MB/s,仿真圖形如圖7所示。其中D[0..5]是發(fā)送端的并行信號;DSP_CLK是由外部提供的40 MHz的時(shí)鐘信號,在CPLD中進(jìn)行10分頻,產(chǎn)生需要的4 MHz的二倍頻時(shí)鐘信號;MAN_OUT是最終的曼徹斯特碼。從圖7可以看出,曼徹斯特碼的最前面有4個(gè)時(shí)鐘周期的高電平,是編碼信號的同步頭。
從圖7中還可以看出,輸入的并行信號是0xA756,由于程序中使數(shù)據(jù)的最低位在前,最高位在后,因此進(jìn)行并串轉(zhuǎn)換后的NRZ碼是0110,1010,1110,0101,對應(yīng)的曼徹斯特碼為01 10 10 01,10 01 10 01,10 10 10 01,01 10 01 10(如圖7中MAN_OUT所示)。
(2)解碼仿真
仿真時(shí)所用的解碼時(shí)鐘是16 MHz,仿真圖如圖8所示。其中,DataIn是輸入的曼徹斯特碼,速率是原始數(shù)據(jù)速率的2倍,即4 MB/s;DataIn2是由輸入信號延遲一個(gè)時(shí)鐘周期產(chǎn)生的;CLK16x是外部提供的16 MHz高倍時(shí)鐘信號;CLR是從曼徹斯特碼提取的跳變信息;CLKOUT是恢復(fù)出的時(shí)鐘信號;enable是同步頭檢測電路產(chǎn)生的使能信號;NRZ是判決器輸出的NRZ碼;q[0..15]是解碼出的數(shù)據(jù),從圖8中可以看出其值為0xA756,正確解碼了輸入的曼徹斯特碼。
本文使用VHDL語言在Altera公司的EMP7128AETC100-10實(shí)現(xiàn)了曼徹斯特編解碼,在MAX+PLUS II下正確實(shí)現(xiàn)了2 MHz時(shí)鐘下的編解碼。比專用器件具有更高的速率和更好的靈活性。大大增加了曼徹斯特編解碼的可移植性,并且為編解碼器的擴(kuò)展預(yù)留了足夠的空間。
參考文獻(xiàn)
[1] 楊剛,龍海燕.現(xiàn)代電子技術(shù)-VHDL與數(shù)字電路系統(tǒng)設(shè)計(jì)[M].北京:電子工業(yè)出版社,2004.
[2] VOLNEI A P著,VHDL數(shù)字電路設(shè)計(jì)教程[M]. 喬廬峰, 王志功譯.北京:電子工業(yè)出版社,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著.?dāng)?shù)字通信基礎(chǔ)[M].尹長川譯.北京:機(jī)械工業(yè)出版社,2005.