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