王 佩,徐 進,張愛林
(1.西安工程大學 電子信息學院,陜西 西安 710048;2.國網(wǎng)甘肅省電力公司檢修公司,甘肅 蘭州 737100)
IEEE1394協(xié)議是一種高速串行總線標準,該協(xié)議規(guī)定了事物層、鏈路層和物理層3個協(xié)議層[1].1394總線不僅節(jié)省空間,而且可替代多種巨大而昂貴的接口[2],因而應用范圍越來越廣,其技術也逐漸趨于完善.基于此,本文設計了一種IEEE1394事務層接口,目的是實現(xiàn)在PLB總線和139鏈路層之間進行數(shù)據(jù)傳輸.IEEE1394協(xié)議最初由Apple公司發(fā)布,后來經(jīng)IEEE采納并進行規(guī)范,成為IEEE1394-1995標準,目前在工業(yè)應用領域中IEEE1394總線技術應用在航天領域、航空領域、工業(yè)測控領域以及軍事領域中,傳輸速度己經(jīng)達到了每秒幾百兆以上[3].在民用領域中,IEEE1394技術主要集中應用在3個領域:家電行業(yè)、個人計算機行業(yè)和專業(yè)音視頻行業(yè)[4].該技術最先在國外發(fā)展起來,市場上國外設計的1394總線產(chǎn)品較多,國內(nèi)近幾年才開始發(fā)展,技術還不夠成熟.
目前在PLB總線和1394鏈路層之間進行數(shù)據(jù)傳輸?shù)脑O計中,對于數(shù)據(jù)異常發(fā)送和接收的處理方面做的還不夠完善.本文基于IEEE1394b協(xié)議[5]研究設計了一種事務層接口, 包括跨時鐘域數(shù)據(jù)訪問、數(shù)據(jù)位寬轉換、寄存器狀態(tài)控制等,對于數(shù)據(jù)異常的處理提出了一種解決方法,為1394總線事務層與鏈路層接口之間的數(shù)據(jù)傳輸提供了一種可行的設計方案,具有一定的實用價值.
1394事務層模塊連接了PLB總線和1394鏈路層模塊,主要完成1394總線事務層的數(shù)據(jù)發(fā)送和數(shù)據(jù)接收任務.由于事物層和鏈路層控制器采用的時鐘不同,在傳輸過程中需要進行時序的緩沖,所以事務層邏輯向鏈路層提供4組通用FIFO存儲器[6],分別用于異步數(shù)據(jù)包和等時數(shù)據(jù)包的收發(fā)緩存,實現(xiàn)了1394總線各種數(shù)據(jù)的收發(fā)操作.系統(tǒng)設計框圖如圖1所示.
圖1 事物層接口設計
事物層接口模塊包含PLB從接口、寄存器訪問接口和4個FIFO存儲器.這4個FIFO存儲器分別是異步發(fā)送FIFO、等時發(fā)送FIFO、異步接收FIFO、等時接收FIFO.異步發(fā)送FIFO和等時發(fā)送FIFO是一類,統(tǒng)稱為寫FIFO;異步接收FIFO和等時接收FIFO是一類,統(tǒng)稱為讀FIFO.這4種FIFO支持的PLB事務包括128位或64位單拍讀寫操作和四字突發(fā)讀寫操作.
PLB總線提供了一個高寬帶、低延遲、高性能的處理器內(nèi)部總線,該總線接口單元從PLB主設備獨立的訪問連接到PLB總線接口上的從設備.
PLB總線從接口主要支持單拍讀寫和突發(fā)讀寫操作,可訪問以下4個地址空間:異步發(fā)送數(shù)據(jù)緩沖區(qū)、等時發(fā)送數(shù)據(jù)緩沖區(qū)、異步接收數(shù)據(jù)緩沖區(qū)和等時接收數(shù)據(jù)緩沖區(qū).每片地址空間首地址支持硬件參數(shù)化配置.只支持單拍訪問寄存器地址空間,并且該空間首地址支持硬件參數(shù)化配置,數(shù)據(jù)訪問寬度是32位.由于包格式的不同,FIFO接口可支持33或34位寬,而PLB總線從接口的數(shù)據(jù)位寬是128位,所以每次PLB操作將寫入或讀出2個FIFO深度的數(shù)據(jù).異步發(fā)送FIFO和等時發(fā)送FIFO深度均為4k,異步接收FIFO和等時接收FIFO深度均為8k.FIFO與PLB之間的數(shù)據(jù)有效位轉換關系如圖2所示.
圖2 FIFO與PLB的數(shù)據(jù)有效位轉換
通過異步發(fā)送FIFO接口,事務層發(fā)送邏輯可以控制鏈路層邏輯發(fā)送1394異步包.雖然只定義了一個FIFO接口,但是可以連接多個物理FIFO.在正常操作下,鏈路層邏輯會持續(xù)監(jiān)測異步發(fā)送FIFO接口,便于發(fā)送數(shù)據(jù),并在1394總線處于異步階段時,請求物理層去仲裁1394總線.整個異步發(fā)送過程如下所述:
當主機控制邏輯準備好一個異步包時,事務層發(fā)送FIFO控制邏輯設置ATFPktRdy(發(fā)送包準備)信號有效,請求鏈路層邏輯開始從異步發(fā)送FIFO中讀取、處理數(shù)據(jù).當事物層邏輯檢測到ATFInc(讀取異步發(fā)送FIFO數(shù)據(jù)的指針增加控制信號)有效時,撤銷ATFPktRdy信號.鏈路層邏輯使用ATFPktRdy信號作為處理數(shù)據(jù)的開始,使用ATFEmpty信號來判斷FIFO中是否存在有效數(shù)據(jù).
當鏈路層邏輯采樣到ATFPktRdy有效時,會檢查異步發(fā)送FIFO中的第一個數(shù)據(jù)是否有效,若有效,鏈路層向物理層發(fā)出請求,所有的數(shù)據(jù)包會使用優(yōu)先級仲裁.鏈路層邏輯在發(fā)完請求之后,會等待來自物理層的應答.當鏈路層檢測到物理層取消了當前請求,鏈路層邏輯會重新發(fā)起請求.直到接收到來自物理層的應答,鏈路層邏輯才會驅(qū)動物理層與鏈路層之間的數(shù)據(jù)傳輸接口處于保持狀態(tài),開始準備數(shù)據(jù)發(fā)送.
每當鏈路層邏輯處理完一個異步發(fā)送FIFO字時,ATFInc信號有效一個周期,即讀FIFO數(shù)據(jù)指針加1,在下一個時鐘周期,有效的新FIFO數(shù)據(jù)將被發(fā)送.鏈路層邏輯會持續(xù)檢查ATFEmpty信號和FIFO中的包標識位.當ATFEmpty信號有效時會發(fā)生Underrun的情況,鏈路層邏輯將放棄物理層與鏈路層之間的接口控制權.當鏈路層邏輯檢測到FIFO中的包標識位時,則認為當前這個字是發(fā)送狀態(tài)字,上一個字是數(shù)據(jù)包的最后一個字,鏈路層邏輯隨后會放棄物理層與鏈路層之間的接口控制權.當完成異步包的發(fā)送后,鏈路層邏輯會等待來自物理層的響應包.當收到響應包,鏈路層將異步數(shù)據(jù)發(fā)送完成的返回信號和異步包對應的狀態(tài)字上報給事務層邏輯,便于事務層邏輯辨認該返回信息是屬于之前的哪一個發(fā)送包.
通過等時發(fā)送FIFO接口,事務層發(fā)送邏輯可以控制1394鏈路層發(fā)送等時包.盡管這個接口被定義成一個FIFO接口類型,但是這個接口可以連接多個物理FIFO.1394總線上的等時操作都是由等時周期開始包來統(tǒng)一控制的.當事務層發(fā)送、鏈路層接收到一個等時周期開始包,鏈路層邏輯就開始將一個周期內(nèi)規(guī)劃好的等時包發(fā)送到1394總線上.整個等時發(fā)送過程如下所述:
當主機控制邏輯準備好一個等時包時,事務層發(fā)送FIFO控制邏輯設置ITFPktRdy(發(fā)送包準備)信號有效,請求鏈路層邏輯開始從等時發(fā)送FIFO中讀取、處理數(shù)據(jù).當事務層邏輯檢測到ITFInc(讀取等時發(fā)送FIFO數(shù)據(jù)的指針增加控制信號)有效時,撤銷該信號.ITFEmpty信號用于判斷在等時發(fā)送FIFO中是否存在數(shù)據(jù).
當鏈路層邏輯檢測到ITFPktRdy信號有效時,會從等時發(fā)送FIFO中取出第一個字檢查數(shù)據(jù)的有效性,若有效,鏈路層會向物理層發(fā)起請求,然后等待來自物理層的應答.在發(fā)送等時包前,事務層需向等時發(fā)送FIFO中填入一個周期隔離字,用于標識每個等時周期待發(fā)數(shù)據(jù)包的界限.當鏈路層檢測到物理層取消了當前的請求,鏈路層邏輯會重新發(fā)起請求.一旦檢測到來自物理層的授權應答,鏈路層邏輯將驅(qū)動物理層與鏈路層之間的接口為保持狀態(tài),開始準備發(fā)送數(shù)據(jù).
每當鏈路層邏輯處理完一個等時發(fā)送FIFO字時,鏈路層邏輯會驅(qū)動ITFInc有效一個周期,表明在下一個時鐘周期讀取的新FIFO數(shù)據(jù)有效.鏈路層邏輯持續(xù)檢查ITFEmpty信號和FIFO包標志位.當ITFEmpty信號有效時會發(fā)生Underrun情況,鏈路層邏輯將放棄物理層與鏈路層之間的接口控制權.當鏈路層邏輯檢測到FIFO中的包標識位時,則認為當前這個字是發(fā)送狀態(tài)字,上一個字是數(shù)據(jù)包的最后一個字,鏈路層邏輯隨后會放棄物理層與鏈路層之間的接口控制權.
當完成等時包的發(fā)送后,鏈路層邏輯會檢查等時發(fā)送FIFO中下一個字是周期隔離字,還是當前等時周期待發(fā)送的下一個等時包.若是等時周期隔離字,表示在當前等時周期中不再需要發(fā)送等時包,即鏈路層已經(jīng)處理完成當前的等時周期,反之表明當前等時周期內(nèi)還需要繼續(xù)發(fā)送等時包.
Underrun情況是指:在鏈路層邏輯從發(fā)送FIFO中取數(shù)的過程中,鏈路層邏輯的讀取速率大于事務層邏輯的填寫速率,即鏈路層邏輯還沒有讀取一個完整的包,發(fā)送FIFO中就已經(jīng)沒有數(shù)據(jù)了,致使1394總線上出現(xiàn)一個不完整的錯誤幀,最終導致總線效率降低.為防止此情況發(fā)生,本設計先將足夠多的數(shù)據(jù)填入發(fā)送FIFO中,當鏈路層以一定的速率開始讀取數(shù)據(jù)時,主機發(fā)送控制邏輯能夠及時、連續(xù)提供發(fā)送數(shù)據(jù),并避免發(fā)送FIFO空,產(chǎn)生錯誤幀.
發(fā)送FIFO每次只填寫一幀待發(fā)數(shù)據(jù),發(fā)送完成之后FIFO讀寫指針歸零.當事物層邏輯、軟件檢測到發(fā)送FIFO發(fā)生Underrun、包頭字數(shù)錯誤、包頭事務代碼錯誤時,鏈路層邏輯會產(chǎn)生中斷信號,通知主機對發(fā)送FIFO進行flush操作,即產(chǎn)生一個系統(tǒng)時鐘周期的高電平脈沖信號,結束異常發(fā)送過程,同時復位發(fā)送FIFO及其周圍的邏輯,然后清除中斷.在flush操作結束前,發(fā)送邏輯不會向1394總線上發(fā)送任何數(shù)據(jù)包.
存儲在異步發(fā)送FIFO中的包與1394總線上傳輸?shù)陌袷讲惶粯?異步發(fā)送FIFO輸出33位數(shù)據(jù)總線,32位寬的異步發(fā)送數(shù)據(jù)線,第33位為1用于標識異步發(fā)送FIFO包格式的開始和結束,即包的第一個字和最后一個字,包的其余字段此位為0.
存儲在等時發(fā)送FIFO中的包與1394總線上傳輸?shù)陌袷讲惶粯?等時發(fā)送FIFO輸出34位數(shù)據(jù)總線.32位寬的等時發(fā)送數(shù)據(jù)線,第33位為1用于標識等時發(fā)送FIFO包格式的開始和結束,即包的第一個字和最后一個字,包的其余字段此位為0.第34位是等時周期隔離字標識位,為1時,表示在當前等時周期中不再需要發(fā)送等時包,即鏈路層已經(jīng)處理完成當前的等時周期;為0時,表明當前等時周期內(nèi)還需要繼續(xù)發(fā)送等時包.
通過異步包接收FIFO接口,1394鏈路層IP可以將1394總線上接收到的異步包,寫入到事務層的異步包接收FIFO中.通過等時包接收FIFO接口,1394鏈路層IP可以將1394總線上接收到的等時包,寫入到事務層的等時包接收FIFO中.整個接收過程如下所述:
當鏈路層邏輯檢測到物理層與鏈路層之間的接口有數(shù)據(jù)前綴時,接收邏輯就開始工作.首先會把接口的速度鎖存住,然后把接收到的數(shù)據(jù)轉換成32位數(shù)據(jù).當接收邏輯收集到1394總線上的第一個32位數(shù)據(jù)時,會對內(nèi)容進行解析.對于異步包,若其目標節(jié)點ID與鏈路層的節(jié)點ID寄存器內(nèi)容相匹配,目標總線ID與鏈路層的總線ID寄存器內(nèi)容相匹配,則將這幀數(shù)據(jù)傳遞給事物層接收邏輯.對于等時包,若其通過了等時接收通道檢查,則數(shù)據(jù)包會被傳遞給事物層接收邏輯.當鏈路層把第一個32位數(shù)據(jù)寫入接收FIFO時,需要把接收FIFO內(nèi)的第32位置1,表明這是一個幀的開始數(shù)據(jù).如果接收包是異步非廣播包,鏈路層會向物理層發(fā)起立即請求,用于發(fā)送響應包.
在接收數(shù)據(jù)包的包頭過程中,接收FIFO始終有空間的前提下,所有包頭字將被寫入接收FIFO中,若接收到包頭不完整或包頭CRC校驗碼錯誤的數(shù)據(jù)包以及發(fā)生了接收FIFO幾乎滿事件,則后續(xù)數(shù)據(jù)負載不會被寫入接收FIFO中,同時放棄此次接收并對已寫入接收FIFO的數(shù)據(jù)進行Backup操作.
在接收數(shù)據(jù)包數(shù)據(jù)負載過程中,每接收一個字就進行一次Update操作.若出現(xiàn)了接收FIFO幾乎滿狀態(tài),接收狀態(tài)機就會停止向接收FIFO寫入數(shù)據(jù),之前被寫入的數(shù)據(jù)負載不會被丟棄,所剩最后一個字節(jié)會被填入狀態(tài)字.當接收FIFO滿,鏈路層會丟棄正在接收的來自物理層的數(shù)據(jù)包,如果該數(shù)據(jù)包要求返回響應包,則事物層邏輯產(chǎn)生忙響應包輸出給發(fā)送模塊再發(fā)送至物理層.接收邏輯會對數(shù)據(jù)負載進行CRC校驗,若出現(xiàn)校驗碼錯誤,數(shù)據(jù)仍寫入接收FIFO中,但會產(chǎn)生相應的中斷信號,通過中斷狀態(tài)寄存器向主機報告錯誤.
若接收到的數(shù)據(jù)負載實際長度大于包頭中的數(shù)據(jù)長度,將在接收完包頭數(shù)據(jù)長度的數(shù)據(jù)負載后認為下一個數(shù)據(jù)是CRC校驗碼,可能會產(chǎn)生校驗碼錯誤;若數(shù)據(jù)負載實際長度小于包頭中的數(shù)據(jù)長度,將正常結束接收操作,主機可以通過比較包頭數(shù)據(jù)長度與實際負載長度得知此情況.
Update操作指更新接收FIFO,即鏈路層邏輯需要表明前一個和當前接收到的字是有效的FIFO控制字,其中接收包頭數(shù)據(jù)是整體更新一次,而數(shù)據(jù)負載和狀態(tài)字都是每字更新一次.Backup操作指將接收FIFO的寫指針指向最初開始接收這幀數(shù)據(jù)的位置,即拋棄接收到的數(shù)據(jù).當鏈路層邏輯檢測到接收數(shù)據(jù)包頭存在CRC錯誤時,接收控制邏輯放棄之前已經(jīng)寫入接收FIFO的數(shù)據(jù),并把接收指針歸位.對于讀FIFO,當出現(xiàn)Backup,所有未Update的數(shù)據(jù)將被放棄.
異步接收FIFO接收32位寬的異步數(shù)據(jù)線,在第33位填入包標志位,為1表示包的第一個字和最后一個字,包的其余字段此位填0.第34位置1表示該字是總線復位標識字或是自標識包.等時接收FIFO接收32位寬的等時數(shù)據(jù)線,向第33位填入等時周期開始包的標識字,通知事物層邏輯收到的等時包屬于哪個等時周期,或者標識等時包的第一個和最后一個字.
主機通過這個接口訪問鏈路層邏輯的寄存器.1394鏈路層模塊寄存器分為DCR(設備配置)寄存器和PLB(處理器局部總線)寄存器.DCR寄存器主要是鏈路層內(nèi)核寄存器,PLB寄存器主要是FIFO控制和狀態(tài)寄存器.主機訪問寄存器接口的時序是一個異步時序,即主機訪問寄存器的時鐘與寄存器內(nèi)部使用的時鐘完全異步.所以無論讀、寫操作,都會有一個操作完成的標識.對于讀操作,只有檢測到SRWComplete信號為高脈沖,才能安全的讀取同步過來的數(shù)據(jù),只有在上一次操作徹底完成的情況下,才能發(fā)起下一次讀寫操作.主機訪問寄存器接口時序如3所示.
事務層邏輯需要發(fā)送異步數(shù)據(jù)時,需要先將足夠的數(shù)據(jù)填入異步發(fā)送FIFO中,才能夠使能ATFPktRdy信號,當檢測到ATFInc信號為高電平,撤銷ATFPktRdy信號使能.每次ATFInc信號為高電平,即讀數(shù)據(jù)指針增1時,在下一個時鐘正跳變時,異步FIFO中待發(fā)送數(shù)據(jù)將被輸出.
圖3 主機訪問寄存器接口時序圖
事務層需要發(fā)送等時數(shù)據(jù)時,需要先將足夠的數(shù)據(jù)填入等時發(fā)送FIFO中,才能夠使能ITFPktRdy,當檢測到ITFInc為高電平,撤銷ITFPktRdy信號使能.每次ITFInc信號為高電平,即讀數(shù)據(jù)指針增1時,在下一個時鐘正跳變時,等時FIFO中待發(fā)送數(shù)據(jù)將被輸出.
異步包的接收分為2個部分:包頭的接收和包負載的接收.在包頭的接收過程中,每個接收包頭字沒有立即被寫入接收FIFO,只有在正確接收包頭完成之后,才能通過Update信號真正使數(shù)據(jù)被寫入FIFO.而在接收包負載的過程中,每個接收負載字會被立即寫入接收FIFO中.一旦在接收的過程中,出現(xiàn)了Backup操作,則接收FIFO的寫指針必須要能夠回到接收當前幀的起始位置.
等時包的接收分為2個部分:包頭的接收和包負載的接收.在包頭的接收過程中,每個接收包頭字沒有立即被寫入接收FIFO,只有在正確接收包頭完成之后,才能通過Update信號真正使數(shù)據(jù)被寫入FIFO.而在接收包負載的過程中,每個接收負載字會被立即寫入接收FIFO中.一旦在接收的過程中,出現(xiàn)了Backup操作,則接收FIFO的寫指針必須要能夠回到接收當前幀的起始位置.
文中設計的1394事物層接口不僅對數(shù)據(jù)位寬進行了有效轉換,且采用FIFO存儲器解決了鏈路層和事物層時鐘異步的問題,并對事物層控制邏輯操作過程進行了詳細設計提出了一種針對數(shù)據(jù)異常情況下的處理方法,通過對寄存器的設置不僅實現(xiàn)數(shù)據(jù)流的有效控制,并能獲取當前的狀態(tài)信息,實現(xiàn)事務層與鏈路層的數(shù)據(jù)通信,提高數(shù)據(jù)的傳輸效率.最后采用QuestaSim軟件進行仿真驗證,從仿真時序圖中可以得出事物層接口基本實現(xiàn)了事物層模塊正常發(fā)送和接收數(shù)據(jù)包的功能.
參考文獻:
[1] 汪國有,何曉翔,王志勉.基于FPGA的IEEE1394鏈路層控制器的設計與實現(xiàn)[J].紅外與激光工程,2004,33(5):553-556.
[2] 李肇慶,朱險峰.IEEE1394接口技術[M].北京:國防工業(yè)出版社,2004:7-12.
[3] 高旭光.基于IEEE1394總線的高速信息傳輸設備的設計[D].保定:河北大學,2010:4-9.
[4] 楊慶勇,劉方,張覃平,等.基于IEEE 1394接口的圖像傳輸控制器設計[J].儀器儀表用戶,2008,3(11):41-43.
[5] IEEE Std.1394bTM—2002,IEEE Standard for a High Performance Serial Bus-Amendment 2[S].New York:IEEE Computer Society,2002.
[6] 楊麗君,張盛兵,楊可,等.1394鏈路層控制器等時傳輸模式的設計[J].計算機測量與控制,2012,20(3):800-803.