摘要: 介紹用FPGA設(shè)計實現(xiàn)MIL-STD1553B部接口中的曼徹斯特碼編解碼器。該設(shè)計采用VHDL硬件描述語言編程,并且專門的綜合工具Synplify對設(shè)計進行綜合、優(yōu)化,在MAX+PLUS II進行時序仿真,最后在FPGA上實現(xiàn)。
關(guān)鍵詞: 曼徹斯特碼 1553B總線 VHDL FPGA
引言
曼徹斯特碼編碼、解碼器是1553B總線接口中不可缺少的重要組成部分。曼徹斯特碼編解碼器設(shè)計的好壞直接影響總線接口的性能。本文介紹的是MIL-STD-1553B接口中最曼徹斯特碼的編碼和解碼器的設(shè)計實現(xiàn)。
在電子設(shè)計領(lǐng)域,可編程器件的廣泛應用為數(shù)字系統(tǒng)的設(shè)計帶來極大的靈活性,1片F(xiàn)PGA/CPLD芯片可替代上百個IC電路。同時,Altera公司開發(fā)的MAX+PLUS II和QUARTUS II軟件,是完全集成化的可編程邏輯設(shè)計環(huán)境;Synplicity公司的Synplify是專門用于FPGA和CPLD的一種優(yōu)秀邏輯綜合工具;VHDL更是一種功能強大的硬件設(shè)計語言,可用簡潔的代碼描述來進行復雜控制邏輯的設(shè)計。所這些使得硬件的設(shè)計如同軟件那樣方便,極大方便了數(shù)字電路的設(shè)計。所有這些條件都為在實驗室開發(fā)實現(xiàn)MIL-STD-1553B協(xié)議接口提供了有利條件。文中所設(shè)計的編碼、解碼器就是采用硬件描述語言VHDL進行編程,用Synplify進行綜合,以及采用MAX+PLUS II進行時序仿真,在FPGA上實現(xiàn)的MIL-STD-1553B總線接口中的曼徹斯特碼編碼、解碼器。
圖1
1 1553B總線及其接口功能
MIL-STD-1553B的全稱是:飛機內(nèi)部時分制指令/響應式多路傳輸數(shù)據(jù)總線。它用可屏蔽雙絞線進行數(shù)據(jù)傳輸,信號是以串行數(shù)字脈沖的形式進行傳輸,其數(shù)據(jù)代碼用雙相曼徹特碼的形式來表示,其傳輸速率為1Mb/s。1553B數(shù)據(jù)總線上連接有三種類型的系統(tǒng):①總線控制器(BC)——控制總線上的數(shù)據(jù)傳輸;②遠程終端控制器(RT)——響應BC來的命令,執(zhí)行數(shù)據(jù)傳輸;③總線監(jiān)視器(BM)——有選擇地接收數(shù)據(jù)總線上的信息并保存之。每個子系統(tǒng)可以通過1553B總線連接到任何一個子系統(tǒng)。數(shù)據(jù)就是在總線上進行傳輸?shù)摹?br />
圖2
在總線上傳輸?shù)挠腥N類型的字:命令字、狀態(tài)字和數(shù)據(jù)字。每種字的字長為20位,有效信息位是16位每個字的前三位為同步字頭,最后一位為奇校驗位。有效信息(16位)及奇偶校驗位在總線上以曼徹斯特碼的形式進行傳輸,每位占的時間為1μs。同步字頭占三位,或先正后負(命令字、狀態(tài)字)或先負后正(數(shù)據(jù)字)。正/負電平各占1.5μs,即占同位場的一半。由于系統(tǒng)的類型不同,可辨別出命令字和狀態(tài)字,命令字由現(xiàn)行的總線控制器發(fā)出,而狀態(tài)字總是由遠程終端RT發(fā)出。
作為MIL-STD-1553B總線的接口應完成以下功能:①將總線上的串行信息流轉(zhuǎn)換成處理機可以處理的并行信息或者與之相反;②接收或發(fā)送信息時,能夠識別或生成標準的1553B信息字和消息;③完成與處理機之間的信息交換,包括1553B信息地址的分配,命令字(或狀態(tài)字)的譯碼或返回狀態(tài)字、發(fā)送數(shù)據(jù)字等。曼徹斯特碼編解碼器完成的是曼徹斯特碼的編碼及解碼,并檢測錯誤。它接收具有有效同步字的曼徹斯特碼,并進行譯碼,
以及識別其類型和串/并轉(zhuǎn)換、奇偶校驗等;或者將處理器發(fā)出的并行二進制數(shù)據(jù)進行曼徹斯特碼編碼,再加上同步字頭及奇偶位使之成為符合1553B標準的字進行輸出。
編解碼器是總線接口的一部分。一般說來,1553B總線接口由電平轉(zhuǎn)換電路、曼徹斯特碼編解碼器、命令字/狀態(tài)字譯碼邏輯和CPU及相關(guān)電路組成,如圖1所示。
除了編解碼器可由FPGA來實現(xiàn)外,它與CPU之間的相關(guān)電路,如共享RAM、命令字/狀態(tài)字譯碼和存儲器管理、處理器與存儲器接口邏輯等也可以由FPGA來實現(xiàn);CPU可采用TMS320LF2407。本文所介紹的就是其中的編碼和解碼器的設(shè)計。
2 曼徹斯特碼編解碼器的總體設(shè)計
在介紹編解碼器的設(shè)計之前,有必要了解曼徹斯特碼的特征,以便在設(shè)計中對其加以利用,達到簡化電路的效果。
曼徹斯特碼是一種廣泛應用于航空電子綜合系統(tǒng)中的總線數(shù)據(jù)傳輸?shù)碾p極性碼。它在每個碼位中點存在一個跳變。1信號是一個由1到0的負跳沿,而0信號是由0到1的正跳沿。它本身包含了自定時的信息。因此它不需要獨立的信道來傳輸位定信息,它可以直接從數(shù)據(jù)中分離出定時時鐘,同時還能與變壓器耦合相協(xié)調(diào),十分適合用在變壓器耦合形式,長度為150m(500英尺)左右的場合,因此在航空電子綜合系統(tǒng)中,它是最主要的形式。
在MIL-STD-1553B協(xié)議中其數(shù)據(jù)格式為如圖2所示。
根據(jù)1553B的數(shù)據(jù)格式以及曼徹斯特碼的特點,可采用狀態(tài)機對其進行編碼、解碼的實現(xiàn)。狀態(tài)機是一個廣義的時序電路,像移位寄存器、計數(shù)器等都算是它的特殊功能類型中的一種。根據(jù)輸入、輸出及狀態(tài)之間的關(guān)系,狀態(tài)機可分為兩類:一種是輸出狀態(tài)有關(guān),而輸入與狀態(tài)無在的狀態(tài)機類型,稱為More狀態(tài)機;另一種是輸出及輸入與狀態(tài)皆有關(guān)系的狀態(tài)機,稱為Mealy狀態(tài)機。本設(shè)計采用的是Mealy狀態(tài)機。編碼和解碼是兩個相互獨立的模塊。
2.1 解碼
解碼的過程可分為三部分:①同步字頭檢測,并辨別其為數(shù)據(jù)字還是命令字。②對曼碼形式的數(shù)據(jù)進行解碼。由于曼徹斯特碼自帶定時時鐘,故可從數(shù)據(jù)中分離出同步時鐘。本設(shè)計采用的是傳統(tǒng)的用數(shù)字鎖相環(huán)的方法來分離時鐘;將時鐘和數(shù)據(jù)進行處理使曼碼數(shù)據(jù)轉(zhuǎn)化為非歸零二進制數(shù)據(jù)。③將串行數(shù)據(jù)轉(zhuǎn)化為并行數(shù)據(jù),并進行奇偶校驗。解碼器的邏輯圖如圖3所示。圖中data為串行輸入數(shù)據(jù)。當data開始發(fā)生跳變時進行同步頭檢測,若在data發(fā)生變化后檢測到大于一個位時的高(或低)電平,則認為同步頭有效,輸出同步頭類型(comnd)及同步頭檢測位(synerr)(為低電平,若為高電平則表示同步頭有錯)。在同步頭有效后,進行時鐘分離及碼型變換及移位,移位完成后進行奇偶校驗,并把數(shù)據(jù)定寫入保持寄存器,此時rxrdy變?yōu)楦唠娖?,表示?shù)據(jù)準備好可以讀出數(shù)據(jù)。進入下一個解碼周期,等待串行輸入數(shù)據(jù)。
圖6
該邏輯可由狀態(tài)機實現(xiàn),可劃分為四個狀態(tài)進行:第一個狀態(tài)是空閑狀態(tài),當檢測到數(shù)據(jù)跳變沿時,進入第二個狀態(tài);第二個狀態(tài)為有效同步字頭檢測狀態(tài);當檢測到有效同步字頭,啟動第三個狀態(tài),用鎖相環(huán)分離時鐘,進行碼型轉(zhuǎn)換;當數(shù)據(jù)有效時進入第四個狀態(tài),進行并/串轉(zhuǎn)換及奇偶校驗。其狀態(tài)機狀態(tài)轉(zhuǎn)換如圖4所示,以下是具體實現(xiàn)過程。
①同步字頭檢測。當檢測到數(shù)據(jù)跳變沿(下跳沿為命令字,上跳沿為數(shù)據(jù)字)時,用16MHz時鐘對數(shù)據(jù)進行采集;當采集到大于一個位時的低電平或高電平時,認為同步字頭有效,啟動第二狀態(tài),進行處理。啟動位產(chǎn)生的時間要注意選擇,這對于消除數(shù)據(jù)中的毛刺和減少數(shù)據(jù)的延時都很重要。
②碼型轉(zhuǎn)換。檢測到有效同步字后,啟動鎖相環(huán)開始分離時鐘。此設(shè)計采用超前-滯后鎖相環(huán),鎖相環(huán)如圖5所示。
圖5中邊沿檢測器的輸出e是在u2(t)的跳變沿時產(chǎn)生的窄脈沖,d是c的反相,c、d、e經(jīng)過與門后在f和g形式滯后和超前脈沖。h和g分別用來控制和扣除門和添加門,通過扣除門和除脈沖和通過添加門添加脈沖,它們的和輸出經(jīng)過分頻器2得到c,也即u2(t)就能跟隨u1(t)的相位了。
邊沿檢測器的工作原理是在u1(t)的上跳沿時放過一個16MHz的時鐘脈沖,這樣產(chǎn)生的邊沿檢測脈沖e只會在f和g中的一個產(chǎn)生脈沖,也就避免了超前一滯后型數(shù)字鎖相環(huán)存在的相位模糊問題。該鎖相環(huán)的相位鎖定時間最大為42ns,因此在與數(shù)據(jù)進行模二加之前,應將數(shù)據(jù)進行延時,以便消除毛剌。要想完全將毛剌消除還要配合同步字頭檢測時,啟動位產(chǎn)生時間的設(shè)置。這在后面毛剌處理中有詳細的介紹。
③奇偶校驗和串行并轉(zhuǎn)換。用移位寄存器可實現(xiàn)數(shù)據(jù)的串/并轉(zhuǎn)換。在設(shè)計移位寄存器時,要注意奇偶位的分離,因此在設(shè)計寄存器時需設(shè)置一定的標志位,其源代碼如下:
if reset='0'then
rsr<=(others=>'0');
--全為零可確保在移位過程中idle為低電平;
rxparity<='1';
--確保在移位過程中idle=0,而在移位結(jié)束時,idle=1;
tag<='0';
--移位標志位設(shè)置,當tag=1時,移位完成;
paritygen<=paritymode;
--為奇校驗時paritymode賦值為1,若為偶校驗則設(shè)置為0;
elsif rxclk'event and rxclk='1'then
if idle='1'then
rsr<=(others=>'0');
rxparity<='1';
tag<='0';
paritygen<=paritymode;
elsif hunt='1'then
tag<=rsr(15);
rsr(15 downto 1)<=rsr(14 downto 0);
rsr(0)<=rxparity;
rxparity<=data1;
--進行移位,為右移寄存器;
paritypen<=parityegen xor rxparity;
--進行奇偶校驗;
end if;
end if;
至此曼徹斯特的解碼就完成了,其時序仿真波形如圖6所示。
畋6中data1.Q時,進行碼型轉(zhuǎn)換后的數(shù)據(jù)。由圖中可以看出采用此種方法進行轉(zhuǎn)換,數(shù)據(jù)沒有毛刺,產(chǎn)生的數(shù)據(jù)完全正確。
2.2 編碼
編碼的過程也可分為三部分:①檢測編碼周期是否開始,產(chǎn)生同步字頭;②進行串行轉(zhuǎn)換,產(chǎn)生奇偶校驗位;③對16位有效數(shù)據(jù)及奇偶位進行編碼,編碼周期結(jié)束。與解碼同理,編碼也由狀態(tài)機來實現(xiàn)。
由此狀態(tài)機可劃分為四個狀態(tài)進行實現(xiàn),其狀態(tài)機狀態(tài)轉(zhuǎn)換如圖7所示。
編碼器的輸入時鐘(mclk)為16MHz。當寫信號(wr)為低電平時,同步頭選擇位(cmnd)為高是怦,開始產(chǎn)生命令字同步字頭;反之,為同步字頭。由于同步字頭的高低電平各占1.5個位時,所以選取它的發(fā)送時鐘為2MHz,該時鐘由mclk八分頻得到。同步字頭產(chǎn)生完成,則發(fā)出控制信號開始移位。移位時鐘(1MHz)由同步頭生成時用的時鐘兩分頻產(chǎn)生。在數(shù)據(jù)移位完成時自動添加廳偶位。曼碼形成器對數(shù)據(jù)、奇偶位、同步頭進行處理形成符合1553B標準的雙極性字tx和ntx,完成后txrdy為高電平,等待下一個數(shù)據(jù)的寫入開始再一次的編碼過程,邏輯框圖如圖8所示。
編碼其實是解碼的逆過程,其工作原理非常相似,這里就不詳細介紹了。編碼的時序仿真波形如圖9所示。
圖9中tx為經(jīng)過編碼后的串行數(shù)據(jù)。采用此種方法進行編碼,產(chǎn)生的數(shù)據(jù)完全正確,并且也不存在毛剌。
3 設(shè)計中存在的問題及解決辦法
信號在FPGA器件內(nèi)部通過連線和邏輯單元時,都有一定的延時。延時的大小與連線的長短和邏輯單元的數(shù)目有關(guān)。由于這兩方面的因素,多路信號的電平值發(fā)生變化時,在信號變化的瞬間,組合邏輯的輸出有先后順序。它們并不是同時變化,而且往往會出現(xiàn)一些不正確的類峰信號,這些類峰信號稱為“毛刺”。另外,F(xiàn)PGA器件與分立元件不同,其內(nèi)部不存在寄生電容電感,這些毛刺將被完整的保留并向下一級傳遞,因此毛刺現(xiàn)象在PLD、FPGA設(shè)計中尤為突出。消除數(shù)據(jù)中的毛剌是設(shè)計中的一個重要問題。如果毛刺處理不好,就會影響系統(tǒng)性能甚至引起邏輯錯誤。
本設(shè)計中消除毛剌采用的方法有:①在有毛剌的輸出端加D觸發(fā)器;②計數(shù)器采用格雷碼計數(shù)器。采用D觸發(fā)器是因為D觸發(fā)器的D輸入端對毛剌不敏感,只要毛刺不存時鐘上跳沿時出現(xiàn)在D輸入端,就不會對輸出產(chǎn)生影響,這樣就可以消除毛刺了。采用格雷碼計數(shù)器代替普通的二進制計數(shù)器,是因為格雷碼計數(shù)器的輸出每次只有一位數(shù)據(jù)產(chǎn)生變化,這就消除了競爭冒險產(chǎn)生的條件,避免了毛刺的產(chǎn)生。例如在解碼器的設(shè)計中,進行碼型變換時,要將接收時鐘與接收的串行數(shù)據(jù)進行模2加。因為時鐘滯后于數(shù)據(jù),為了消除毛刺要將數(shù)據(jù)進行延時再進行模2加;同時還要考慮到1553B對時間的要求(兩個數(shù)據(jù)之間的間隔最小只有1.5μs),因此在時鐘分離時就考慮提前進行他高。在檢測同步頭時,一旦其高(或低)電平大于1個位時的寬度就認為同步頭有效,開始進行時鐘分離,這樣就減小了數(shù)據(jù)延時,可有效節(jié)省時間。進行模2加后,加一D觸發(fā)器可確保完全將毛刺消除。在編碼器設(shè)計中在串行數(shù)據(jù)輸出端加一D觸發(fā)器,數(shù)據(jù)的毛刺 也被了。另外,在電路的設(shè)計中盡可能地消除毛刺產(chǎn)生的條件,例如分頻計數(shù)器采用格雷碼計數(shù)器。
圖9
4 仿真及FPGA實現(xiàn)
為了確保設(shè)計的可行性,必須對設(shè)計進行時序仿真;為了提高芯片的性能及資源利用率,要采用專門的綜合軟件對設(shè)計進行優(yōu)化、綜合。由此采用Synplify7.1進行綜合,采用MAX+PLUS II進行時序仿真。在Synplify中使用有效的代碼,優(yōu)化組合邏輯、減少邏輯延時等措施來提高整體性能,還進行了多個文件的分塊設(shè)計,然后將這些文件映射到頂層文件進行綜合,并運用VHDL對單個文件進行編寫、仿真和優(yōu)化。在用到組合邏輯時,Synplify會盡量避免鎖存器的出現(xiàn),節(jié)省邏輯單元。Synplify和其它綜合軟件一樣,編譯后生成的電子設(shè)計交換格式文件(EDIF)可以在MAX+PLUS II或Quartus II 3.0中進行編譯、仿真、分配引腳和其它優(yōu)化處理。因此,采用MAX+PLUS II和Synplify 7.1相結(jié)合對FPGA進行設(shè)計、優(yōu)化、綜合,可提高系統(tǒng)性能和芯片資源的利用率。
最后本設(shè)計在Altara公司ACEX1K系列的FPGA(EP1K100Q208-3)芯片上進行了實現(xiàn)。對于ACEX系列的芯片,它還支持寄存器配平技術(shù)、流水線操作、復制邏輯模塊、使用LPM函數(shù)等技術(shù)來提高其整性性能,并針對其特點對設(shè)計進行了最后的優(yōu)化。該編解碼順共占用了218個邏輯單元,占總邏輯資源的4%,這有利于今后對其進行完善和功能的添加。其輸入時鐘為16MHz,數(shù)據(jù)速率為1MHz,編碼和解碼時序波形分別如圖6所示。
5 總結(jié)及設(shè)計通用性
該編碼解碼器采用自頂向下和自向上相結(jié)合的方法進行設(shè)計,用VHDL語言輸入,用MAX+PLUS II和Synplify分別進行仿真、綜合。在設(shè)計最后,針對器件進行了再一次的優(yōu)化,縮短了設(shè)計周期,提高了系統(tǒng)性能,并且大大提高了芯片資源的利用率。
本設(shè)計具有一定的通用性,它的邏輯大部分只涉及到編、解碼器本身;而它與外部的接口十分簡單,只要對其讀、寫及同步字頭選擇信號進行有效控制,就能使其正常工作。它的設(shè)計是十分獨立的。另外,由于選擇器件資源比較豐富,故對其進行功能添加也十分方便,只需添加電路設(shè)計而不必對原有電路進行修改。
評論
查看更多