SoC技術(shù)在FC芯片設計中的應用
數據收發(fā)緩沖區的定義
數據緩沖區TX-FIFO、RX-FIFO的定義如表2所示:途中發(fā)送緩沖區是33位,低32位是發(fā)送的數據,第32位用于表示當前碼字是否為有序集碼。接收緩沖區是36位,低32位是接收到的數據,高位部分保存FC-2幀的CRC校驗結果、8b/10b碼的譯碼校驗等信息。
5.1 功能概述
FC芯片中有兩路“FC幀收發(fā)模塊及其數據緩沖器”,它們實(shí)現FC-2層協(xié)議中的幀打包、開(kāi)包。它是整個(gè)系統的軟硬件交會(huì )點(diǎn),是整個(gè)系統的核心,其關(guān)鍵在于制定相關(guān)的設計規則。
5.2 數據緩沖區的使用規則
根據多路總線(xiàn)并行工作的原則,設置四塊獨立的數據緩沖區,采用雙口RAM,用于在CPU和幀收發(fā)器之間交換數據。收發(fā)數據緩沖區的使用規則如下:
(1)發(fā)送緩沖區TXBUF。根據圖3所示的FC-2幀格式,該緩沖區用于存放幀頭和有效數據。前24個(gè)字節是固定存放幀頭的幀頭區,后面是有效數據區。發(fā)送時(shí),模塊TXF-CTL從幀頭區取幀頭信息發(fā)送,根據寄存器中發(fā)送起始地址(TXOFFSET)和發(fā)送個(gè)數(TXCOUNT)的值從TXBUF中連續取數據發(fā)送。這里,只設置1個(gè)幀頭區,是考慮到在“序列”中幀頭具有相關(guān)性,同時(shí)1個(gè)幀頭區不存在多個(gè)區域的切換,簡(jiǎn)化了硬件實(shí)現。
(2)接收緩沖區 RXBUF。該緩沖區采用循環(huán)隊列的方式,由模塊RXF-CTL順序寫(xiě)入數據,數據的存儲順序如圖3所示的FC-2幀格式。在完成1幀數據接收后,模塊 RXF-CTL要在寄存器中表明當前幀在RXBUF中的接收起始地址(RXOFFSET)和接收到的個(gè)數(RXCOUNT)。CPU讀取寄存器 RXCOUNT后,該寄存器自動(dòng)清零。上述使用規則是整個(gè)系統進(jìn)行SoC設計的要點(diǎn)。
工作過(guò)程
數據的發(fā)送過(guò)程發(fā)送:
(1)CMD_RESET。模塊TXF-CTL復位,進(jìn)入空閑態(tài)。
(2)CMD_TEST:由CPU直接控制數據的發(fā)送,模塊TXF-CTL進(jìn)入空閑態(tài)。
(3)CMD_START_TX1:在空閑態(tài)并且CMD_TEST和CMD_START_TX2都無(wú)效時(shí),進(jìn)入按幀發(fā)送數據的狀態(tài),模塊TXF-CTL發(fā)出SENDING信號。模塊TXF- CTL先向FC發(fā)送通道的TX-FIFO發(fā)送有序集碼lDLE(K28.5D21.4D21.5D21.5);根據SOF碼型寄存器發(fā)送相應的SOF;然后從TXBUF的幀頭區取數據依次發(fā)送;以后,如果數據從TXBUF取,則根據寄存器發(fā)送起始地址(TXOFFSET)和發(fā)送個(gè)數(TXCOUNT)從 TXBUF中取出對應的數據發(fā)送;發(fā)送完有效數據后,再根據EOF碼型寄存器發(fā)送相應的EOF;最后再發(fā)一個(gè)有序集碼 IDLE(K28.5D21.4D21.5D21.5)。一幀數據發(fā)完后,將SENDING信號清零,CMD_START_TX1清零,發(fā)中斷信號 INTTXi,然后回到空閑態(tài)。發(fā)送過(guò)程只有CMD_RESET可以中斷。
(4)如果數據來(lái)在ULP-FIFO,則讀發(fā)送個(gè)數(TXCOUNT),從ULP-FIFO中取數發(fā)送,若發(fā)送個(gè)數(TXCOUNT)大于FC-2幀規定的長(cháng)度,則按2112字節的長(cháng)度分多幀發(fā)送,每幀完畢,自動(dòng)修改幀頭中的幀記數值,并且自動(dòng)選擇相應的SOF和EOF定界符;若發(fā)送的過(guò)程中ULP-FIFO空,則自動(dòng)結束這一幀的發(fā)送,并啟動(dòng)超時(shí)定時(shí)器,等待ULP-FIFO中的數據。當發(fā)送個(gè)數(TXCOUNT)規定的數據發(fā)完后,或者超時(shí),則將SENDING信號清零,CMD_START_TX1 清零,發(fā)中斷信號INTTXi,然后回到空閑態(tài)。發(fā)送過(guò)程只有CMD_RESET可以中斷。
(5)CMD_START_TX2:在空閑態(tài)當CMD_START_TX2有效時(shí),模塊TXF-CTL按有序
集碼寄存器和有序集碼參數寄存器的定義發(fā)送有序集碼。
數據的接收過(guò)程
數據的接收有兩種方式:由CPU直接控制;由RXF-CTL按FC-2幀格式接收數據。CPU可通過(guò)FC-2幀收發(fā)控制器的寄存器向模塊RXF-CTL發(fā)命令來(lái)控制數據發(fā)送:
(1)CMD_RESET。模塊TXF-CTL復位,進(jìn)入空閑態(tài)。
(2)CMD_TEST:由CPU直接控制數據的接收。
(3)CMD_START_RXi:在空閑態(tài)并且CMD_TEST無(wú)效時(shí),進(jìn)入按幀接收數據的狀態(tài)。模塊RXF-CTL從FCSET-A的RX-FIFO中收到有序集碼SOF后,發(fā)出 RECEIVE信號,表示已經(jīng)開(kāi)始1幀數據的接收。模塊RXF-CTL將收到的數據依次寫(xiě)入循環(huán)緩沖區RXBUF。再收到任一個(gè)有序集碼后,1幀數據接收結束,將RECEIVE信號清零。更新寄存器接收起始地址(RXOFFSET)和接收到的個(gè)數(RXCOUNT)。如果接收到的CRC碼無(wú)效或者最后一個(gè)有序集碼不是EOF,則將接收有錯(RXERR)置‘1’,否則發(fā)出INTRXi中斷信號,表示收到1幀正確的數據。繼續下一幀的數據的接收。在1幀數據接收的過(guò)程中,只有CMD_RESET可以中斷;如果尚未開(kāi)始接收1幀數據,則CMD_TEST可使其回到空閑態(tài)。CPU讀寄存器RXOFFSET、 RXERR和RXCOUNT可知道接收到的數據存放的地址和個(gè)數以及數據幀是否有效。
另外CMD_START_Rxi還用來(lái)控制FC接收通道中的RX-FIFO控制器。CMD_START_Rx1控制FC接收通道按FC-2幀接收數據存入RX-FIFO;CMD_START_Rx2控制 FC接收通道接收所有數據(除了連續的IDLE有序集碼之外)存入RXFIFO。
內置CPU的配置及ULP的設計
內置CPU通過(guò)嵌入的軟件完成FC-2層的序列和交換的協(xié)議,同時(shí)實(shí)現ULP與上層的通訊。
CPU外設的配置
CPU配置的外設和總線(xiàn)接口定義如下:
(1)兩個(gè)RS232串行口。
(2)看門(mén)狗定時(shí)器:WATCHDOG-TIMER。
(3)兩個(gè)FC-2層通訊用的定時(shí)器:FCTIMER1,FC-TIMER2。
(4)接收兩路FC-2幀收發(fā)控制器中斷的PIO:INTFRAME-PIO。兩個(gè)接受來(lái)自RX-FIFO的有序集譯碼的PIO:ORDERSET- PIO1,ORDERSETPIO2。兩個(gè)內總線(xiàn)接口,用于操作兩路FC-2幀收發(fā)控制器??筛鶕僮鞴δ苄枰?,對FC-2幀收發(fā)控制器的各寄存器進(jìn)行定義。
評論