AS466 是 Qlogic 公司生產(chǎn)的一款高性能 SCSI 處理器,它可提供 Fast40 SCSI 同步傳輸速率,其高度集成的 SCSI 核心支持先進(jìn)的SCAM一層和二層協(xié)議,而內(nèi)嵌的微控制器則使用戶可以通過靈活多變的編程方式協(xié)調(diào) SCSI 隊列,簡明清晰的外部接口使得硬件設(shè)計更為簡單,尤其適合于開發(fā)專用 SCSI 存儲系統(tǒng)。硬件接口的設(shè)計此前已有文章介紹,而軟件設(shè)計是基于 FAS466 系統(tǒng)的開發(fā)難點,目前此類文章尚不多見。本文通過對 FAS466 處理器內(nèi)部結(jié)構(gòu)和操作原理的深入分析,給出了基于 FAS466 處理器系統(tǒng)的通用軟件解決方案和應(yīng)用實例。
1、FAS466 的結(jié)構(gòu)和原理
FAS466 的內(nèi)部結(jié)構(gòu)如圖1所示,該器件由 SCSI 控制器、微控制器、FIFO 以及連接它們的總線和信號線組成,并通過它們?yōu)橥獠刻峁?a target="_blank">微處理器接口、DMA接口和 SCSI 總線接口。
FAS466 微處理器接口可以連接多種微處理器或 DSP;而DMA接口則主要與外部DMA控制器連接?組成DMA通道;SCSI 總線接口可以連接各種 SCSI 設(shè)備。其中,SCSI 控制器與微控制器分別是 SCSI 協(xié)議的執(zhí)行中心和控制核心。
1.1 SCSI 控制器操作原理
SCSI 控制器為 SCSI 協(xié)議操作提供了靈活有力的底層硬件支持。它通過 32 個8位寬的寄存器與外部微處理器作用。SCSI 控制器命令集包括中斷命令、斷開命令、目標(biāo)器模式命令、啟動器模式命令和混合命令。外部微處理器或者 FAS466 微控制器通過向 SCSI 控制器命令寄存器中寫入代表特定行為的命令代碼來實現(xiàn)命令的發(fā)送。SCSI 控制器將自動執(zhí)行命令,通過命令中斷狀態(tài)寄存器和命令狀態(tài)寄存器來反映命令完成的狀態(tài)信息。
SCSI 控制器內(nèi)部有五個狀態(tài)階段:復(fù)位狀態(tài)、斷開(空閑)狀態(tài)、選擇和重選允許狀態(tài)、目標(biāo)器空閑狀態(tài)和啟動器空閑狀態(tài)。其狀態(tài)轉(zhuǎn)換圖如圖2所示。
(1)復(fù)位狀態(tài)
上電復(fù)位后,SCSI 控制器處于復(fù)位狀態(tài),此時 SCSI 控制器不能驅(qū)動任何 SCSI 總線信號,也不響應(yīng)任何信號,命令寄存器中的命令被忽略?而且只要 FAS466 外部復(fù)位信號有效,SCSI 控制器始終保持在這個狀態(tài)。在操作過程中,外部微處理器可以通過給 SCSI 控制器模塊的復(fù)位位寫1(微處理器接口模塊復(fù)位寄存器1位)使 SCSI 控制器處于復(fù)位狀態(tài),寫0使 SCSI 控制器進(jìn)入空閑狀態(tài)。
(2) 斷開(空閑)狀態(tài)
當(dāng) SCSI 總線復(fù)位信號(RST)有效,且 SCSI 控制器不處于復(fù)位狀態(tài)或者 SCSI 控制器與 SCSI 總線斷開時,SCSI 控制器進(jìn)入該狀態(tài),此狀態(tài)不能進(jìn)行選擇和重選操作。
(3)選擇和重選允許狀態(tài)
當(dāng)斷開模式命令允許 SCSI 控制器響應(yīng)選擇和重選信號時,系統(tǒng)進(jìn)入此狀態(tài),所有參與仲裁使用 SCSI 總線的命令都必須經(jīng)過此狀態(tài)。該狀態(tài)下,SCSI 控制器響應(yīng)總線發(fā)出選擇和重選事件。除非進(jìn)入目標(biāo)器或啟動器空閑狀態(tài),或者RST信號有效,否則 SCSI 控制器將一直保持這個狀態(tài)。
(4)目標(biāo)器空閑狀態(tài)
當(dāng) SCSI 控制器響應(yīng)總線發(fā)起事件或者作為其它 SCSI 設(shè)備重選的結(jié)果時,系統(tǒng)進(jìn)入該狀態(tài)。此狀態(tài)下,SCSI 控制器將作為目標(biāo)器連接到 SCSI 總線,且當(dāng)BSY(總線忙)信號有效時,系統(tǒng)將驅(qū)動 SCSI 階段流水線。此狀態(tài)承認(rèn)目標(biāo)器模式和混合命令。除非 SCSI 控制器目標(biāo)器斷開(總線空閑)或者RST信號有效,否則 SCSI 控制器將一直保持該狀態(tài)。
(5)啟動器空閑狀態(tài)
當(dāng) SCSI 控制器響應(yīng)總線重選事件或者作為其它 SCSI 設(shè)備選擇的結(jié)果時,系統(tǒng)進(jìn)入該狀態(tài)。此狀態(tài)下,SCSI 控制器將作為啟動器連接到 SCSI 總線上,而 FAS466 并不使BSY信號有效,也不驅(qū)動 SCSI 階段流水線。SCSI 控制器將一直保持這個狀態(tài)、直到 SCSI 總線空閑(目標(biāo)器斷開)或者RST信號有效。
SCSI 控制器根據(jù)當(dāng)前狀態(tài),總線發(fā)起事件和命令寄存器中的命令來決定各個狀態(tài)階段之間的轉(zhuǎn)換,以實現(xiàn) SCSI 總線的仲裁作用,并響應(yīng)總線發(fā)起選擇或者重選事件以及進(jìn)行命令、消息、數(shù)據(jù)、狀態(tài)在 SCSI 總線上的傳輸?shù)热蝿?wù)。
1.2 FAS466 微控制器操作原理
FAS466 微控制器是一個小型的Fast結(jié)構(gòu)(40Million指令每秒)RISC微處理器,內(nèi)部有一個 32 位的寄存器文件、一個五級深度的堆棧、一個整型ALU和其它特殊功能寄存器。該微控制器的所有指令都是16位寬,除了子程序在兩個指令周期(四個時鐘周期)內(nèi)完成外,其它所有指令均在一個指令周期內(nèi)完成。
FAS466 微控制器有三種操作狀態(tài):復(fù)位狀態(tài),空閑狀態(tài)和運行狀態(tài),其狀態(tài)轉(zhuǎn)換圖如圖3所示。
系統(tǒng)復(fù)位時,微控制器進(jìn)入復(fù)位狀態(tài),在空閑和復(fù)位狀態(tài)下,外部微處理器可以通過I/O口操作微控制器的內(nèi)部寄存器和程序存儲器。首先由外部微處理器通過地址指針寄存器加載寄存器地址,然后再通過內(nèi)部寄存器或者程序存儲器的字節(jié)操作寄存器來進(jìn)行操作。外部微處理器則通過設(shè)置地址指針寄存器和寫程序數(shù)據(jù)到程序存儲器的字節(jié)寄存器來將程序下載到微控制器的程序存儲器中。下載完畢后,外部微處理器向程序計數(shù)器寫程序開始執(zhí)行的地址,然后寫01h到控制狀態(tài)寄存器,這樣程序就會從指定的位置開始執(zhí)行以進(jìn)入運行狀態(tài)。微控制器運行過程中,外部微處理器不能打斷微控制器或者 SCSI 控制器,直到收到微控制器產(chǎn)生的一個中斷。在運行狀態(tài),外部微處理器可以操作郵箱寄存器但不能操作通用功能寄存器。當(dāng)微控制器已執(zhí)行完當(dāng)前指令又沒有接收到新的指令時,系統(tǒng)將進(jìn)入空閑狀態(tài)以等待新的命令。
2、FAS466 的軟件解決方案
基于 FAS466 的系統(tǒng)可通過外部微處理器、FAS466 微控制器和 SCSI 控制器的協(xié)調(diào)工作來實現(xiàn)系統(tǒng)功能。根據(jù) FAS466 的內(nèi)部結(jié)構(gòu)和原理分析,這里給出如圖4所示的基于 FAS466 的系統(tǒng)整體軟件設(shè)計流程。其軟件工作過程如下:
(1)外部微處理器初始化 FAS466 微控制器和 SCSI 控制器。(FAS466 微控制器初始化包括裝載和執(zhí)行它的固件)。
(2)FAS466 微控制器允許 SCSI 控制器對 SCSI 總線選擇隊列的響應(yīng)。
(3)外部微處理器寫一個 SCSI 操作命令給外部命令/設(shè)置郵箱寄存器,然后設(shè)置LoadTBS位(外部 TBS寄存器6位),以通知 FAS466 微控制器有一個未響應(yīng)請求。
(4)FAS466 位控制器檢查 LoadTBS位,確認(rèn)請求。
(5)FAS466 禁止 SCSI 控制器對 SCSI 總線選擇和重選事件的響應(yīng)。
(6)FAS466 微控制器復(fù)制外部命令/設(shè)置寄存器的內(nèi)容給存儲器,清除LoadTBS位,以允許外部微處理器在等待一個微控制器中斷前設(shè)置下一個命令。
(7)FAS466 微控制器向 SCSI 控制器發(fā)送命令(一般用EXEC #k),SCSI 控制器執(zhí)行命令并在命令完成后產(chǎn)生一個中斷。
(8)FAS466 微控制器進(jìn)行中斷處理得到 SCSI 操作的邏輯結(jié)果后,產(chǎn)生一個中斷給外部微處理器。
(9)外部微處理器根據(jù)命令的執(zhí)行情況進(jìn)行中斷處理。
重復(fù)執(zhí)行(2)~(9)步實現(xiàn)系統(tǒng)的連續(xù)操作。
DMA傳輸是基于 FAS466 系統(tǒng)的主要工作。在傳輸數(shù)據(jù)量確定的情況下,數(shù)據(jù)量可由編程時寫入的塊數(shù)計數(shù)器和塊大小寄存器中的值決定。但由于實際應(yīng)用系統(tǒng)的傳輸數(shù)據(jù)量存在不確定性,在設(shè)計DMA數(shù)據(jù)傳輸程序時,應(yīng)使 SCSI FIFO 中始終充滿數(shù)據(jù),或使DMA控制器或 SCSI 控制器持續(xù)讀寫SC-SI FIFO,以使 SCSI 總線上的數(shù)據(jù)傳輸不受啟動器或目標(biāo)器的限制。FIFO 的空、滿門限可由外部微處理器在初始化時通過編程設(shè)定。
在傳輸數(shù)據(jù)量不確定的情況下,從外部DMA控制器接收數(shù)據(jù)的子程序如圖5所示。SCSI 控制器接收到傳輸命令后即可參與總線仲裁以獲得總線的控制權(quán),而外部微處理器則通過設(shè)置RDATA位來決定數(shù)據(jù)傳送的方向;在 FIFO 為空而數(shù)據(jù)接收未完成時,SCSI 控制器進(jìn)行一次空操作,等待數(shù)據(jù)。數(shù)據(jù)量的不確定性可能使得命令完成后 FIFO 中仍殘留數(shù)據(jù),此時可以選擇暫停傳輸進(jìn)入EXFER(表示數(shù)據(jù)傳輸過程中出現(xiàn)錯誤)中斷并清空 FIFO,也可使其它處理回到傳輸起點,或者忽略錯誤直接回到傳輸起點。數(shù)據(jù)傳送完畢可以選擇是否斷開與 SCSI 總線的連接。若選擇斷開則進(jìn)入XFERCMPDSC(表示傳輸完成并與 SCSI 總線斷開)中斷,以釋放總線的控制權(quán)而讓其它的命令使用總線,此時,如果想要進(jìn)行下一次數(shù)據(jù)傳輸,必須重新獲得總線控制權(quán)。若選擇不斷開總線則進(jìn)入XFERCMPNODSC(表示傳輸完成且不與 SCSI 總線斷開)中斷,可直接回到數(shù)據(jù)傳輸?shù)钠瘘c。在所有正常情況下,F(xiàn)AS466 都將循環(huán)回到數(shù)據(jù)傳輸起點,以便進(jìn)行連續(xù)數(shù)據(jù)傳輸。
3、應(yīng)用實例
基于 FAS466 的視頻存儲系統(tǒng)可實現(xiàn)數(shù)字圖像的無壓縮海量存儲,該系統(tǒng)硬件框圖如圖6所示。圖中,DSP 接收到開拍信號后將進(jìn)行系統(tǒng)初始化,CCD相機(jī)可將原始圖像信號經(jīng)過視頻采集卡轉(zhuǎn)換成數(shù)字圖像信號暫存到緩沖器中,并在DMA控制器的作用下,以DMA方式傳送給 FAS466,數(shù)據(jù)在 FAS466 的控制下存入 SCSI 硬盤組。這樣,在硬件基礎(chǔ)上,就可通過本文所述的軟件解決方案實現(xiàn)視頻圖像的持續(xù)高速存儲。
4、軟件設(shè)計中的注意事項
在設(shè)計基于 FAS466 的系統(tǒng)軟件時,應(yīng)注意以下一些問題:
(1)在 FAS466 支持的多種處理器中,每個外部微處理器類型都有其相應(yīng)的代碼,因此必須通過芯片配置寄存器選擇正確的微處理器模式。如TMS320C5X系列 DSP 的模式選擇值就應(yīng)為3Fh。
(2)SCSI 控制器并不允許命令堆棧,因此,每次只能接收和執(zhí)行一個命令。
(3)DMA傳輸時,塊大小不能為奇數(shù)。
(4)非法寫入命令寄存器的命令將引起非法命令中斷,并設(shè)置非法命令錯誤位(錯誤中斷狀態(tài)寄存器第2位),因此,在將其它命令寫到命令寄存器前,這個中斷必須得到處理。
? ? ? ?責(zé)任編輯:pj
評論
查看更多