<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > 用FPGA實(shí)現1553B總線(xiàn)接口中的曼碼編解碼器

用FPGA實(shí)現1553B總線(xiàn)接口中的曼碼編解碼器

作者: 時(shí)間:2004-12-08 來(lái)源:網(wǎng)絡(luò ) 收藏
摘要:介紹用設計實(shí)現MIL-STD部接口中的曼徹斯特碼。該設計采用VHDL硬件描述語(yǔ)言編程,并且專(zhuān)門(mén)的綜合工具Synplify對設計進(jìn)行綜合、優(yōu)化,在MAX+PLUS II進(jìn)行時(shí)序仿真,最后在上實(shí)現。

關(guān)鍵詞:曼徹斯特碼 總線(xiàn) VHDL

引言

曼徹斯特碼編碼、解碼器是中不可缺少的重要組成部分。曼徹斯特碼設計的好壞直接影響的性能。本文介紹的是MIL-STD-1553B接口中最曼徹斯特碼的編碼和解碼器的設計實(shí)現。

在電子設計領(lǐng)域,可編程器件的廣泛應用為數字系統的設計帶來(lái)極大的靈活性,1片FPGA/CPLD芯片可替代上百個(gè)IC電路。同時(shí),Altera公司開(kāi)發(fā)的MAX+PLUS II和QUARTUS II軟件,是完全集成化的可編程邏輯設計環(huán)境;Synplicity公司的Synplify是專(zhuān)門(mén)用于FPGA和CPLD的一種優(yōu)秀邏輯綜合工具;VHDL更是一種功能強大的硬件設計語(yǔ)言,可用簡(jiǎn)潔的代碼描述來(lái)進(jìn)行復雜控制邏輯的設計。所這些使得硬件的設計如同軟件那樣方便,極大方便了數字電路的設計。所有這些條件都為在實(shí)驗室開(kāi)發(fā)實(shí)現MIL-STD-1553B協(xié)議接口提供了有利條件。文中所設計的編碼、解碼器就是采用硬件描述語(yǔ)言VHDL進(jìn)行編程,用Synplify進(jìn)行綜合,以及采用MAX+PLUS II進(jìn)行時(shí)序仿真,在FPGA上實(shí)現的MIL-STD-1553B中的曼徹斯特碼編碼、解碼器。

圖1

1 1553B總線(xiàn)及其接口功能

MIL-STD-1553B的全稱(chēng)是:飛機內部時(shí)分制指令/響應式多路傳輸數據總線(xiàn)。它用可屏蔽雙絞線(xiàn)進(jìn)行數據傳輸,信號是以串行數字脈沖的形式進(jìn)行傳輸,其數據代碼用雙相曼徹特碼的形式來(lái)表示,其傳輸速率為1Mb/s。1553B數據總線(xiàn)上連接有三種類(lèi)型的系統:①總線(xiàn)控制器(BC)――控制總線(xiàn)上的數據傳輸;②遠程終端控制器(RT)――響應BC來(lái)的命令,執行數據傳輸;③總線(xiàn)監視器(BM)――有選擇地接收數據總線(xiàn)上的信息并保存之。每個(gè)子系統可以通過(guò)1553B總線(xiàn)連接到任何一個(gè)子系統。數據就是在總線(xiàn)上進(jìn)行傳輸的。

圖2

在總線(xiàn)上傳輸的有三種類(lèi)型的字:命令字、狀態(tài)字和數據字。每種字的字長(cháng)為20位,有效信息位是16位每個(gè)字的前三位為同步字頭,最后一位為奇校驗位。有效信息(16位)及奇偶校驗位在總線(xiàn)上以曼徹斯特碼的形式進(jìn)行傳輸,每位占的時(shí)間為1μs。同步字頭占三位,或先正后負(命令字、狀態(tài)字)或先負后正(數據字)。正/負電平各占1.5μs,即占同位場(chǎng)的一半。由于系統的類(lèi)型不同,可辨別出命令字和狀態(tài)字,命令字由現行的總線(xiàn)控制器發(fā)出,而狀態(tài)字總是由遠程終端RT發(fā)出。

