微型計(jì)算機(jī)是通過(guò)總線來(lái)傳送指令和數(shù)據(jù)的,32位微機(jī)支持多種數(shù)據(jù)傳送總線周期。80486和Pentium的總線周期可以是非突發(fā)方式的,也可以是突發(fā)方式的;可以是高速緩存方式的,也可以是非高速緩存方式的。
本節(jié)以8086/8088、80486和Pentium微處理器為例,敘述80x86微處理器的內(nèi)部結(jié)構(gòu)。
2.1.18086/8088的內(nèi)部結(jié)構(gòu)
8086/8088是Intel公司于1978年6月推出的16位微處理器,它們的主要特點(diǎn)是:數(shù)據(jù)線為16位(8088內(nèi)部數(shù)據(jù)線是16位,外部數(shù)據(jù) 線是8位),可進(jìn)行8位(字節(jié))和16位(字)運(yùn)算;地址線為20位,可尋址1MB存儲(chǔ)空間;時(shí)鐘頻率為5~8MHz。內(nèi)部結(jié)構(gòu)由執(zhí)行單元 EU(Execution Unit)和總線接口單元BIU(Bus Interface Unit)兩部分構(gòu)成,其內(nèi)部結(jié)構(gòu)框圖。
1.執(zhí)行單元(EU)
EU由算術(shù)邏輯單元(ALU)、16位標(biāo)志寄存器(FR)、通用寄存器組(4個(gè)16位通用寄存器、2個(gè)16位指針寄存器、2個(gè)16位間址寄存器)、指令 譯碼器和控制電路組成。EU是指令執(zhí)行部件,它從BIU的指令隊(duì)列中取指令,進(jìn)行指令譯碼,并發(fā)出相應(yīng)的控制命令序列執(zhí)行指令。
2.總線接口單元(BIU)
BIU包括4個(gè)16位段寄存器(CS、DS、ES、SS)、1個(gè)16位指令指針(IP)、1個(gè)地址加法器、1個(gè)6字節(jié)(8088 為4字節(jié))的指令隊(duì)列 和總線控制電路,它負(fù)責(zé)從存儲(chǔ)器中取指令并存放在指令隊(duì)列中供CPU執(zhí)行。在執(zhí)行指令過(guò)程中,使用的操作數(shù)地址由段基址和偏移量組成,其中16位偏移量先 由EU計(jì)算得出,再由BIU將其與段基址(段寄存器的內(nèi)容)合在一起形成20位物理地址。BIU的功能是實(shí)現(xiàn)CPU與內(nèi)存的數(shù)據(jù)交換,并可根據(jù)EU的請(qǐng)求 與I/O接口電路交換數(shù)據(jù)。
2.1.280486的內(nèi)部結(jié)構(gòu)
80486是Intel公司于1989年4月推出的 32位微處理器,它的主要特點(diǎn)是:內(nèi)部數(shù)據(jù)總線有32位、64位和128位3種,外部數(shù)據(jù)總線為32位;提供了8位(字節(jié))、16位(字)、32位(雙 字)運(yùn)算指令;地址總線為32位,可尋址4096MB存儲(chǔ)空間;支持虛擬存儲(chǔ)管理技術(shù),虛存空間為64T;片內(nèi)集成有浮點(diǎn)運(yùn)算部件和8KB的Cache, 同時(shí)也支持外部Cache;整數(shù)處理部件采用RISC結(jié)構(gòu),提高了指令的執(zhí)行速度。此外,80486還引進(jìn)了時(shí)鐘倍頻技術(shù),從而使主頻可以超過(guò)100 MHz。
80486內(nèi)部包括總線接口部件、指令預(yù)取部件、指令譯碼部件、控制部件、整數(shù)執(zhí)行部件、分段部件、分頁(yè)部件,以及浮點(diǎn)運(yùn)算部件(FPU)和高速緩存(Cache)部件,其內(nèi)部結(jié)構(gòu)框圖。
1.總線接口部件
總線接口部件(BIU)與片外總線連接,用于管理訪問(wèn)外部存儲(chǔ)器和I/O端口的地址、數(shù)據(jù)和控制總線,完成指令預(yù)取、讀/寫(xiě)操作等總線操作。BIU主要 與指令預(yù)取部件和高速緩存部件交換信息。BIU將預(yù)取指令存入指令預(yù)取部件;填充Cache行時(shí),BIU一次從片外總線讀16個(gè)字節(jié)到Cache。若 Cache內(nèi)容被CPU內(nèi)部操作修改,則修改內(nèi)容也由BIU寫(xiě)到存儲(chǔ)器中去。當(dāng)讀操作的內(nèi)容不在Cache中時(shí),將由BIU控制直接到存儲(chǔ)器中去取。
2.指令預(yù)取部件
80486含有一個(gè)32字節(jié)的指令預(yù)取隊(duì)列,在總線空閑周期,指令預(yù)取部件形成存儲(chǔ)器地址,并向BIU發(fā)出預(yù)取指令請(qǐng)求。預(yù)取周期一次讀16個(gè)字節(jié)的指 令代碼存入預(yù)取隊(duì)列中。如果Cache在指令預(yù)取時(shí)命中,則不產(chǎn)生總線周期。當(dāng)遇到跳轉(zhuǎn)、中斷、子程序調(diào)用等操作時(shí),則預(yù)取隊(duì)列被清空。
3.指令譯碼部件
指令譯碼部件是從指令預(yù)取隊(duì)列中讀取指令并譯碼,將其轉(zhuǎn)換成對(duì)其他部件進(jìn)行控制的信號(hào)。譯碼過(guò)程分兩步:首先確定指令執(zhí)行時(shí)是否需要訪問(wèn)存儲(chǔ)器,若需要 則立即產(chǎn)生總線訪問(wèn)周期,使存儲(chǔ)器操作數(shù)在指令譯碼后能準(zhǔn)備好;然后產(chǎn)生對(duì)其他處理部件的控制信號(hào)。大多數(shù)指令能在一個(gè)時(shí)鐘周期內(nèi)譯碼完畢。
4.控制部件
80486單獨(dú)設(shè)置控制部件以對(duì)整數(shù)執(zhí)行部件、浮點(diǎn)運(yùn)算部件和分段部件等進(jìn)行控制,使它們完成已譯碼指令的執(zhí)行。