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