摘 要:根據CMI碼的特性,介紹了一種新的編程思路實現CMI編碼,在Max+PlusⅡ開發平臺上使用VHDL編程實現CMI編碼,并得到仿真波形。實驗結果表明,這種編程思路簡單、清晰。在產生7位偽隨機序列的前提下,分別對“0”,“1”進行編碼。這種思路為其他碼型設計提供了參考。
關鍵詞:通信原理; VHDL; CMI; Max+PlusⅡ
中圖分類號:TP274 文獻標識碼:A
文章編號:1004-373X(2010)11-0086-02
Design and Implementation of CMI Coding Based on CPLD/FPGA
LI Li
(Department of Telecommunication Engineering, Xi’an Institute of Posts and Telecommunications, Xi’an 710061,China)
Abstract: A new programming idea of which VHDL programming is used to achieve CMI coding on the platform ofMaxplusⅡ is introduced according to the characteristics of CMI code, and the simulation waveforms are achieved. The results indicate that this method is simple and clear. ″0″,″1″are encoded in the premise of generating 7 b pseudorandom sequence. This method provides a reference for other design of code type.
Keywords: communication principle; VHDL; CMI; Max+PlusⅡ
0 引 言
CMI碼是傳號反轉碼的簡稱,它是一種應用于PCM四次群和光纖傳輸系統中的常用線路碼型,具有碼變換設備簡單、有較多的電平躍變,含有豐富的定時信息,便于時鐘提取,有一定的糾錯能力等優點[1]。
在高次脈沖編碼調制終端設備中廣泛應用作接口碼型,在速率低于8 448 Kb/s的光纖數字傳輸系統中也被建議作為線路傳輸碼型。
本文針對光纖通信傳輸碼型的要求和CMI碼的編碼原理,介紹了一種以EPM 系列 7064 芯片為硬件平臺,以Max+PlusⅡ為軟件平臺,以VHDL為開發工具,適合于CPLD實現的CMI編碼器的設計方案。
1 CMI碼的編碼規則
CMI編碼規則如表1所示。
表1 CMI編碼
輸入碼字編碼結果
001
100/11交替表示
在CMI編碼中,輸入碼字0直接輸出01碼型,較為簡單。對于輸入為1的碼字,其輸出CMI碼字存在兩種結果00或11碼,因而對輸入1的狀態必須記憶。同時,編碼后的速率增加一倍[2]。
2 CMI編碼器的建模與實現
首先在原始時鐘MUX_Clk的上升沿進行翻轉得到二分頻時鐘Clk[3],周期為原始時鐘的2倍。
然后產生偽隨機序列,由3個D觸發器產生7位偽隨機序列[4],序列產生原理如圖1所示。
圖1 7位偽隨機碼產生原理圖
任何一個D觸發器的輸出都可以作為要產生的m序列[5],則序列以7為周期循環出現,在3個D觸發器輸出都為0時,語句m_buffer(2)<=(m_buffer(1)xor m_buffer(0))0r( (not m_buffer(2))and(not m_buffer(1)) and(not m_buffer(0))),可以使第一個D觸發器在Clk上升沿到來時輸出為1,從而避免陷入“000”的死循環[6]。
最后為“0”碼、“1”碼的編碼:
“0”編碼的實現:在原始時鐘信號的下降沿對m序列進行檢測,當其值為“0”時,將原始信號的二分頻后的信號求非賦值給編碼輸出[7],即可實現對“0”進行“01”編碼。
“1”編碼的實現:在原始時鐘信號的二分頻信號的上升沿對m序列進行檢測,如果其值為“1”,用表達式state1<=state1 XOR m_buff(0)對“1”的奇偶進行記錄;在原始時鐘的下降沿,將state1的值賦給編碼輸出即可實現對“1”的“00”,“11”交替編碼。
IF(rising_edge(data_clkt))THEN
input_buff<=m_buff(0);--輸入緩存
state1<=state1 XOR m_buff(0);--1的編碼
END IF;
--編碼
IF(falling_edge(MUX_CLK))THEN
IF(input_buff=′0′)THEN
coder_buff<=NOT data_clkt;
ELSIF(input_buff=′1′)THEN
coder_buff<=state1;
END IF;
END IF;
cmi_out<=coder_buff;
MUX_DT<=cmi_out;
m_test<=m_buff(0);
其中:
m_test:產生的m序列;
MUX_DT:CMI 編碼輸出;
MUX_CLK:原始時鐘。
3 仿真結果
在Max+PlusⅡ平臺下對CMI編碼進行編譯和仿真,最后得到CMI編碼仿真結果。圖2是CMI碼編碼波形圖。
圖2 CMI編碼波形圖
在時鐘MUX_CLK驅動下工作,m_test是產生的m序列1011100, MUX_的DT為CMI編碼輸出,可以看到,編碼為11010011000101,有一定延時,但編碼完全正確。
4 結 語
該設計詳細介紹了基于CPLD的CMI編碼的實現方法。提出利用原始信號的二分頻后的信號求非賦值給編碼輸出,得到“0”的編碼,利用緩存對“1”的個數進行記錄[8],而對“1”進行編碼的編程思路,利用VHDL進行程序設計實現,在Max+PlusⅡ平臺下對設計結果進行仿真,結果完全正確。
實踐表明,運用CPLD實現CMI編碼具有軟件開發周期短[9]、成本低、執行速度高、實時性強、升級方便等特點,而且可以把該電路和其他功能電路集成在同一塊CPLD/FPGA中,減少了外接元件的數目,提高了集成度,而且有很大的編程靈活性,很強的移植性,因此有很好的應用前景[10]。
參考文獻
[1]樊昌信,任光亮.通信原理[M].北京:國防工業出版社,2005.
[2]段吉海,黃智偉.基于CPLD/FPGA的數字通信系統建模與設計[M].北京:國防工業出版社,2004.
[3]鮑家元,毛文林.數字邏輯[M].2版.北京:高等教育出版社,2002.
[4]侯伯亨,顧新.VHDL硬件描述語言與數字邏輯電路設計[M].2版.西安:西安電子科技大學出版社,2001.
[5]閔祥國.基于硬件描述語言VHDL電路系統設計研究[J].電腦知識與技術,2007(18):14-16.
[6]苗長新,李桂林.Max+PlusⅡ在“組合電路中競爭與冒險現象”課堂教學上的應用[J].現代電子技術,2009,32(19):128-130.
[7]周灼榮,聶濤,靳小超.基于FPGA的基帶碼發生器設計[J].現代電子技術,2006,29(11):53-55.
[8]林財,陳婷,楊軍.一種基于CPLD編碼器的實現方法[J].實驗科學與技術,2007(6):154-156.
[9]孫華錦.基于VHDL語言的電子設計自動化及其應用[D].西安:西北工業大學,2001.
[10]王英華.VHDL語言在教學與研究中的應用[D].秦皇島:燕山大學,2001.