作為MIL-STD-1553B總線(xiàn)的接口應完成以下功能:①將總線(xiàn)上的串行信息流轉換成處理機可以處理的并行信息或者與之相反;②接收或發(fā)送信息時(shí),能夠識別或生成標準的1553B信息字和消息;③完成與處理機之間的信息交換,包括1553B信息地址的分配,命令字(或狀態(tài)字)的譯碼或返回狀態(tài)字、發(fā)送數據字等。曼徹斯特碼完成的是曼徹斯特碼的編碼及解碼,并檢測錯誤。它接收具有有效同步字的曼徹斯特碼,并進(jìn)行譯碼,以及識別其類(lèi)型和串/并轉換、奇偶校驗等;或者將處理器發(fā)出的并行二進(jìn)制數據進(jìn)行曼徹斯特碼編碼,再加上同步字頭及奇偶位使之成為符合1553B標準的字進(jìn)行輸出。

編解碼器是總線(xiàn)接口的一部分。一般說(shuō)來(lái),1553B總線(xiàn)接口由電平轉換電路、曼徹斯特碼編解碼器、命令字/狀態(tài)字譯碼邏輯和CPU及相關(guān)電路組成,如圖1所示。

除了編解碼器可由FPGA來(lái)實(shí)現外,它與CPU之間的相關(guān)電路,如共享RAM、命令字/狀態(tài)字譯碼和存儲器管理、處理器與存儲器接口邏輯等也可以由FPGA來(lái)實(shí)現;CPU可采用TMS320LF2407。本文所介紹的就是其中的編碼和解碼器的設計。

2 曼徹斯特碼編解碼器的總體設計

在介紹編解碼器的設計之前,有必要了解曼徹斯特碼的特征,以便在設計中對其加以利用,達到簡(jiǎn)化電路的效果。

曼徹斯特碼是一種廣泛應用于航空電子綜合系統中的總線(xiàn)數據傳輸的雙極性碼。它在每個(gè)碼位中點(diǎn)存在一個(gè)跳變。1信號是一個(gè)由1到0的負跳沿,而0信號是由0到1的正跳沿。它本身包含了自定時(shí)的信息。因此它不需要獨立的信道來(lái)傳輸位定信息,它可以直接從數據中分離出定時(shí)時(shí)鐘,同時(shí)還能與變壓器耦合相協(xié)調,十分適合用在變壓器耦合形式,長(cháng)度為150m(500英尺)左右的場(chǎng)合,因此在航空電子綜合系統中,它是最主要的形式。

在MIL-STD-1553B協(xié)議中其數據格式為如圖2所示。

根據1553B的數據格式以及曼徹斯特碼的特點(diǎn),可采用狀態(tài)機對其進(jìn)行編碼、解碼的實(shí)現。狀態(tài)機是一個(gè)廣義的時(shí)序電路,像移位寄存器、計數器等都算是它的特殊功能類(lèi)型中的一種。根據輸入、輸出及狀態(tài)之間的關(guān)系,狀態(tài)機可分為兩類(lèi):一種是輸出狀態(tài)有關(guān),而輸入與狀態(tài)無(wú)在的狀態(tài)機類(lèi)型,稱(chēng)為More狀態(tài)機;另一種是輸出及輸入與狀態(tài)皆有關(guān)系的狀態(tài)機,稱(chēng)為Mealy狀態(tài)機。本設計采用的是Mealy狀態(tài)機。編碼和解碼是兩個(gè)相互獨立的模塊。

2.1 解碼

