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