§第七節(jié) 8086的總線請求和保持
本節(jié)內(nèi)容:
總線主設(shè)備的概念
最小模式下的總線請求與保持
最大模式下的總線請求與保持
§2.7.1 總線主設(shè)備的概念
總線是一組能為多個部件分時共享的公共信息傳送線路,可以分時地接受與發(fā)送各部件的信息。簡單地說,它是一組由多個部件分時共享的傳送線路。
由于在計算機(jī)系統(tǒng)中的各級硬件中都廣泛應(yīng)用總線的概念,可按其任務(wù)分為四種。
(1)CPU內(nèi)部總線。這是一組數(shù)據(jù)總線,用來連接CPU內(nèi)的各個寄存器與算術(shù)邏輯運(yùn)算部件。在微型計算機(jī)系統(tǒng)中,CPU內(nèi)部總線也就是芯片內(nèi)的總線。
(2)部件內(nèi)總線。在計算機(jī)中按功能模塊制作成插件,在插件上也常采用總線結(jié)構(gòu)連接有關(guān)芯片。這一級是芯片的總線。
(3)系統(tǒng)總線。用來在系統(tǒng)內(nèi)連接各大組成部件,如CPU、主存,通過各接口連接各I/O設(shè)備,因此它是連接整機(jī)系統(tǒng)的基礎(chǔ)。系統(tǒng)總線包含地址線、數(shù)據(jù)線和控制信號線。
(4)外總線。這是系統(tǒng)與其它設(shè)備間或系統(tǒng)間的通訊總線。
總線本身的實體是一組傳送線,但系統(tǒng)總線還派生出一系列相關(guān)邏輯,如總線控制權(quán)的申請、批準(zhǔn)與轉(zhuǎn)移,總線狀態(tài)信號的產(chǎn)生,總線傳送操作的時序控制,讀/寫操作控制等。這些邏輯或在CPU中,或設(shè)置專門的總線控制器。因此,不少人在分析設(shè)計計算機(jī)系統(tǒng)時,傾向于將總線看成一種獨(dú)立的功能模塊。
總線在傳送數(shù)據(jù)格式上可采用串行傳送或并行傳送,能一次并行傳送的數(shù)據(jù)位數(shù)被定義為總線的數(shù)據(jù)通路寬度,而單位時間能傳送的數(shù)據(jù)量被定義為總線的數(shù)據(jù)傳輸率。
根據(jù)總線可能的傳送方向,總線可分為單向總線與雙向總線兩種。單向總線能使掛在總線上的一些部件將信息有選擇地傳向另一些部件,而雙向總線則能使掛在總線上的任何部件或設(shè)備,都可以從總線上有選擇地接收其他設(shè)備的信息,或通過總線有選擇地將信息發(fā)送給其他設(shè)備。
§2.7.2 最小模式下的總線請求和保持
當(dāng)一個系統(tǒng)具有多個總線主模塊時,CPU以外的其他總線主模塊為了獲得對總線的控制,需要向CPU發(fā)出使用總線的請求信號;而CPU得到請求之后,如果同意讓出總線,就要向請求使用總線的主模塊發(fā)出應(yīng)答信號。8086/8088為此提供了一對專用于最小模式下的總線控制聯(lián)絡(luò)信號HOLD和HLDA。
HOLD叫總線保持請求信號,是由其他總線主模塊發(fā)給CPU的。當(dāng)某個總線主模塊企圖使用系統(tǒng)總線時,便發(fā)出高電平的HOLD信號,然后等待CPU發(fā)來總線保持回答信號HLDA。
在每個時鐘脈沖的上升沿處,CPU會對HOLD引腳上的信號進(jìn)行檢測。如果檢測到HOLD處于高電平狀態(tài),并且允許讓出總線,那么在總線周期的T4狀態(tài)或者空閑狀態(tài)T1之后的下一個時鐘周期,CPU會發(fā)出HLDA信號,從而CPU便將總線讓給發(fā)出總線保持請求的設(shè)備,知道此后這個發(fā)出總線保持請求的設(shè)備又將HOLD信號變?yōu)榈碗娖?,CPU才又收回總線控制權(quán)。
8086/8088CPU一旦讓出總線控制權(quán),便使地址/數(shù)據(jù)引腳、地址/狀態(tài)引腳以及控制信號引腳RD、WR、INTA、M/IO、DEN及DT/R都處于浮空狀態(tài),這樣,CPU和數(shù)據(jù)總線、地址總線以及上述控制信號之間就暫時沒有關(guān)系了,不過,ALE信號引腳不浮空。
圖2-32表示總線保持請求和保持響應(yīng)操作的時序圖。