解碼的過(guò)程可分為三部分:①同步字頭檢測,并辨別其為數據字還是命令字。②對曼碼形式的數據進(jìn)行解碼。由于曼徹斯特碼自帶定時(shí)時(shí)鐘,故可從數據中分離出同步時(shí)鐘。本設計采用的是傳統的用數字鎖相環(huán)的方法來(lái)分離時(shí)鐘;將時(shí)鐘和數據進(jìn)行處理使曼碼數據轉化為非歸零二進(jìn)制數據。③將串行數據轉化為并行數據,并進(jìn)行奇偶校驗。解碼器的邏輯圖如圖3所示。圖中data為串行輸入數據。當data開(kāi)始發(fā)生跳變時(shí)進(jìn)行同步頭檢測,若在data發(fā)生變化后檢測到大于一個(gè)位時(shí)的高(或低)電平,則認為同步頭有效,輸出同步頭類(lèi)型(comnd)及同步頭檢測位(synerr)(為低電平,若為高電平則表示同步頭有錯)。在同步頭有效后,進(jìn)行時(shí)鐘分離及碼型變換及移位,移位完成后進(jìn)行奇偶校驗,并把數據定寫(xiě)入保持寄存器,此時(shí)rxrdy變?yōu)楦唠娖?,表示數據準備好可以讀出數據。進(jìn)入下一個(gè)解碼周期,等待串行輸入數據。

圖6

該邏輯可由狀態(tài)機實(shí)現,可劃分為四個(gè)狀態(tài)進(jìn)行:第一個(gè)狀態(tài)是空閑狀態(tài),當檢測到數據跳變沿時(shí),進(jìn)入第二個(gè)狀態(tài);第二個(gè)狀態(tài)為有效同步字頭檢測狀態(tài);當檢測到有效同步字頭,啟動(dòng)第三個(gè)狀態(tài),用鎖相環(huán)分離時(shí)鐘,進(jìn)行碼型轉換;當數據有效時(shí)進(jìn)入第四個(gè)狀態(tài),進(jìn)行并/串轉換及奇偶校驗。其狀態(tài)機狀態(tài)轉換如圖4所示,以下是具體實(shí)現過(guò)程。

①同步字頭檢測。當檢測到數據跳變沿(下跳沿為命令字,上跳沿為數據字)時(shí),用16MHz時(shí)鐘對數據進(jìn)行采集;當采集到大于一個(gè)位時(shí)的低電平或高電平時(shí),認為同步字頭有效,啟動(dòng)第二狀態(tài),進(jìn)行處理。啟動(dòng)位產(chǎn)生的時(shí)間要注意選擇,這對于消除數據中的毛刺和減少數據的延時(shí)都很重要。

②碼型轉換。檢測到有效同步字后,啟動(dòng)鎖相環(huán)開(kāi)始分離時(shí)鐘。此設計采用超前-滯后鎖相環(huán),鎖相環(huán)如圖5所示。

圖5中邊沿檢測器的輸出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)的相位了。

邊沿檢測器的工作原理是在u1(t)的上跳沿時(shí)放過(guò)一個(gè)16MHz的時(shí)鐘脈沖,這樣產(chǎn)生的邊沿檢測脈沖e只會(huì )在f和g中的一個(gè)產(chǎn)生脈沖,也就避免了超前一滯后型數字鎖相環(huán)存在的相位模糊問(wèn)題。該鎖相環(huán)的相位鎖定時(shí)間最大為42ns,因此在與數據進(jìn)行模二加之前,應將數據進(jìn)行延時(shí),以便消除毛剌。要想完全將毛剌消除還要配合同步字頭檢測時(shí),啟動(dòng)位產(chǎn)生時(shí)間的設置。這在后面毛剌處理中有詳細的介紹。

③奇偶校驗和串行并轉換。用移位寄存器可實(shí)現數據的串/并轉換。在設計移位寄存器時(shí),要注意奇偶位的分離,因此在設計寄存器時(shí)需設置一定的標志位,其源代碼如下:

if reset='0'then

rsr=(others=>'0');

--全為零可確保在移位過(guò)程中idle為低電平;

rxparity='1';

--確保在移位過(guò)程中idle=0,而在移位結束時(shí),idle=1;

tag='0';

--移位標志位設置,當tag=1時(shí),移位完成;

paritygen=paritymode;

--為奇校驗時(shí)paritymode賦值為1,若為偶校驗則設置為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)行奇偶校驗;

