基于GAP技術(shù)的網(wǎng)絡(luò)隔離設(shè)備的研究與設(shè)計
3.2 SCSI協(xié)議控制器的設(shè)計
在SCSI總線上進行任何處理都需要8個總線階段:空閑階段、仲裁階段、選擇階段、重選階段、消息輸入/輸出階段、數(shù)據(jù)輸入/輸出階段、命令階段、狀態(tài)階段。在任何時候,SCSI總線只能處于一個確定的總線階段。階段之聞的前后關(guān)聯(lián)受到嚴格限制,也就是說并不是每個階段后面都可以跟著任何階段。圖3示出了SCSI總線階段狀態(tài)的轉(zhuǎn)化,如命令和數(shù)據(jù)階段只能在消息階段之后出現(xiàn),同樣,消息階段的后面必須緊跟這兩個階段,而不是其他階段。
該協(xié)議控制器的設(shè)計嚴格按照SCSI總線階段轉(zhuǎn)化過程,由以上分析提出SCSI協(xié)議控制器的FP-GA實現(xiàn)方案:由于空閑、仲裁這兩個總線階段的機理簡單,故將其直接放在SCSI模塊中實現(xiàn),其余每個階段都有相對應(yīng)的模塊,整個系統(tǒng)軟件由1個頂層模塊和7個平行的底層模塊構(gòu)成。模塊層次如圖4所示。
- SCSI模塊有1個有限狀態(tài)機,每個狀態(tài)對應(yīng)底層的1個模塊,并用寄存器S_MODE的不同取指來表示不同模塊,通過這個狀態(tài)機實現(xiàn)階段轉(zhuǎn)換、消息處理、命令解釋、數(shù)據(jù)處理和狀態(tài)處理等功能。
- Sel模塊處理選擇階段的時序。啟動器將信號BSY、SEL、ATN和啟動器的ID號以及目標器的ID號置為有效,啟動器隨后釋放BSY信號,經(jīng)過200ms之后目標器將BSY信號置為有效,再過2個延遲周期后啟動器釋放SEL信號并進入消息階段。
- Resel模塊處理重新選階段的時序。啟動器將信號BSY、SEI I/O和啟動器的ID號以及目標器的ID號置為有效,啟動器隨后釋放BSY信號。最多200ms之后目標器必須將BSY信號置為有效作為響應(yīng)。
- Msg_out模塊處理消息出階段的時序。啟動器將ATN置為有效,目標器將信號MSG和C/D信號置為有效,I/O信號為無效。這意味著接下來要進入的是消息出相序,啟動器將發(fā)出16位寬傳輸消息。發(fā)送完信息字節(jié)后,啟動器將釋放ATN信號,根據(jù)發(fā)出的信息確定下一個階段。
- Cmd模塊處理命令階段的命令接收時序。目標器在接收到啟動器80H的消息后進入命令階段。目標器需將MSG和I/O置為無效,將C/D置為有效,接收完命令后,將根據(jù)命令判斷接下來要進入的是數(shù)據(jù)輸入階段還是數(shù)據(jù)輸出階段。
- Dat模塊處理數(shù)據(jù)階段的數(shù)據(jù)接收和發(fā)送時序。數(shù)據(jù)接收時,在命令READ、TESI UNIT READY、INQUIRY、REQUEST、SENSE、READ CAPACITY后都將進入數(shù)據(jù)進相序。此時目標器將MSG和C/D信號置為無效,將I/O信號置為有效。目標器將發(fā)送相應(yīng)的數(shù)據(jù)。在命令為WRITE后將進入數(shù)據(jù)出階段,此時目標器將MSG、C/D和I/O都置為O,啟動器向目標器發(fā)送數(shù)據(jù),之后進入消息階段。
- Status模塊處理狀態(tài)階段的時序。在命令完成后將進入狀態(tài)階段,目標器將MSG信號置為無效,將C/D和I/O信號置為有效,并發(fā)送命令執(zhí)行的情況是GOOD還是CHECK CONDITON。狀態(tài)階段結(jié)束后將進入消息進階段,向啟動器說明一個COM-MAND COMPLETED。至此一個SCSI訪問結(jié)束。目標器將進入空閑階段,啟動器將可以通過1個80 H的消息觸發(fā)另外一個訪問。
- Msg_in模塊處理消息進階段的消息發(fā)送時序。目標器接收到16位寬傳輸?shù)南⒑髮⑦M入消息進時序。目標器將MSG、C/D以及I/O都置為有效,并發(fā)送重復(fù)的信息。發(fā)送完后目標器將釋放MSG信號,并根據(jù)消息確定下一個階段。
評論