在考慮總線保持請求和保持響應(yīng)操作過程時,有三個問題需要注意:
一是外部的總線主模塊將HOLD信號變?yōu)榈碗娖胶?,CPU要在下一個時鐘周期的上升沿時才檢測到,隨后CPU在此時鐘周期(假定正好時鐘周期為T4或者T1)的下降沿處將HLDA信號升為高電平。CPU在測得HOLD信號時,假如并不是處在T4或者T1狀態(tài),那么可能會延遲幾個時鐘周期,等到T4狀態(tài)或者T1狀態(tài)時才發(fā)出HLDA信號。
二是HLOD請求信號直接影響8086/8088總線接口部件(BIU)的工作,但是對執(zhí)行部件(EU)的影響只是間接的。當(dāng)CPU使HLDA升為高電平時,盡管CPU所有的三態(tài)引腳進(jìn)入浮空狀態(tài),但是執(zhí)行部件將繼續(xù)執(zhí)行已經(jīng)進(jìn)入CPU指令隊列中的指令,直到遇到一條需要使用總線的指令時,執(zhí)行部件才不得不停下來,當(dāng)然,指令隊列中的指令執(zhí)行完后,執(zhí)行部件也會停下來。由此可見,CPU和其他獲得總線控制權(quán)的主模塊之間在操作上有一段小小的重疊。
三是當(dāng)發(fā)出總線保持請求的設(shè)備將HOLD信號變?yōu)榈碗娖綍r,CPU也將HLDA信號降為低電平,但是,CPU不會馬上重新驅(qū)動地址總線、數(shù)據(jù)總線和控制線,而是使這些引腳繼續(xù)浮空,直到CPU需要執(zhí)行一個總線操作時,才結(jié)束這些引腳的浮空狀態(tài)。這樣一來,就可能出現(xiàn)這樣的情況,在某一小段時間中,沒有任何一個模塊在驅(qū)動總線。為了防止在總線控制的切換期間,由于沒有任何模塊的驅(qū)動而造成控制線電平漂移到最小電平以下,所以,在控制線和電源之間需要連接一個提拉電阻。
§2.7.3 最大模式下的總線請求和保持
在最大模式下,8086/8088也提供了總線主模塊之間傳遞總線控制權(quán)的手段。CPU以外的其他總線主模塊包括協(xié)處理器、DMA控制器,它們可以連接在局部總線上,去共享CPU和系統(tǒng)總線之間的接口,即共享地址鎖存器、數(shù)據(jù)總線收發(fā)器、總線控制器,當(dāng)然也共享系統(tǒng)總線。與最小模式下不同的是,在最大模式下,總線控制信號不再是HOLD和HLDA,而是將這兩個信號引腳變成能更加完善的兩個雙向信號引腳RQ/GT0和RQ/GT1,它們都稱為總線請求/總線允許信號端,可以分別連接兩個其他的總線主模塊。
RQ/GT0和RQ/GT1有著完全相同的功能,但是RQ/GT0比RQ/GT1的優(yōu)先級要高。也就是說,如果RQ/GT0和RQ/GT1都連接了其他總線主模塊,當(dāng)兩條引腳上同時出現(xiàn)總線請求時,CPU會在RQ/GT0先發(fā)出允許信號,等到CPU再次得到總線控制權(quán)時,才響應(yīng)RQ/GT1引腳上的請求。不過,如果CPU已經(jīng)把總線控制權(quán)讓給連接RQ/GT1的主模塊,此時又在RQ/GT0引腳上收到另一個主模塊的總線請求,那么,要等前一個主模塊釋放總線后,CPU收回了總線控制權(quán),才會去響應(yīng)RQ/GT0引腳上的總線請求??梢奀PU對總線請求的處理并不是像對中斷請求的處理那樣允許“嵌套”。
圖2-33表示了8086、8087和8089通過RQ/GT0、RQ/GT1的連接關(guān)系。

圖2-34表示了最大模式中,CPU以外的其他總線主模塊請求總線使用權(quán)和8086/8088允許其他主模塊獲得總線使用權(quán)的時序。