end if;

end if;

至此曼徹斯特的解碼就完成了,其時(shí)序仿真波形如圖6所示。

畋6中data1.Q時(shí),進(jìn)行碼型轉換后的數據。由圖中可以看出采用此種方法進(jìn)行轉換,數據沒(méi)有毛刺,產(chǎn)生的數據完全正確。

2.2 編碼

編碼的過(guò)程也可分為三部分:①檢測編碼周期是否開(kāi)始,產(chǎn)生同步字頭;②進(jìn)行串行轉換,產(chǎn)生奇偶校驗位;③對16位有效數據及奇偶位進(jìn)行編碼,編碼周期結束。與解碼同理,編碼也由狀態(tài)機來(lái)實(shí)現。

由此狀態(tài)機可劃分為四個(gè)狀態(tài)進(jìn)行實(shí)現,其狀態(tài)機狀態(tài)轉換如圖7所示。

編碼器的輸入時(shí)鐘(mclk)為16MHz。當寫(xiě)信號(wr)為低電平時(shí),同步頭選擇位(cmnd)為高是怦,開(kāi)始產(chǎn)生命令字同步字頭;反之,為同步字頭。由于同步字頭的高低電平各占1.5個(gè)位時(shí),所以選取它的發(fā)送時(shí)鐘為2MHz,該時(shí)鐘由mclk八分頻得到。同步字頭產(chǎn)生完成,則發(fā)出控制信號開(kāi)始移位。移位時(shí)鐘(1MHz)由同步頭生成時(shí)用的時(shí)鐘兩分頻產(chǎn)生。在數據移位完成時(shí)自動(dòng)添加廳偶位。曼碼形成器對數據、奇偶位、同步頭進(jìn)行處理形成符合1553B標準的雙極性字tx和ntx,完成后txrdy為高電平,等待下一個(gè)數據的寫(xiě)入開(kāi)始再一次的編碼過(guò)程,邏輯框圖如圖8所示。

編碼其實(shí)是解碼的逆過(guò)程,其工作原理非常相似,這里就不詳細介紹了。編碼的時(shí)序仿真波形如圖9所示。

圖9中tx為經(jīng)過(guò)編碼后的串行數據。采用此種方法進(jìn)行編碼,產(chǎn)生的數據完全正確,并且也不存在毛剌。

3 設計中存在的問(wèn)題及解決辦法

信號在FPGA器件內部通過(guò)連線(xiàn)和邏輯單元時(shí),都有一定的延時(shí)。延時(shí)的大小與連線(xiàn)的長(cháng)短和邏輯單元的數目有關(guān)。由于這兩方面的因素,多路信號的電平值發(fā)生變化時(shí),在信號變化的瞬間,組合邏輯的輸出有先后順序。它們并不是同時(shí)變化,而且往往會(huì )出現一些不正確的類(lèi)峰信號,這些類(lèi)峰信號稱(chēng)為“毛刺”。另外,FPGA器件與分立元件不同,其內部不存在寄生電容電感,這些毛刺將被完整的保留并向下一級傳遞,因此毛刺現象在PLD、FPGA設計中尤為突出。消除數據中的毛剌是設計中的一個(gè)重要問(wèn)題。如果毛刺處理不好,就會(huì )影響系統性能甚至引起邏輯錯誤。

