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