對最大模式下的總線請求/允許/釋放時序,我們作如下說明:
?、佼?dāng)CPU以外的一個總線主模塊要求使用系統(tǒng)總線時,從RQ/GT(即RQ/GT0或者RQ/GT1,以下類同)線上往CPU發(fā)一個負(fù)脈沖,寬度為一個時鐘周期。
?、贑PU在每個時鐘周期的上升沿處對RQ/GT引腳進(jìn)行檢測,如果測得外部有一個負(fù)脈沖,則在下個T4狀態(tài)或T1狀態(tài)從同一引腳RQ/GT上往請求總線使用權(quán)的主模塊發(fā)一個允許脈沖,這個允許脈沖的寬度也相當(dāng)于一個時鐘周期。不過要注意,總線請求負(fù)脈沖是外部發(fā)給CPU的,而總線允許脈沖是由CPU發(fā)給其他外部主模塊的。CPU一旦發(fā)出了響應(yīng)脈沖,各地址/數(shù)據(jù)引腳、地址/狀態(tài)引腳以及RD、LOCK、S2、S1、S0、BHE/S7便處于高阻狀態(tài),于是在邏輯上暫時和總線斷開。
?、蹍f(xié)處理器或其他總線主模塊收到CPU發(fā)出的脈沖后,便得到了總線控制權(quán),于是它可以對總線占用一個或幾個總線周期。
?、墚?dāng)外部主模塊準(zhǔn)備釋放總線時,便在RQ/GT線上往CPU發(fā)一個釋放脈沖,釋放脈沖的寬度也為一個時鐘周期。CPU檢測到釋放脈沖后,在下一個時鐘周期便收回了總線控制權(quán)。
從時序說明中,可以見到,每次總線控制權(quán)的切換都是通過三個環(huán)節(jié)來實現(xiàn)的,即協(xié)處理器或其他主模塊發(fā)請求脈沖,CPU發(fā)允許脈沖,外部主模塊用完成總線后發(fā)釋放脈沖。這些脈沖都是負(fù)脈沖,但并不在一個方向上傳輸。
另外,在每次總線控制權(quán)改變后,總線上必須有一個空閑周期。即在一個時鐘周期中,沒有任何一個主模塊使用總線。
實際上,在外部總線主模塊發(fā)出總線請求時,還有一些附帶條件對CPU響應(yīng)總線請求作出限制,這就是:
?、偃绻鸆PU正在訪問存儲器或外設(shè)端口,那么,總線請求脈沖必須在T2之前到達(dá)才有效,否則,外部主模塊必須重發(fā)請求脈沖。
?、谌绻鸆PU正在用低8位數(shù)據(jù)線傳送數(shù)據(jù),則總線請求脈沖將無效。等到數(shù)據(jù)傳送結(jié)束,外部主模塊重發(fā)請求脈沖時,CPU才響應(yīng)。
③如果CPU正在執(zhí)行中斷響應(yīng)的第一個總線周期,則總線請求無效。
?、苋绻鸆PU正在執(zhí)行總線封鎖指令,則總線請求無效。
所以,只有在總線空閑時遇到總線請求的情況下,CPU才會在下一個時鐘周期發(fā)出允許信號。
與最小模式下執(zhí)行總線保持請求/保持響應(yīng)操作時的情況一樣,8086/8088通過RQ/GT線發(fā)出響應(yīng)負(fù)脈沖,并且釋放總線后,CPU仍然可以執(zhí)行已經(jīng)進(jìn)入指令隊列中的指令,直到需要請求一個總線周期為止。另外CPU收到其他主模塊發(fā)出的釋放脈沖后,也并不是立即驅(qū)動總線。
在CPU內(nèi)部,RQ/GT0和RQ/GT1都配備了提拉電阻和電源相連,如果系統(tǒng)中未用這兩個引腳,便可浮空。
§2.8 8088與8086的比較
|
兼容性
|
軟件完全兼容
|
|
|
應(yīng)用
|
Intel MultiBus多總線微機(jī) | IBM PC、PC/XT;長城0520 |
|
主
要 差 異 |
16位CPU 16位內(nèi)部結(jié)構(gòu) 16位外部數(shù)據(jù)總線 |
準(zhǔn)16位CPU 16位內(nèi)部結(jié)構(gòu) 8位外部數(shù)據(jù)總線 |
|
硬
件 接 口 差 異 |
A15~A8與數(shù)據(jù)總線復(fù)用 | A15~A8不與數(shù)據(jù)總線復(fù)用 |
| M/IO指出存儲器或I/O訪問 | M/IO指出存儲器或I/O訪問 | |
|
BHE/S7(34腳)分時復(fù)用引腳。 BHE表示使用高8位總線。 S7未賦予任何意義 |
BHE無意義。34腳重新定義為SS0。 DT/R、IO/M、SS0共同決定最小組態(tài)下的總線操作類型。 |
|
|
——
|
在最小組態(tài)時,如果進(jìn)入HLT,ALE信號推遲一個時鐘周期,以便鎖存狀態(tài)信息。 | |
|
內(nèi)
部 結(jié) 構(gòu) 差 異 |
指令隊列為6字節(jié) | 指令隊列為4字節(jié) |
| 指令隊列中有2個或以上空字節(jié)時,可以預(yù)取指令。 | 指令隊列中有1個或以上空字節(jié)時,可以預(yù)取指令 | |
| 從偶地址開始的16位存儲器操作只需一個總線周期。從奇地址開始的16位存儲器讀寫操作需要兩個連續(xù)的總線周期。 | 16位存儲器讀寫操作需要兩個連續(xù)的總線周期。 | |
| IO/M | DT/R | SS0 | 總線操作類型 |
| 1 | 0 | 0 | 發(fā)中斷響應(yīng)信號INTR |
| 1 | 0 | 1 | 讀I/O端口 |
| 1 | 1 | 0 | 寫I/O端口 |
| 1 | 1 | 1 | 暫停 |
| 0 | 0 | 0 | 取指令 |
| 0 | 0 | 1 | 讀內(nèi)存 |
| 0 | 1 | 0 | 寫內(nèi)存 |
| 0 | 1 | 1 | 無源狀態(tài)(上次操作結(jié)束,新操作未開始) |