本設計中消除毛剌采用的方法有:①在有毛剌的輸出端加D觸發(fā)器;②計數器采用格雷碼計數器。采用D觸發(fā)器是因為D觸發(fā)器的D輸入端對毛剌不敏感,只要毛刺不存時(shí)鐘上跳沿時(shí)出現在D輸入端,就不會(huì )對輸出產(chǎn)生影響,這樣就可以消除毛刺了。采用格雷碼計數器代替普通的二進(jìn)制計數器,是因為格雷碼計數器的輸出每次只有一位數據產(chǎn)生變化,這就消除了競爭冒險產(chǎn)生的條件,避免了毛刺的產(chǎn)生。例如在解碼器的設計中,進(jìn)行碼型變換時(shí),要將接收時(shí)鐘與接收的串行數據進(jìn)行模2加。因為時(shí)鐘滯后于數據,為了消除毛刺要將數據進(jìn)行延時(shí)再進(jìn)行模2加;同時(shí)還要考慮到1553B對時(shí)間的要求(兩個(gè)數據之間的間隔最小只有1.5μs),因此在時(shí)鐘分離時(shí)就考慮提前進(jìn)行他高。在檢測同步頭時(shí),一旦其高(或低)電平大于1個(gè)位時(shí)的寬度就認為同步頭有效,開(kāi)始進(jìn)行時(shí)鐘分離,這樣就減小了數據延時(shí),可有效節省時(shí)間。進(jìn)行模2加后,加一D觸發(fā)器可確保完全將毛刺消除。在編碼器設計中在串行數據輸出端加一D觸發(fā)器,數據的毛刺 也被了。另外,在電路的設計中盡可能地消除毛刺產(chǎn)生的條件,例如分頻計數器采用格雷碼計數器。

圖9

4 仿真及FPGA實(shí)現

為了確保設計的可行性,必須對設計進(jìn)行時(shí)序仿真;為了提高芯片的性能及資源利用率,要采用專(zhuān)門(mén)的綜合軟件對設計進(jìn)行優(yōu)化、綜合。由此采用Synplify7.1進(jìn)行綜合,采用MAX+PLUS II進(jìn)行時(shí)序仿真。在Synplify中使用有效的代碼,優(yōu)化組合邏輯、減少邏輯延時(shí)等措施來(lái)提高整體性能,還進(jìn)行了多個(gè)文件的分塊設計,然后將這些文件映射到頂層文件進(jìn)行綜合,并運用VHDL對單個(gè)文件進(jìn)行編寫(xiě)、仿真和優(yōu)化。在用到組合邏輯時(shí),Synplify會(huì )盡量避免鎖存器的出現,節省邏輯單元。Synplify和其它綜合軟件一樣,編譯后生成的電子設計交換格式文件(EDIF)可以在MAX+PLUS II或Quartus II 3.0中進(jìn)行編譯、仿真、分配引腳和其它優(yōu)化處理。因此,采用MAX+PLUS II和Synplify 7.1相結合對FPGA進(jìn)行設計、優(yōu)化、綜合,可提高系統性能和芯片資源的利用率。

最后本設計在A(yíng)ltara公司ACEX1K系列的FPGA(EP1K100Q208-3)芯片上進(jìn)行了實(shí)現。對于A(yíng)CEX系列的芯片,它還支持寄存器配平技術(shù)、流水線(xiàn)操作、復制邏輯模塊、使用LPM函數等技術(shù)來(lái)提高其整性性能,并針對其特點(diǎn)對設計進(jìn)行了最后的優(yōu)化。該編解碼順共占用了218個(gè)邏輯單元,占總邏輯資源的4%,這有利于今后對其進(jìn)行完善和功能的添加。其輸入時(shí)鐘為16MHz,數據速率為1MHz,編碼和解碼時(shí)序波形分別如圖6所示。

5 總結及設計通用性

該編碼解碼器采用自頂向下和自向上相結合的方法進(jìn)行設計,用VHDL語(yǔ)言輸入,用MAX+PLUS II和Synplify分別進(jìn)行仿真、綜合。在設計最后,針對器件進(jìn)行了再一次的優(yōu)化,縮短了設計周期,提高了系統性能,并且大大提高了芯片資源的利用率。

本設計具有一定的通用性,它的邏輯大部分只涉及到編、解碼器本身;而它與外部的接口十分簡(jiǎn)單,只要對其讀、寫(xiě)及同步字頭選擇信號進(jìn)行有效控制,就能使其正常工作。它的設計是十分獨立的。另外,由于選擇器件資源比較豐富,故對其進(jìn)行功能添加也十分方便,只需添加電路設計而不必對原有電路進(jìn)行修改。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>