專利名稱:計(jì)算機(jī)的擴(kuò)展rom的擴(kuò)容方法及接口芯片的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)PCI總線的擴(kuò)展ROM的擴(kuò)容方法及接口芯片,尤其是將容量大于上位內(nèi)存空閑區(qū)域的擴(kuò)展ROM映射到計(jì)算機(jī)系統(tǒng)的可存取空間的方法及接口芯片。
根據(jù)PC機(jī)的擴(kuò)展ROM規(guī)范以及PCI總線規(guī)范,擴(kuò)展ROM的ROM芯片中必須具有一個頭標(biāo)區(qū),以便讓計(jì)算機(jī)系統(tǒng)檢測到該擴(kuò)展ROM并且自動初始化。ROM的頭標(biāo)區(qū)主要包括0000H地址的數(shù)據(jù)為55H,0001H地址的數(shù)據(jù)為OAAH,0002H地址的數(shù)據(jù)為ROM容量指示字節(jié)等。計(jì)算機(jī)系統(tǒng)在掃描擴(kuò)展ROM的POST過程中,以檢測到符合上述要求的頭標(biāo)區(qū)以及正確的數(shù)據(jù)校驗(yàn)和確認(rèn)擴(kuò)展ROM的存在和有效。擴(kuò)展ROM必須可以映射到存儲器空間,在計(jì)算機(jī)系統(tǒng)看來,擴(kuò)展ROM空間屬于存儲器空間中的一部分,計(jì)算機(jī)系統(tǒng)像執(zhí)行內(nèi)存中的程序一樣,通過調(diào)用擴(kuò)展ROM中的初始化模塊,將控制權(quán)交給擴(kuò)展ROM,對其進(jìn)行初始化。但對于PCI總線的擴(kuò)展ROM,計(jì)算機(jī)系統(tǒng)首先將擴(kuò)展ROM空間映射到存儲器空間中,接著將ROM芯片中的數(shù)據(jù)復(fù)制到上位內(nèi)存中,再解除擴(kuò)展ROM空間的映射關(guān)系,使其與存儲器空間相隔離。最終計(jì)算機(jī)系統(tǒng)在擴(kuò)展ROM的內(nèi)存映象中對PCI總線的擴(kuò)展ROM進(jìn)行初始化并對內(nèi)存映象寫保護(hù),這樣用內(nèi)存映象替換真實(shí)ROM的方式,既使得擴(kuò)展ROM仍然定位于上位內(nèi)存,保持了兼容性,又避免了低速ROM的速度影響,保持了高速PCI總線的效率。
當(dāng)前PCI總線的擴(kuò)展ROM主要用于在計(jì)算機(jī)初始化過程中實(shí)現(xiàn)某些功能,例如顯卡的擴(kuò)展ROM用于初始化顯卡和增強(qiáng)BIOS的顯示功能;SCSI卡的擴(kuò)展ROM用于初始化SCSI設(shè)備;硬盤還原卡(類似地有硬盤保護(hù)卡、系統(tǒng)復(fù)原卡)的擴(kuò)展ROM用于在計(jì)算機(jī)初始化過程中獲得控制權(quán),進(jìn)而攔截并檢查硬盤數(shù)據(jù)的輸入輸出,從而可以對用戶選定區(qū)域的硬盤數(shù)據(jù)進(jìn)行保護(hù)和還原,以防止誤刪除、故意破壞以及防病毒等。這類擴(kuò)展ROM在ROM芯片中設(shè)置了實(shí)現(xiàn)相關(guān)功能所必要的計(jì)算機(jī)程序代碼和數(shù)據(jù),以及用于指示該擴(kuò)展ROM有效的頭標(biāo)區(qū),計(jì)算機(jī)系統(tǒng)將ROM芯片中的內(nèi)容復(fù)制到存儲器空間的上位內(nèi)存區(qū)域中,然后在內(nèi)存映象中,而不是在ROM中執(zhí)行擴(kuò)展ROM的初始化模塊等程序。參見
圖1,PC機(jī)存儲器空間通常包括常規(guī)內(nèi)存(Conventional Memory)、上位內(nèi)存(Upper Memory)、擴(kuò)展內(nèi)存(Extended Memory)以及目前已較少使用的擴(kuò)充內(nèi)存(Expanded Memory)。上位內(nèi)存區(qū)域通常是指絕對地址為A0000H至FFFFFH的區(qū)域,其中地址為A0000H至BFFFFH的區(qū)域用于顯示緩沖區(qū),地址為C0000H至C7FFFH的區(qū)域通常用于顯卡的擴(kuò)展ROM,地址為E0000H至FFFFFH的區(qū)域通常用于計(jì)算機(jī)系統(tǒng)的BIOS(早期BIOS簡單,僅用到F0000H地址以上的區(qū)域)。未被分配的上位內(nèi)存區(qū)域,即地址為C000H至DFFFFH之間的區(qū)域,共96KB容量作為擴(kuò)展ROM的可用空間,也就是說,各個擴(kuò)展ROM的容量的總和不宜超過96KB。
當(dāng)前的實(shí)際情況及發(fā)展趨勢是第一,BIOS需要不斷地增加新功能,例如支持USB總線以及將來的設(shè)備,所以當(dāng)前的BIOS在數(shù)據(jù)壓縮后仍然采用了分頁存取的擴(kuò)容方法,暫時不會占用更多的上位內(nèi)存,但也不會讓出任何空間;第二,當(dāng)前顯卡的發(fā)展使得大多數(shù)顯卡的擴(kuò)展ROM容量已經(jīng)超過32KB,例如一款采用ATI RAGE 128GL芯片的AGP顯卡,其擴(kuò)展ROM容量為44KB,另一款采用ATI RAGE MOBILITY-M的AGP 2X顯卡,其擴(kuò)展ROM容量為64KB,這樣留下給各個擴(kuò)展ROM使用的空間總和將只剩下64KB;第三,各個具有擴(kuò)展ROM的設(shè)備因?yàn)樽陨淼陌l(fā)展,需要更多的可用RO空間去實(shí)現(xiàn)更多的功能。所以,需要一種擴(kuò)展ROM的擴(kuò)容方法,以盡可能小的空間占用提供盡可能大的可用ROM空間。
已有的某些擴(kuò)展ROM采用了公知的一種類似BIOS分頁存取的擴(kuò)容方法,該方法將擴(kuò)展ROM的整個ROM芯片分成若干容量較小的頁,與ROM芯片的數(shù)據(jù)交換則通過一個頁面窗口進(jìn)行,而不再占用相當(dāng)于整個ROM容量的上位內(nèi)存區(qū)域。操作過程是,ROM芯片中的初始化模塊在被計(jì)算機(jī)系統(tǒng)調(diào)用后獲得控制權(quán),初始化模塊和ROM中的其它程序根據(jù)需要向頁面控制寄存器寫入數(shù)據(jù),指定所要存取的頁面號,再通過頁面窗口存取該頁面的數(shù)據(jù)。但這種方法存在如下缺點(diǎn)第一,效率低,計(jì)算機(jī)系統(tǒng)軟復(fù)位后,頁面控制寄存器中的數(shù)據(jù)不可預(yù)料,為了防止這個未知數(shù)據(jù)指定一個沒有頭標(biāo)區(qū)的頁面,擴(kuò)展ROM的每個頁面都需要設(shè)置相同的頭標(biāo)區(qū)和初始化模塊,所以將減少ROM芯片的實(shí)際可用容量,并且窗口越小、頁面越多則實(shí)際可用容量越小,對于PCI總線的擴(kuò)展ROM,因?yàn)橛?jì)算機(jī)系統(tǒng)將ROM中的數(shù)據(jù)復(fù)制到上位內(nèi)存中,內(nèi)存中的數(shù)據(jù)僅是ROM芯片某個頁面的映象,所以要實(shí)現(xiàn)頁面存取,只能在另外的空閑內(nèi)存區(qū)域再開一個頁面窗口,這樣總共將需要占用兩倍于頁面窗口大小的上位內(nèi)存區(qū)域,并且頁面窗口越大則占用內(nèi)存越多;第二,兼容性差,在存儲器空間的上位內(nèi)存區(qū)域本來就存在物理內(nèi)存,當(dāng)擴(kuò)展ROM空間映射到存儲器空間后,將有可能與同一地址的已有內(nèi)存發(fā)生沖突,所以在計(jì)算機(jī)系統(tǒng)將ROM中的數(shù)據(jù)復(fù)制到內(nèi)存后,多數(shù)主板的BIOS會隔離真實(shí)的擴(kuò)展ROM空間,在操作系統(tǒng)啟動后也會因?yàn)閷ι衔粌?nèi)存區(qū)域的使用而覆蓋了擴(kuò)展ROM的頁面窗口,所以有可能無法通過頁面窗口存取到整個ROM芯片的內(nèi)容。當(dāng)然,因?yàn)锽IOS是PC機(jī)必備的控制程序,不需要頭標(biāo)區(qū),本身又是映射操作的主控方,所以這種擴(kuò)容方法應(yīng)用于BIOS不會存在上述缺點(diǎn),但應(yīng)用于擴(kuò)展ROM則存在。
本發(fā)明的目的是,提供一種效率和兼容性更高的擴(kuò)展ROM的擴(kuò)容方法以及基于該方法支持大容量擴(kuò)展ROM的PCI總線接口芯片。
本發(fā)明的技術(shù)構(gòu)思是為了保持兼容性,可以將ROM芯片中的部分必要的原始數(shù)據(jù),例如頭標(biāo)區(qū)、初始化模塊,仍然通過映射到存儲器空間的容量較小的擴(kuò)展ROM提供;因?yàn)镻CI總線的擴(kuò)展ROM主要是使用其內(nèi)存映象,計(jì)算機(jī)系統(tǒng)在復(fù)制完ROM芯片中的原始數(shù)據(jù)后就會將實(shí)際的擴(kuò)展ROM與存儲器空間隔離,而I/O端口在計(jì)算機(jī)初始化過程中和操作系統(tǒng)啟動后都是可以存取的,所以可以將ROM芯片中的大部分原始數(shù)據(jù)改成通過映射到I/O空間的I/O端口提供;參考CMOS RAM通過地址/索引端口70H和數(shù)據(jù)端口71H存取幾十個數(shù)據(jù)單元的方法,本發(fā)明將線性編址的ROM芯片映射到一組I/O端口中,通過控制端口設(shè)置起始地址和數(shù)據(jù)端口存取數(shù)據(jù)并自動增量地址的方式,支持大容量的擴(kuò)展ROM。
實(shí)現(xiàn)本發(fā)明的技術(shù)方案包括下述四個方面1、擴(kuò)展ROM的硬件接口方面,增加一個可預(yù)置計(jì)數(shù)器和一組用于擴(kuò)展ROM的I/O端口,I/O端口包括控制端口和數(shù)據(jù)端口,控制端口主要用于向可預(yù)置計(jì)數(shù)器中預(yù)置將要存取的數(shù)據(jù)塊的起始地址,數(shù)據(jù)端口用于數(shù)據(jù)存取,并在存取完一個數(shù)據(jù)后,向可預(yù)置計(jì)數(shù)器輸出計(jì)數(shù)信號,使之計(jì)數(shù)以指向下一個數(shù)據(jù)的地址;2、ROM芯片的空間布局方面,將擴(kuò)展ROM的ROM芯片(1)分成基本塊(11)和擴(kuò)展塊(12),在基本塊中具有一個標(biāo)準(zhǔn)的擴(kuò)展ROM的ROM芯片中所必須有的特征和內(nèi)容,擴(kuò)展ROM的頭標(biāo)區(qū)和必要的初始化模塊均設(shè)置在基本塊中,頭標(biāo)區(qū)中的ROM容量指示字節(jié)僅指示基本塊的大小而不包括擴(kuò)展塊;3、基本塊(11)的存取方面,基本塊可以被映射到計(jì)算機(jī)系統(tǒng)的存儲器空間(2),從而可以按已有的擴(kuò)展ROM的處理方式被計(jì)算機(jī)系統(tǒng)檢測到并初始化,計(jì)算機(jī)系統(tǒng)所檢測到的擴(kuò)展ROM僅僅包括該基本塊;4、擴(kuò)展塊(12)的存取方面,擴(kuò)展塊以及整個ROM芯片可以被映射到計(jì)算機(jī)系統(tǒng)的I/O空間(3)的一組I/O端口中,基本塊中的初始化模塊和其它程序可以根據(jù)需要,向控制端口置入所要存取的數(shù)據(jù)塊在ROM芯片中的起始地址,然后從數(shù)據(jù)端口中不斷地存取數(shù)據(jù),直到存取完所要的數(shù)據(jù)塊,每存取完一個數(shù)據(jù),則可預(yù)置計(jì)數(shù)器自動增量,以指向下一個數(shù)據(jù)的地址。
上述方案的擴(kuò)展ROM的硬件接口方面,進(jìn)一步還具有一組數(shù)據(jù)選擇器和邏輯或門,數(shù)據(jù)選擇器使得在通過I/O端口存取擴(kuò)展ROM時向ROM芯片輸出可預(yù)置計(jì)數(shù)器的計(jì)數(shù)值作為存取地址,而在通過存儲器空間存取擴(kuò)展ROM的基本塊時向ROM芯片輸出存取時所指定的基本塊中的相對地址;邏輯或門將來自I/O端口的存取控制信號與來自存儲器空間的存取控制信號進(jìn)行或操作,從而使擴(kuò)展ROM的ROM芯片既能接受來自I/O端口的存取要求,又能接受來自存儲器空間的存取要求。
基于上述方案,對于不大于96KB容量的空閑上位內(nèi)存,擴(kuò)展ROM只占用相當(dāng)于基本塊大小的區(qū)域,按當(dāng)前擴(kuò)展ROM規(guī)范,ROM芯片中的基本塊的容量最小可到2KB,對于一般的擴(kuò)展ROM應(yīng)用,應(yīng)該可以放得下擴(kuò)展ROM的頭標(biāo)區(qū)和初始化模塊;對于最大為65536個I/O端口地址的I/O空間,擴(kuò)展ROM最多占用兩個I/O端口地址,分別用于控制端口和數(shù)據(jù)端口。雖然該方案僅用了有限的資源,但在理論上,該方案所能支持的擴(kuò)展ROM的容量(也就是ROM芯片的容量)并沒有任何直接的限制。
上述方案中用于擴(kuò)展ROM的I/O端口,在不需要支持ROM芯片的在線擦寫時,可以將只讀的數(shù)據(jù)端口與只寫的控制端口合成一個雙向端口,即只占用一個I/O端口地址,進(jìn)一步減少對系統(tǒng)資源的占用。
在具體實(shí)施方面,可以使ROM芯片中的基本塊盡可能地小,而使可預(yù)置計(jì)數(shù)器提供相當(dāng)于整個ROM芯片范圍的地址,使I/O端口能夠存取到整個ROM芯片。也就是,從控制端口置入所需要的數(shù)據(jù)在ROM芯片中的相對起始地址后,就可以通過數(shù)據(jù)端口存取到基本塊和擴(kuò)展塊中的任何數(shù)據(jù)。對于采用X86及兼容系列CPU的PC機(jī),在通過I/O數(shù)據(jù)端口讀取ROM中的數(shù)據(jù)時,可以使用下述匯編指令序列(以16位指令及地址為例)“mov di,數(shù)據(jù)緩沖區(qū)的起始地址”,;指定將讀出的數(shù)據(jù)存放在這塊內(nèi)存中“mov cx,要讀取數(shù)據(jù)的字節(jié)數(shù)”,;指定要讀取這么多數(shù)據(jù)“mov dx,控制I/O端口的地址”,“mov ax,要讀取數(shù)據(jù)的起始地址”,;指定要讀取數(shù)據(jù)在ROM中的起始地址“out dx,ax”,;置入要讀取數(shù)據(jù)在ROM中的起始地址“mov dx,數(shù)據(jù)I/O端口的地址”,“cld”,“rep insb”。;讓CPU從數(shù)據(jù)端口中自動連續(xù)讀取上述指令序列還可以優(yōu)化,例如一次讀取4字節(jié)而不是1字節(jié),以提高存取速度。在PCI總線中,擴(kuò)展ROM數(shù)據(jù)的存取速度主要受限于ROM芯片本身,所以通過數(shù)據(jù)端口存取ROM數(shù)據(jù)的速度并不因此而低于已有的將擴(kuò)展ROM映射到存儲器空間再存取數(shù)據(jù)的方式。
上述技術(shù)方案中的硬件接口部分可以進(jìn)行集成,以降低批量成本,最終構(gòu)成一個基于本發(fā)明技術(shù)方案的支持大容量擴(kuò)展ROM的PCI總線接口芯片,或集成于支持?jǐn)U展ROM的其它設(shè)備的控制芯片中,例如集成于顯卡或SCSI卡的控制芯片中。
基于本發(fā)明的技術(shù)方案,使得大容量的擴(kuò)展ROM能夠應(yīng)用于上位內(nèi)存有限的PC機(jī),同時避免了分頁存取的擴(kuò)容方法的兼容性問題,在基本不降低運(yùn)行效率、不增加硬件成本和軟件開銷的前提下,實(shí)現(xiàn)了擴(kuò)展ROM的擴(kuò)容。
下面結(jié)合附圖對本發(fā)明作進(jìn)一步的說明。
圖1為當(dāng)前PC機(jī)的存儲器空間的分布示意圖和發(fā)展趨勢。
圖2為本發(fā)明技術(shù)方案的空間映射關(guān)系圖。
圖3為本發(fā)明技術(shù)方案的相關(guān)硬件部分的電路框圖。
圖4為基于本發(fā)明技術(shù)方案的PCI總線接口芯片在擴(kuò)展ROM卡中應(yīng)用的原理圖。
見圖2,擴(kuò)展ROM的ROM芯片(1)被分成基本塊(11)和擴(kuò)展塊(12)。基本塊與已有的未擴(kuò)容的擴(kuò)展ROM一樣可以被映射到存儲器空間(2)中,在存儲器空間中只能存取到基本塊,擴(kuò)展ROM映象是將基本塊的數(shù)據(jù)復(fù)制到上位內(nèi)存后的內(nèi)存映象,擴(kuò)展ROM在存儲器空間中只占用相當(dāng)于基本塊大小的上位內(nèi)存區(qū)域。整個ROM芯片可以被映射到I/O空間(3)的一組I/O端口中,在I/O空間中通過控制端口和數(shù)據(jù)端口的配合使用可以存取到整個ROM芯片,擴(kuò)展ROM在I/O空間中只占用兩個端口地址,從I/O空間的角度看,擴(kuò)展ROM像這樣一個線性空間具有相當(dāng)于ROM芯片容量的深度,只有相當(dāng)于I/O數(shù)據(jù)端口寬度的寬度,并且寬度不受深度的影響,所以可以支持大容量的擴(kuò)展ROM。
見圖3,這是與本發(fā)明相關(guān)的硬件部分的電路框圖,包括擴(kuò)展ROM的部分接口電路和存儲器即ROM芯片(1),但因?yàn)楹喕纯紤]ROM芯片的在線擦寫,另外負(fù)責(zé)協(xié)調(diào)各部件工作的PCI總線狀態(tài)機(jī)在本圖中也被略去。命令譯碼(8A)對PCI總線的輸入進(jìn)行命令譯碼,產(chǎn)生存儲器讀控制信號(MEM-RD)、I/O端口讀控制信號(IO-RD)、I/O端口寫控制信號(IO-WR)。內(nèi)部總線(8M)對PCI總線的信號進(jìn)行轉(zhuǎn)換,產(chǎn)生地址總線(A0-An)、數(shù)據(jù)總線(D0-Dn)。該圖中,可預(yù)置計(jì)數(shù)器(8K)可以參考通用數(shù)字電路74LS197的原理;比較器(8C)和(8G)可以參考通用數(shù)字電路74LS688的原理;數(shù)據(jù)選擇器(8L)可以參考通用數(shù)字電路74LS157的原理;延時器(8J)可以是一組觸發(fā)器,也可以由一個狀態(tài)機(jī)實(shí)現(xiàn),用于將擴(kuò)展ROM的數(shù)據(jù)端口讀控制信號(PORT-RD)的后沿轉(zhuǎn)換為地址增量計(jì)數(shù)信號(COUNT),也就是在通過數(shù)據(jù)端口存取完一個數(shù)據(jù)后輸出地址增量計(jì)數(shù)信號(COUNT)。
見圖3,當(dāng)計(jì)算機(jī)系統(tǒng)從存儲器空間向該擴(kuò)展ROM發(fā)出讀數(shù)據(jù)要求時,比較器(8G)將地址總線的地址(A0-An)與配置空間中的擴(kuò)展ROM基址(8F)相比較,輸出擴(kuò)展ROM基址匹配信號(ROM),與命令譯碼(8A)輸出的存儲器讀控制信號(MEM-RD)一起送至與門(8H)的兩個輸入端,與門(8H)輸出擴(kuò)展ROM讀控制信號(ROM-RD),經(jīng)或門(8I)向ROM芯片(1)輸出讀控制信號(READ);而此時命令譯碼(8A)輸出的I/O端口讀控制信號(IO-RD)無效,所以與門(8D)輸出的擴(kuò)展ROM的數(shù)據(jù)端口讀控制信號(PORT-RD)無效,所以數(shù)據(jù)選擇器(8L)選擇來自地址總線的地址(A0-An)作為ROM芯片(1)的地址信號(ADDR),即計(jì)算機(jī)系統(tǒng)指定的相對于ROM芯片基本塊的存取地址;ROM芯片(1)在接收到讀控制信號(READ)時,將指定地址的數(shù)據(jù)輸出到數(shù)據(jù)總線(D0-Dn)上,并被返回給發(fā)出存取要求的計(jì)算機(jī)系統(tǒng)。
見圖3,當(dāng)計(jì)算機(jī)系統(tǒng)從I/O空間向該擴(kuò)展ROM發(fā)出預(yù)置起始地址的要求時,比較器(8C)將地址總線的地址(A0-An)與配置空間中的I/O基址(8B)相比較,輸出擴(kuò)展ROM的I/O端口基址匹配信號(PORT),與命令譯碼(8A)輸出的I/O端口寫控制信號(IO-WR)一起送至與門(8E)的兩個輸入端,與門(8E)輸出擴(kuò)展ROM的控制端口的寫控制信號即地址預(yù)置信號(PRESET),可預(yù)置計(jì)數(shù)器(8K)在接收到地址預(yù)置信號(PRESET)時,將來自數(shù)據(jù)總線的數(shù)據(jù)(DO-Dn)即起始地址置入計(jì)數(shù)器,作為此后計(jì)數(shù)的起始計(jì)數(shù)值。
見圖3,當(dāng)計(jì)算機(jī)系統(tǒng)從I/O空間向該擴(kuò)展ROM發(fā)出讀數(shù)據(jù)的要求時,比較器(8C)將地址總線的地址(A0-An)與配置空間中的I/O基址(8B)相比較,輸出擴(kuò)展ROM的I/O端口基址匹配信號(PORT),與命令譯碼(8A)輸出的I/O端口讀控制信號(IO-RD)一起送至與門(8D)的兩個輸入端,與門(8D)輸出擴(kuò)展ROM的數(shù)據(jù)端口讀控制信號(PORT-RD),經(jīng)或門(8I)向ROM芯片(1)輸出讀控制信號(READ);而此時擴(kuò)展ROM的數(shù)據(jù)端口讀控制信號(PORT-RD)為有效,所以數(shù)據(jù)選擇器(8L)選擇來自可預(yù)置計(jì)數(shù)器(8K)輸出的當(dāng)前計(jì)數(shù)值(P-ADDR)作為ROM芯片(1)的地址信號(ADDR);ROM芯片(1)在接收到讀控制信號(READ)時,將指定地址的數(shù)據(jù)輸出到數(shù)據(jù)總線(D0-Dn)上,并被返回給發(fā)出存取要求的計(jì)算機(jī)系統(tǒng);而延時器(8J)在數(shù)據(jù)讀出后將擴(kuò)展ROM的數(shù)據(jù)端口讀控制信號(PORT-RD)的后沿轉(zhuǎn)換為地址增量計(jì)數(shù)信號(COUNT),該信號使可預(yù)置計(jì)數(shù)器(8K)計(jì)數(shù)一次,輸出的計(jì)數(shù)值(P-ADDR)增加為下一個數(shù)據(jù)的地址。
見圖3,當(dāng)計(jì)算機(jī)系統(tǒng)從I/O空間向該擴(kuò)展ROM發(fā)出下一個讀數(shù)據(jù)的要求時,數(shù)據(jù)選擇器(8L)仍然選擇可預(yù)置計(jì)數(shù)器(8K)輸出的當(dāng)前計(jì)數(shù)值(P-ADDR)作為ROM芯片(1)的地址信號(ADDR),而該計(jì)數(shù)值已經(jīng)指向下一個數(shù)據(jù)的地址,所以在ROM芯片(1)接收到同樣的讀控制信號(READ)時,將返回下一個地址的數(shù)據(jù),隨后可預(yù)置計(jì)數(shù)器(8K)再計(jì)數(shù)一次,以指向再下一個數(shù)據(jù)的地址。如此操作,就可以存取到ROM中的所有數(shù)據(jù)。需要時還可以重新設(shè)置起始地址,以指向ROM芯片中的另一個將要存取的數(shù)據(jù)塊。
見圖4,這是一個擴(kuò)展ROM卡的主要部分的原理圖。擴(kuò)展ROM卡(7)具有基于本發(fā)明技術(shù)方案的支持大容量擴(kuò)展ROM的PCI總線接口芯片(8)和ROM芯片(1),并通過PCI總線接口芯片(8)連接到計(jì)算機(jī)的PCI總線(6)上,PCI總線接口芯片(8)通過8位數(shù)據(jù)總線、16位地址總線和ROM讀控制信號線與ROM芯片(1)相連接。PCI總線接口芯片(8)是型號為WCHC0601的集成電路,ROM芯片(1)是型號為27C512的集成電路。該接口芯片集成了本發(fā)明技術(shù)方案所要求的硬件接口部分,該接口芯片支持64KB容量的擴(kuò)展ROM,但僅映射不大于4KB的基本塊到上位內(nèi)存中,另外的擴(kuò)展塊則通過一組I/O端口即控制I/O端口和數(shù)據(jù)I/O端口的配合使用來存取,I/O端口地址是由配置空間中的I/O基址寄存器確定的,所以可以由計(jì)算機(jī)系統(tǒng)自動分配而不會引起沖突;該接口芯片支持ROM芯片的在線擦寫,所以數(shù)據(jù)I/O端口是雙向端口,無論是從數(shù)據(jù)I/O端口讀取數(shù)據(jù)后還是向數(shù)據(jù)I/O端口寫入數(shù)據(jù)后,接口芯片內(nèi)部的可預(yù)置計(jì)數(shù)器都自動計(jì)數(shù)一次,以指向下一個數(shù)據(jù)的地址;該接口芯片內(nèi)部的數(shù)據(jù)總線是32位寬度,所以一次操作就能夠預(yù)置起始地址,而不需要在8位數(shù)據(jù)總線上將16位地址分成兩次預(yù)置。
以硬盤還原卡的64KB容量的擴(kuò)展ROM為例,其初始化模塊比較簡單,主要是攔截系統(tǒng)的INT19H中斷,使得在計(jì)算機(jī)引導(dǎo)操作系統(tǒng)前擴(kuò)展ROM能夠重新獲得控制權(quán),以便顯示操控界面和進(jìn)行其它準(zhǔn)備工作。按已有的處理方式,計(jì)算機(jī)系統(tǒng)總是將該擴(kuò)展ROM的所有數(shù)據(jù)復(fù)制到有限的上位內(nèi)存中,占用上位內(nèi)存62KB到64KB(初始化模塊可以被主動釋放掉),擴(kuò)展ROM通過初始化模塊攔截INT19H,而在計(jì)算機(jī)引導(dǎo)操作系統(tǒng)前獲得控制權(quán),因?yàn)榇藭r的內(nèi)存映象是寫保護(hù)的,所以要將擴(kuò)展ROM的內(nèi)存映象復(fù)制到常規(guī)內(nèi)存中,再顯示操控界面和進(jìn)行其它準(zhǔn)備工作。而使用本發(fā)明的方法,將擴(kuò)展ROM分成2KB的基本塊和62KB的擴(kuò)展塊,初始化前只要復(fù)制較小的基本塊到上位內(nèi)存中,占用上位內(nèi)存2KB,擴(kuò)展ROM通過初始化模塊攔截INT19H,而在計(jì)算機(jī)引導(dǎo)操作系統(tǒng)前獲得控制權(quán),然后通過I/O端口將擴(kuò)展ROM中的數(shù)據(jù)復(fù)制到常規(guī)內(nèi)存中,再顯示操控界面和進(jìn)行其它準(zhǔn)備工作。就這個例子而言,本發(fā)明的方法沒有影響到硬盤還原卡的原有功能,但減少了對上位內(nèi)存的占用,使得硬盤還原卡在某些無法直接使用64KB及以上容量的擴(kuò)展ROM的PC機(jī)上也能夠正常工作,實(shí)際上,因?yàn)槭∪チ藘?nèi)存映象到常規(guī)內(nèi)存的數(shù)據(jù)復(fù)制過程,所以還提高了運(yùn)行速度。上述只是本發(fā)明實(shí)際應(yīng)用的個例,但實(shí)施本發(fā)明并不限于上述個例,在參考了本發(fā)明所指出的總體技術(shù)方案后,具體實(shí)施上可以有局部的調(diào)整或者變化。
權(quán)利要求
1.基于PCI總線的擴(kuò)展ROM的一種擴(kuò)容方法,其特征是擴(kuò)展ROM的ROM芯片在空間布局上被分成基本塊和擴(kuò)展塊;基本塊被映射到計(jì)算機(jī)系統(tǒng)的存儲器空間中;擴(kuò)展塊被映射到計(jì)算機(jī)系統(tǒng)的I/O空間的一組用于擴(kuò)展ROM的I/O端口中。
2.根據(jù)權(quán)利要求1所述的擴(kuò)容方法,其特征是基本塊中具有一個標(biāo)準(zhǔn)的擴(kuò)展ROM的ROM芯片中所必須有的特征和內(nèi)容。
3.根據(jù)權(quán)利要求2所述的擴(kuò)容方法,其特征是基本塊中具有擴(kuò)展ROM的頭標(biāo)區(qū)和初始化模塊,頭標(biāo)區(qū)中的ROM容量指示字節(jié)僅指示基本塊的大小而不包括擴(kuò)展塊。
4.根據(jù)權(quán)利要求1所述的擴(kuò)容方法,其特征是基本塊可以按已有的擴(kuò)展ROM的處理方式被計(jì)算機(jī)系統(tǒng)檢測到并初始化,計(jì)算機(jī)系統(tǒng)所檢測到的擴(kuò)展ROM僅包括基本塊。
5.根據(jù)權(quán)利要求1所述的擴(kuò)容方法,其特征是用于擴(kuò)展ROM的I/O端包括一個控制端口和一個數(shù)據(jù)端口。
6.根據(jù)權(quán)利要求5所述的擴(kuò)容方法,其特征是存取擴(kuò)展塊中數(shù)據(jù)的步驟包括下述操作序列,首先向控制端口置入所要存取的數(shù)據(jù)塊在ROM芯片中的起始地址,接著通過數(shù)據(jù)端口存取一個數(shù)據(jù),即處于起始地址位置的數(shù)據(jù),如果需要處于起始地址的下一個地址的數(shù)據(jù),就再次通過數(shù)據(jù)端口存取一個數(shù)據(jù),直到通過數(shù)據(jù)端口存取完所要的數(shù)據(jù)塊。
7.根據(jù)權(quán)利要求1或6所述的擴(kuò)容方法,其特征是基本塊同時具有擴(kuò)展塊所具有的特性,即擴(kuò)展塊的映射方式和/或數(shù)據(jù)存取方式/步驟適用于整個ROM芯片。
8.支持?jǐn)U展ROM的一種PCI總線接口芯片,其特征是PCI總線接口芯片內(nèi)部具有擴(kuò)展ROM基址寄存器及比較器、I/O基址寄存器及比較器、地址總線、數(shù)據(jù)總線、可預(yù)置計(jì)數(shù)器、邏輯或門、數(shù)據(jù)選擇器;擴(kuò)展ROM基址寄存器及比較器用于確定一個擴(kuò)展ROM空間,I/O基址寄存器及比較器用于確定一組I/O端口,包括一個控制端口和一個數(shù)據(jù)端口,可預(yù)置計(jì)數(shù)器用于預(yù)置起始地址和在存取完數(shù)據(jù)后自動將地址增量,邏輯或門用于使外部ROM芯片既能接受來自存儲器空間的存取要求,又能接受來自I/O空間的存取要求,數(shù)據(jù)選擇器用于在存儲器空間存取時選擇來自地址總線的地址作為外部ROM芯片的存取地址,而在I/O空間存取時選擇來自可預(yù)置計(jì)數(shù)器的計(jì)數(shù)值作為外部ROM芯片的存取地址;擴(kuò)展ROM空間的存取控制信號與數(shù)據(jù)端口的存取控制信號分別送到邏輯或門的兩個輸入端,邏輯或門輸出用于外部ROM芯片的存取控制信號,控制端口的寫控制信號送到可預(yù)置計(jì)數(shù)器的預(yù)置控制輸入端,數(shù)據(jù)端口的存取完成信號送到可預(yù)置計(jì)數(shù)器的計(jì)數(shù)脈沖輸入端,可預(yù)置計(jì)數(shù)器的預(yù)置數(shù)據(jù)輸入端連接到數(shù)據(jù)總線,可預(yù)置計(jì)數(shù)器的計(jì)數(shù)值輸出數(shù)據(jù)送到數(shù)據(jù)選擇器的一個數(shù)據(jù)輸入端,數(shù)據(jù)選擇器的另一個數(shù)據(jù)輸入端連接到地址總線,數(shù)據(jù)選擇器輸出用于外部ROM芯片的存取地址信號。
9.根據(jù)權(quán)利要求8所述的PCI總線接口芯片,其特征是每次從數(shù)據(jù)端口存取完一個數(shù)據(jù),可預(yù)置計(jì)數(shù)器就計(jì)數(shù)一次,計(jì)數(shù)值增量以指向下一個數(shù)據(jù)的地址。
10.根據(jù)權(quán)利要求8所述的PCI總線接口芯片,其特征是PCI總線接口芯片所連接的外部ROM芯片在空間布局上被分成基本塊和擴(kuò)展塊;PCI總線接口芯片將外部ROM芯片的基本塊映射到計(jì)算機(jī)系統(tǒng)的存儲器空間中,將整個ROM芯片或其擴(kuò)展塊映射到計(jì)算機(jī)系統(tǒng)的I/O空間的一組用于擴(kuò)展ROM的I/O端口中;也就是,對于以PCI總線接口芯片和外部ROM芯片為主構(gòu)成的擴(kuò)展ROM,計(jì)算機(jī)系統(tǒng)從存儲器空間中只能存取到外部ROM芯片的基本塊,而外部ROM芯片的擴(kuò)展塊必須從I/O空間的一組用于擴(kuò)展ROM的I/O端口中進(jìn)行存取。
全文摘要
本發(fā)明是計(jì)算機(jī)PCI總線的擴(kuò)展ROM的一種擴(kuò)容方法及接口芯片。將擴(kuò)展ROM的ROM芯片(1)分成基本塊(11)和擴(kuò)展塊(12),基本塊中具有一個標(biāo)準(zhǔn)的擴(kuò)展ROM的ROM芯片中所必須有的特征和內(nèi)容。基本塊較小,可以被映射到存儲器空間(2)中,所以仍然按已有的擴(kuò)展ROM的處理方式被計(jì)算機(jī)系統(tǒng)檢測到并初始化。擴(kuò)展塊以及整個ROM芯片可以被映射到I/O空間(3)的一組I/O端口中,通過從控制端口設(shè)置起始地址和從數(shù)據(jù)端口存取數(shù)據(jù)并自動增量地址的方式,存取擴(kuò)展塊以及整個ROM芯片中的數(shù)據(jù),從而支持遠(yuǎn)大于基本塊大小的大容量的ROM芯片。
文檔編號G06F12/06GK1442790SQ0213795
公開日2003年9月17日 申請日期2002年7月15日 優(yōu)先權(quán)日2002年7月15日
發(fā)明者尹啟鳳 申請人:尹啟鳳