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