展豪君,金翊,歐陽山,石也強
(上海大學計算機工程與科學學院,上海 200444)
內(nèi)存空間在雙空間存儲器上的推移技術實驗
展豪君,金翊,歐陽山,石也強
(上海大學計算機工程與科學學院,上海 200444)
詳細介紹雙空間存儲器理論和其核心技術——內(nèi)存空間推移技術的仿真實驗.證實了用非易失性隨機存儲器(non-volatile random access memory,NVRAM)構(gòu)建雙空間存儲器的可行性,同時通過對8086CPU系統(tǒng)的仿真實驗,證實了將內(nèi)存空間在雙空間存儲器上推移之技術的正確性.實驗設置的目標系統(tǒng)包含一個8086CPU,16 MB的雙空間存儲器和16個8位的推移鎖存器.目標系統(tǒng)中設置了2個不可閉窗和14個可推移的窗框,在不可閉的255號窗壁中設置了8086CPU的首指令和初始化程序,在不可閉的254號窗壁設置了8086CPU的中斷向量表和雙空間存儲器的推移向量表.實驗完成了8086CPU的上電過程、自動執(zhí)行初始化程序、正確執(zhí)行中斷命令、正確執(zhí)行數(shù)據(jù)讀寫命令等操作,并將CPU對其1 MB內(nèi)存空間的隨機讀寫訪問自動落實為對16 MB雙空間存儲器指定位置的實時隨機訪問;實驗還完成了隨時修改推移鎖存器的操作,并以此將對應的窗框推移到了雙空間存儲器的任意位置.實驗結(jié)果為雙空間存儲器理論和內(nèi)存空間推移技術奠定了基礎.
雙空間存儲器;非易失性隨機存儲器(non-volatile random access memory, NVRAM);內(nèi)存推移
三值光學計算機[1-3]有眾多的數(shù)據(jù)位,因而適合于處理大批量的數(shù)據(jù)[4-7].這一特征不僅要求三值光學計算機的存儲器具有較大的存儲容量,而且能被處理器快速地隨機讀寫大量數(shù)據(jù).一方面電子計算機的內(nèi)存容量受到CPU地址線數(shù)目的限制,無法達到三值光學計算機的要求;另一方面,計算機外存上的數(shù)據(jù)不能直接被處理器隨機讀寫,必須先以順序方式拷貝進內(nèi)存才能被處理器隨機讀寫,因此外存也不能滿足三值光學計算機的要求.鑒于此,研發(fā)大容量、高訪問速度、非易失且可以被隨機讀寫的存儲器成為三值光學計算機研究者的重要任務之一.
固態(tài)盤兼有可隨機讀寫、非易失、體積小、速度快的特點,適用于構(gòu)造三值光學計算機需要的存儲系統(tǒng),特別是結(jié)合閃存與隨機存儲器特點于一體的非易失隨機存儲器(non-volatile random access memory,NVRAM),例如相變存儲器[8-10]、鐵電存儲器[11-12]、磁阻式存儲器[13-14]等.文獻[15-16]提供的數(shù)據(jù)表明,NVRAM的讀寫速度和性能已經(jīng)達到了當前計算機系統(tǒng)中使用的DRAM和SRAM的水平,而AGIGA Tech公司更是制造出了性能達到DDR4[17]標準的非易失隨機存儲器—–NVDIMM[18],這為實現(xiàn)三值光學計算機的高速度、大容量存儲系統(tǒng)奠定了物質(zhì)基礎.由此,本工作提出了同時具有非易失性和隨機訪問性的雙空間存儲器概念和理論,并建立了將內(nèi)存空間分區(qū)映射到雙空間存儲器上的技術——內(nèi)存推移技術[19].在這項存儲器新理論和技術中,雙空間存儲器的容量取決于推移鎖存器的位數(shù),而該鎖存器的位數(shù)可以隨意設置,因此雙空間存儲器的容量足以達到三值光學計算機的要求;同時,利用雙空間存儲器的非易失性建立的塊空間可以用作外存,利用其可隨機訪問性建立的字空間可以與內(nèi)存空間對接(映射),因此塊空間(外存)上的所有數(shù)據(jù)都可以通過字空間(內(nèi)存映射之后)直接被處理器快速地隨機讀寫.相比于傳統(tǒng)的存儲體系結(jié)構(gòu),本工作提出的理論和技術優(yōu)勢如下:消除數(shù)據(jù)/程序在內(nèi)存與外存之間的拷貝過程,消除開機和啟動程序的等待過程,利用推移鎖存器能夠?qū)?nèi)存空間完整地分時映射到很大的雙空間存儲器的各個區(qū)域,從而使CPU可以自動地隨時隨機訪問雙空間存儲器的任何單元,且讀寫速度不會低于當前的內(nèi)存速度.目前,雙空間存儲器和內(nèi)存推移技術的理論推證已得到完善[19],通過實驗證實雙空間存儲器和推移技術的正確性,不僅已成為該研究方向的焦點,也是將這項新理論和技術應用于計算機系統(tǒng)的橋梁.
作為雙空間存儲器和推移技術的硬件基礎,雙空間存儲器的地址總線配置如圖1所示.該地址總線共有如下4個特征.
圖1 雙空間存儲器地址總線Fig.1 Address bus of double-space storage
(1)雙空間存儲器的地址總線CAB(m+s)~0與塊管理器的輸出線W(m+s)~0直接相連,而系統(tǒng)通過塊管理器訪問存儲系統(tǒng)時,總是以塊為單位,塊內(nèi)采用順序訪問.因此,系統(tǒng)訪問的是雙空間存儲器的塊空間.顯然,此時的雙空間存儲器是系統(tǒng)的外存.
(2)雙空間存儲器地址線中的低序號部分CAB(s?1)~0與CPU輸出的內(nèi)存地址總線中的低序號部分AB(s?1)~0直接連接.而CPU通過內(nèi)存地址總線訪問存儲器時,總是以字(或字節(jié))為單位隨機訪問.因此,系統(tǒng)訪問的是雙空間存儲器的字空間.顯然,雙空間存儲器的這部分存儲單元是系統(tǒng)當前內(nèi)存的一部分.稱AB(s?1)~0構(gòu)成的內(nèi)存空間為映射窗,而稱CAB(s?1)~0在雙空間存儲器中對應的存儲區(qū)間為窗壁.
(3)雙空間存儲器地址線的高序號部分CAB(m+s)~s與推移鎖存器組的輸出線Jm~0相連,而推移鎖存器組的輸入線I(n?s)~0與CPU輸出的內(nèi)存地址總線中的高序號部分ABn~s直接連接.因此,ABn~s的值(內(nèi)存地址高位部分)將從推移鎖存器組中選擇一個推移鎖存器,該推移鎖存器的輸出為雙空間存儲器的高位地址CAB(m+s)~s.由于此時CAB(m+s)~s的值源于ABn~s,因此CAB(m+s)~s是字空間的高位地址,它給出了映射窗當前所對應的窗壁的起始地址,這個地址值正好可以用作該窗壁的編號.鑒于推移鎖存器的輸出Jm~0僅確定了字空間地址的高位部分CAB(m+s)~s,而字空間地址的低位部分CAB(s?1)~0仍可取任意值,因此不妨認為Jm~0給出了一個容量為2s個字(或字節(jié))的虛擬隨機訪問空間,并可認為其地址為J?1~?s,稱該虛擬空間為窗框.顯然,每一個推移鎖存器對應一個窗框,而每一個推移鎖存器又對應ABn~s的一個取值,每個ABn~s的取值對應一個窗框,因此這個值可作為窗框的編號.
顯然,映射窗、窗框和窗壁的大小相同,但有2(m+1)個窗壁,以CAB(m+s)~s(或Jm~0)的值為編號,所有窗壁組成雙空間存儲器;有2(n?s+1)個窗框,以ABn~s(或I(n?s)~0)的值為編號,每個推移鎖存器對應一個窗框,所有窗框組成當前內(nèi)存空間;系統(tǒng)中僅有一個映射窗,處理器只能透過映射窗隨機訪問雙空間存儲器.給一個推移鎖存器賦值后,就將相應的窗框安放在該值指定的窗壁上,稱該窗壁的狀態(tài)為開窗,沒有安放窗框的窗壁稱為閉窗.窗框不能被移走的窗壁稱為不可閉窗,顯然不可閉窗的窗框不能被移動,即它所對應的推移鎖存器的值不能被修改.由于映射窗只能通過改變ABn~s的值在窗框之間移動,所以映射窗只能位于某個開窗上,不可能位于閉窗上,因此處理器只能透過映射窗隨機訪問開窗上的存儲單元,無法隨機訪問閉窗上的存儲單元.再考慮到任何一個可移動的窗框都能被安置在任一個窗壁上,于是通過在窗壁間推移窗框和在窗框間推移映射窗,處理器就能訪問整個雙空間存儲器.顯然,處理器隨時可以透過映射窗訪問不可閉窗,因此數(shù)據(jù)和程序位于不可閉窗相當于在當前系統(tǒng)中駐留內(nèi)存.
(4)雙空間存儲器的地址總線CAB(m+s)~0與ABn~0的連接受三態(tài)門k1和k2的控制,而塊管理器的輸出端c控制k1和k2狀態(tài).當訪問外存時,處理器啟動塊管理器,則c控制k1和k2處于高阻態(tài),從而斷開CAB(m+s)~0與ABn~0的連接;當訪問內(nèi)存時,處理器停止塊管理器,則c信號失效,k1和k2處于低阻態(tài),則開通CAB(m+s)~0與ABn~0的連接.由于實際系統(tǒng)中處理器不會同時訪問內(nèi)存和外存,c,k1和k2的功能往往由處理器自動完成,實際系統(tǒng)中并不需要構(gòu)造出來,所以圖1中的c,k1和k2只是表明雙空間存儲器的字空間和塊空間不會同時被訪問.
鑒于塊空間可以直接用作外存,因此對塊空間的實驗驗證沒有重要意義[19],本工作暫不考慮塊空間的問題,而將實驗研究集中在驗證內(nèi)存空間的推移技術方面.實現(xiàn)推移技術的核心操作在于3點:①通過給推移鎖存器賦值使窗框安置在指定的窗壁;②通過內(nèi)存地址的高位部分將映射窗自動定位在選定的窗框上;③CPU透過映射窗隨機訪問到雙空間存儲器的任意單元.如果能夠驗證這3個核心操作,就可以確定整個推移技術.
為了有效、便捷地完成實驗研究任務,選擇硬件仿真軟件Proteus 8.0進行系統(tǒng)模擬實驗. Proteus 8.0有兩個性能對本實驗起到關鍵作用:①能夠?qū)?086CPU的工作過程進行仿真;②能對目標系統(tǒng)中設定的各種存儲芯片的數(shù)據(jù)進行實時仿真[20].利用前者能夠仿真8086CPU對內(nèi)存空間的訪問;利用后者能觀察構(gòu)成雙空間存儲器的每個芯片的內(nèi)容,并以此來判斷對內(nèi)存空間的訪問是否落實到雙空間存儲器的指定位置,從而判斷推移技術是否正確和可行.
2.1 訪問字空間系統(tǒng)的設計
8086 CPU是Intel公司生產(chǎn)的16位微處理器,它有20根內(nèi)存地址線,故內(nèi)存空間為220字節(jié),即1 MB[21].結(jié)合8086的特點,依據(jù)圖1所描述的雙空間存儲器地址線配置原理,本工作設計了如圖2所示實驗系統(tǒng).在圖2中,U1是8086處理器,U2是8086地址/數(shù)據(jù)復用引腳要求的外部信號分離器,U3是推移鎖存器組,U4是雙空間存儲器.在這個設計中,8086地址線的高4根(AB19~16)接入推移鎖存器組的輸入端(I3~0),用于選擇推移鎖存器,故有16個推移鎖存器;采用8位鎖存器,故推移鎖存器的輸出線有8根(J7~0),它們接入雙空間存儲器的高位地址線(CAB23~16);8086地址線的其余16根(AB15~0)直接接入雙空間存儲器的低位地址線(CAB15~0),故映射窗為64 kB.所設計的雙空間存儲器共有24根地址線(CAB23~0),故容量為16 MB.若能按照推移技術的操作過程使8086CPU通過其1 MB內(nèi)存地址及時訪問到16 MB的雙空間存儲器的任何單元,則推移技術和相關理論的正確性將被驗證.
圖2 8086CPU的內(nèi)存推移系統(tǒng)Fig.2 Memory space move unit of 8086CPU
2.2 不可閉窗的設置和應用
任何計算機系統(tǒng)在上電時執(zhí)行的第一條指令和以這條指令為入口的初始化程序都必須始終處于內(nèi)存空間中,否則計算機無法在上電后自動開始運行.為此,目前的計算機系統(tǒng)總是把第一條指令和初始程序放置在只讀存儲器中,并將第一條指令的地址設定為系統(tǒng)初始化后給出的第一個取指令地址.在以雙空間存儲器為基礎的系統(tǒng)中,第一條指令和初始化程序也必須位于CPU可隨時訪問的隨機存儲器中,且保證第一條指令位于系統(tǒng)的第一個取指令地址上.由于雙空間存儲器具有非易失性,因此這種系統(tǒng)中不再需要只讀存儲器,而是將第一條指令和初始化程序放置在不可閉窗中即可.
Intel公司設定8086芯片第一條指令的地址為0FFFF0H,即上電后8086CPU送出的第一個取指地址為0FFFF0H,這個地址的高4位為1111,于是AB19~16選中第15號推移鎖存器.因此,本工作將第15號推移鎖存器設定為不可修改,則15號窗框成為不可推移的.設計255號窗壁為不可閉窗,于是給15號推移鎖存器置入固定值0FFH,則15號窗框被設定在255號窗壁上,如圖3所示,其中的U2,U3和U4之含義同圖2,則255號窗壁上的程序和數(shù)據(jù)在任意時刻都能被8086CPU隨機訪問.再考慮到第一條指令地址的低16位為0FFF0H,于是將第一條指令放置在255號窗內(nèi)偏移量為0FFF0H處,如圖4(b)所示.
圖3 不可閉窗Fig.3 Unclosed window
圖4 不可閉窗應用Fig.4 Application of unclosed window
第一條指令往往是轉(zhuǎn)移到初始化程序的無條件長跳轉(zhuǎn)指令,本實驗將系統(tǒng)初始化程序放置在255號窗壁中偏移量為0000H處,于是位于OFFF0H的第一條長跳轉(zhuǎn)指令是一個5字節(jié)指令:EA000000F0H,其中第一個字節(jié)EAH是長跳轉(zhuǎn)指令的操作碼,第二和三字節(jié)0000H是執(zhí)行指令后IP寄存器的值,第四和五字節(jié)00F0H是執(zhí)行指令后CS寄存器的值.當8086CPU啟動執(zhí)行第一條指令后CS為F000H,IP為0000H,即可跳轉(zhuǎn)到設定的初始化程序繼續(xù)運行.如圖4(b)所示.
Intel公司還設定8086CPU的中斷矢量表位于內(nèi)存的00000H~3FFH區(qū)段(1 kB).由于中斷發(fā)生的偶然性,中斷矢量表也必須能夠隨時被CPU隨機訪問,因此現(xiàn)有的電子計算機系統(tǒng)中往往將中斷矢量表駐留在內(nèi)存中.本工作將中斷矢量表安置在不可閉的254號窗壁上.由于8086CPU訪問中斷矢量表時給出的地址在00000H~003FFH區(qū)段,其高4位總是0000,于是AB19~16將選中第0號推移鎖存器.鑒于此,本工作給0號推移鎖存器也置入固定值0FEH,則0號窗框被固定在254號窗壁,如圖3所示.考慮到中斷矢量表的低16位為0000H~03FFH,本工作將中斷矢量表安置在254號窗壁的開始位置,如圖4(a)所示.
2.3 推移命令設計
圖4(a)中,在254號窗壁的400H~4FFH地址范圍內(nèi)留了256個地址的推移向量表區(qū)域,該區(qū)域內(nèi)的每一個地址都可以設置為一個推移鎖存器的寫入端口,稱為推移鎖存器寫入端地址.給一個推移鎖存器寫入一個值,就將對應的窗框推移到新指定的窗壁上.因此,寫推移鎖存器的命令就是推移命令.
本實驗系統(tǒng)僅設計了16個推移鎖存器,因此只需要占用圖4(a)中推移向量表區(qū)域的16個地址,具體占用的地址由推移鎖存器寫入端地址的布線決定.推移鎖存器寫入端地址的布線如圖5所示,它決定了本實驗系統(tǒng)的推移鎖存器寫入地址(見表1).由于圖4中沒有CAB0線,因此每個偶數(shù)地址和大于1的奇數(shù)地址訪問同一個推移鎖存器寫入端.又由于各推移鎖存器的寫入數(shù)據(jù)線DI7~0連接系統(tǒng)數(shù)據(jù)線的D7~0,必須用字命令來寫推移命令,且將推移鎖存器的修改值放在低8位上,數(shù)據(jù)的高8位沒有意義.由此可知,一個系統(tǒng)的推移命令可以有多種形式.本實驗只采用如下形式:
其中?為十六進制數(shù).圖5所示推移鎖存寫入端地址中的U3之含義同圖2.
表1 推移鎖存器寫入端地址Table 1 Address of write in ports of the move latches
顯然,主板制造商可以使各個主板產(chǎn)品具有不同的推移鎖存器寫入端地址,并使各個主板的初始化程序中包含相應的推移命令,而所有的推移操作必須調(diào)用這組推移命令,從而提高了主板的安全性.
2.4 系統(tǒng)的線路連接結(jié)構(gòu)
結(jié)合圖2,3和5,并選擇74LS373芯片用作各類鎖存器,74LS245芯片為數(shù)據(jù)傳輸方向控制器,74HC154芯片為4-16譯碼器,27C256,62256芯片構(gòu)成雙空間存儲器芯片,則形成本工作的線路連接原理圖,如圖6所示.圖6中U1,U2,U3和U4之含義同圖2.
圖5 推移鎖存器寫入端地址總線Fig.5 Address bus of write in ports of the move latches
圖6 實驗系統(tǒng)電路原理圖Fig.6 Electric schematic diagram of experiment system
需要說明的是,本工作沒有使用NVRAM型存儲芯片來構(gòu)造雙空間存儲器,原因有二:一是Proteus軟件中沒有NVRAM芯片的模擬器;二是本實驗的核心目標是驗證內(nèi)存空間在雙空間存儲器上進行推移的機制和技術,著重點并不在于雙空間存儲器的非易失性,因此用普通的隨機存儲芯片構(gòu)造一個大于內(nèi)存空間的可隨機訪問存儲器就足以達到實驗目標.對于系統(tǒng)中依靠雙空間存儲器的非易失性工作的部分,則用在目標系統(tǒng)啟動前給相應窗壁先賦指定值的方法來模擬,如對不可閉窗255號窗壁中的8086CPU的初始化程序和首指令就采用這種模擬方式.因此,雙空間存儲器255窗壁用兩片27C256(32 k×8 bit)ROM芯片實現(xiàn),以便在系統(tǒng)啟動之前就可以將初始化程序和首指令燒寫到ROM中運行,其他窗壁用62256(32 k×8 bit)SRAM實現(xiàn).
2.5 實驗內(nèi)容和實驗過程設計
內(nèi)存推移理論的核心技術有如下5個方面:①用非易失性隨機存儲器構(gòu)造大容量的雙空間存儲器;②構(gòu)造推移鎖存器;③用推移命令在雙空間存儲器上移動窗框;④CPU透過映射窗隨機訪問窗壁的字單元;⑤不可閉窗的設置和應用.①和②兩項技術是系統(tǒng)構(gòu)造,它們的正確性體現(xiàn)在圖5中,如果按圖5構(gòu)建的系統(tǒng)能夠正常運行并可實現(xiàn)其余3項技術,則這兩項技術的正確性被證實.③,④和⑤三項技術是操作,必須通過實施特定的操作才能證明其正確性和有效性,為此設計如下實驗操作方案.
(1)繪制目標系統(tǒng)電路.啟動Proteus 8.0,新建工程,根據(jù)圖6編輯完成實驗目標系統(tǒng)的電路并保存工程名為BispaceSimulation.DSN,該電路所需要的元件和圖6一致.按圖6構(gòu)造實驗目標系統(tǒng).鑒于相應的工程圖太大,此處省略.
(2)設置目標系統(tǒng)的初始化程序和首指令.將255號窗壁中的內(nèi)容按圖4(b)的要求設置.本過程將完成系統(tǒng)啟動跳轉(zhuǎn)首指令、初始化程序指令燒寫到255窗壁的27C256 ROM芯片中.首先編寫完成上述功能的匯編程序;然后將匯編程序編譯成bin文件,之后將bin文件轉(zhuǎn)換成能燒寫到27C256芯片中的hex文件[22],命名為jvi.hex;最后在Proteus中分別雙擊255窗壁的兩片27C256芯片配置其鏡像文件(image file)為jvi.hex,注意偶(奇)體27C256即接低(高)8位數(shù)據(jù)線D7~0(D15~8)的芯片將其鏡像文件基地址設成0(1),文件地址偏移都設成1.這樣在本仿真系統(tǒng)啟動時,255號窗壁中ROM芯片就保存如圖4(b)所要求的程序.判定:若系統(tǒng)啟動時,255號窗壁中ROM芯片保存了所要求的程序,則證明系統(tǒng)的初始化程序和首指令設置成功.
(3)模擬8086CPU啟動過程.目的:檢驗目標系統(tǒng)啟動后是否正確地執(zhí)行第一條指令.操作設計:將第一條指令設計為跳轉(zhuǎn)到初始化模擬程序設定的入口地址0FF 0000H.判定:若系統(tǒng)啟動后跳轉(zhuǎn)到初始化程序處執(zhí)行,則證明第一條指令被正確執(zhí)行并完成跳轉(zhuǎn).
(4)執(zhí)行目標系統(tǒng)初始化推移矢量表模擬實驗.目的:檢驗初始化推移矢量表是否被自動執(zhí)行.操作設計:將8086CPU的初始化程序開始一段設計為給1~14號推移鎖存器分別賦值01H~0EH的指令,通過考察254號窗壁推移向量表中相應單元值的變化來判斷該初始化程序被執(zhí)行的情況.判定:若各個推移鎖存器具有了預設的值,證明初始化程序運行成功.
(5)透過映射窗訪問雙空間存儲器字空間實驗.目標:驗證CPU對內(nèi)存的訪問被推移系統(tǒng)透過映射窗落實為對字空間的訪問.操作設計:先將1號、2號推移鎖存器的值設為01H和02H,即分別指定1號和2號窗壁;然后將數(shù)值45H寫入0100FFH地址、將數(shù)值67H寫入0200AAH地址;再執(zhí)行讀出0100FFH地址的內(nèi)容,并將讀出值送入0200ABH地址.判定:若1號推移鎖存器所指向窗壁中,偏移地址為00FFH的存儲單元中有值45H,在2號推移鎖存器所指向的窗壁中,偏移地址為00AAH的存儲單元中有值67H,偏移地址為00ABH的存儲單元中有值45H,則證明達到實驗目標.
(6)修改推移鎖存器實驗.目的:驗證推移指令的正確性.操作設計:執(zhí)行2.3節(jié)給出的推移命令,實現(xiàn)給指定的推移鎖存器賦值.考慮到本實驗設計的8086初始化程序是由給1~15號推移鎖存器分別賦值的指令組成,因此如果方案(4)和(5)的實驗成功,則本方案的實驗就同時成功.但為了更好地驗證推移操作,實驗中執(zhí)行燒寫在ROM中的初始化程序的推移指令代碼部分,給3號推移鎖存器賦值2AH,給5號推移鎖存器賦值55H,給14號推移鎖存器賦值F3H.判定:若初始化程序執(zhí)行完推移指令代碼部分后各推移鎖存器的值均正確,證明推移命令正確,即3,5和14號推移鎖存器的值分別為2AH,55H和F3H,則修改推移鎖存器成功.
(7)移動映射窗實驗.目標:證明若改變一個推移鎖存器的值,則對同一個內(nèi)存地址的訪問會落實到不同的窗壁上.設計:用方案(6)證實的技術修改1號和2號推移鎖存器,然后再次執(zhí)行方案(5).判定:若在1號和2號推移鎖存器指向的新窗壁上方案(5)成功,則達到實驗目標.
(8)中斷系統(tǒng)實驗.目標:驗證CPU響應中斷時能夠從中斷矢量號找到保存254號不可閉窗的中斷矢量,并將中斷矢量值正確地送入CS和IP寄存器.操作設計:給254號窗壁中30H號中斷矢量的位置賦任意值,本工作中賦值為360050F0H,然后在IP為任意地址時執(zhí)行中斷指令INT 30H.判定:若執(zhí)行INT 30 H指令后,CS為F050H,IP為0036H,則達到實驗目的.本工作還同時驗證了CPU可隨時訪問不可閉窗中的單元.
根據(jù)第2節(jié)的實驗設計,實驗操作可分為對硬件模擬軟件的操作和對推移技術的驗證操作兩部分:前一部分是啟動Proteus 8.0硬件仿真系統(tǒng),并在仿真環(huán)境中建立目標系統(tǒng),這部分的實驗目的和操作設計見2.5節(jié)的方案(1)和(2);后一部分是在目標系統(tǒng)的仿真系統(tǒng)中驗證雙空間存儲器理論的核心技術,其實驗目的和操作設計見2.5節(jié)的方案(3)~(8).
3.1 建立目標系統(tǒng)仿真環(huán)境
仿真環(huán)境如下:CPU為Intel奔騰雙核T3200,操作系統(tǒng)為Windows 7,仿真軟件為Proteus 8.0.
操作一繪制目標仿真系統(tǒng)電路.
步驟(一)啟動Proteus 8.0軟件,進入建立工程界面.
步驟(二)按2.4節(jié)的設計,選擇目標系統(tǒng)的各種芯片,并連線繪制成目標系統(tǒng),如圖7所示.
圖7 仿真系統(tǒng)線路圖Fig.7 Circuit diagram of the simulation system
步驟(三)將繪制完成的目標系統(tǒng)存盤,文件名為BispaceSimulation.DSN.
說明:如果將仿真系統(tǒng)在Proteus一張圖紙上完成,繪制的圖會非常大.因為Proteus支持模塊化、多層次、多圖紙的設計,所以圖7所示的BispaceSimulation.DSN工程是將仿真系統(tǒng)按圖2分成的4個模塊U1~U4分別繪制然后再組合而成.U1是8086CPU,U2~U4模塊的內(nèi)部細節(jié)可參見圖6.將U4中雙空間存儲器每個窗壁中的偶、奇存儲體分別命名為M?.M0和M?.M1,其中?代表窗壁號.系統(tǒng)運行時如果想查看某一個窗壁存儲器的內(nèi)容,只需要選擇“Debug”菜單下“Memory Contents-M?.M?”即可(見圖8).另外,從圖8中可以看出,在Proteus對目標系統(tǒng)模擬時,可以通過“Debug”對程序調(diào)試進行控制,并且可查看目標系統(tǒng)中8086CPU各寄存器狀態(tài)和當前執(zhí)行指令等操作.
圖8 “Debug”菜單項Fig.8 Menu bar of“Debug”
操作二燒寫目標仿真系統(tǒng)的實驗程序.
步驟(一)編寫系統(tǒng)首指令、初始化程序和30H中斷服務子程序的匯編程序.
步驟(二)將匯編程序編譯成可執(zhí)行bin文件,然后利用bin2hex工具轉(zhuǎn)換成能夠燒寫到ROM芯片的hex文件jvi.hex.
步驟(三)建立只讀目標系統(tǒng)初始化程序和首指令的hex文件jvi.hex,將jvi.hex文件燒寫到255號窗壁中.
實驗結(jié)果:單擊Proteus中“Debug”菜單下的“Start/Restart Debugging”選項啟動仿真系統(tǒng)(見圖8),這時再依次選擇“Debug”菜單下的“Memory Contents M255-M0”和“MemoryContents M255-M1”查看芯片內(nèi)容.這兩個存儲芯片在雙空間存儲器中的地址為00FF 0000~00FF FFFF(255號窗壁),M25-5M0為偶存儲體,M25-5M1為奇存儲體,該窗壁的0000位置開始為8086CPU初始化程序的機器指令代碼,FFF0H位置為跳轉(zhuǎn)指令EA000000F0H代碼, 0536H位置為30H中斷服務子程序的指令代碼.因為這3個程序的偏移位置間隔太大,所以此處不再給出255窗壁的內(nèi)容截圖,但通過下節(jié)操作三到操作八的正確性可判斷本操作二成功與否.
3.2 驗證雙空間存儲器理論的核心技術
操作三模擬8086CPU啟動過程.
步驟(一)在圖8所示界面上點擊“Start/Restart Debugging”復位啟動系統(tǒng),使系統(tǒng)恢復到上電狀態(tài).
可觀察到各寄存器的內(nèi)容(見圖9)如下:AX=0000H,BX=0000H,CX=0000H,DX=0000H, SI=0000H,DI=0000H,SP=0000H,BP=0000H,CS=FFFFH,DS=FFFFH,ES=FFFFH,SS= FFFFH,IP=0000H.
圖9 系統(tǒng)復位后8086CPU狀態(tài)Fig.9 Original state of 8086CPU after reseting system
圖9中Op:EA000000F0H和Pc:jmp F000:0000表明了系統(tǒng)復位后要在0FFFF0H執(zhí)行的第一條長跳轉(zhuǎn)指令.
內(nèi)存區(qū)域:0~254號窗壁(00 0000H~FF 0000H)上的存儲單元的值均為00H;255號窗壁的ROM芯片除燒寫的跳轉(zhuǎn)指令、初始化程序和中斷服務子程序外,其他存儲單元的值均為FFH.通過圖8所示界面上的“Debug”菜單,從下拉菜單中選擇任意窗壁上的“Memory Contents M?.M?”芯片可以查看其內(nèi)容.
步驟(二)基于步驟(一),在“Debug”菜單下選“Step Over”或按“F10”快捷鍵使處理器單步執(zhí)行第一條指令.
可觀察到各寄存器的內(nèi)容(見圖10)如下:AX=0000H,BX=0000H,CX=0000H,DX= 0000H,SI=0000H,DI=0000H,SP=0000H,BP=0000H,CS=F000H,DS=FFFFH,ES= FFFFH,SS=FFFFH,IP=0000H.
圖10中Op:B80000H和Pc:mov ax,0000表明了系統(tǒng)復位后成功跳轉(zhuǎn)到FF0000H處要執(zhí)行的初始化程序的第一條指令.
實驗結(jié)論:目標系統(tǒng)復位成功;目標系統(tǒng)利用15號推移矢量成功跳轉(zhuǎn)到初始化程序位置上執(zhí)行.
操作四執(zhí)行目標系統(tǒng)初始化推移矢量表實驗.
按“F10”鍵使處理器單步執(zhí)行2.5節(jié)方案(4),該操作指令已經(jīng)被燒寫到ROM中.
執(zhí)行結(jié)果:雙空間存儲器區(qū)域FE0400H~FE04FFH的值為設定的窗壁地址,其余地址的存儲單元值均為00H.通過“Debug”菜單查看254不可閉窗壁上0400H~041EH推移矢量表的內(nèi)容(見圖11),僅看偶存儲體“Memory Contents-M254-M0”,因為所設計的電路圖可以保證推移鎖存器與推移矢量表內(nèi)容同步,所以0~15推移鎖存器的值依次初始化為FEH, 01H~0EH和FFH.需要說明的是,因為254號窗壁是由雙8位存儲體組成,所以圖11中紅色框的偏移地址0200H都需要乘以2.例如,圖11左邊0200H位置其實對應的254號窗壁的偏移地址中的0400H(低8位),右邊0200H對應254號窗壁的偏移地址中的0401H(高8位).下面所述存儲器的讀法與此相同.
圖10 系統(tǒng)正確啟動狀態(tài)Fig.10 Normal state after starting system
圖11 推移鎖存器初始化矢量Fig.11 Initial values of the move latches
實驗結(jié)論:初始化程序執(zhí)行后雙空間存儲器的FE0400~FE04FF的值與設定值相同.初始化程序正常執(zhí)行,且推移矢量表初始化設置完成.
操作五透過映射窗訪問雙空間存儲器字空間實驗.
按“F10”鍵使處理器依次單步執(zhí)行2.5節(jié)方案(5),執(zhí)行結(jié)果如圖12所示.圖13是操作過程中將0100FFH地址的內(nèi)容讀取到AL中的處理器時各寄存器的狀態(tài).
圖12 操作五后對應映射窗內(nèi)容Fig.12 Digits in map window after operating by No.5
實驗結(jié)論:圖13是在DS=1000H,BX=00FFH時執(zhí)行MOV AL,[BX]指令后的狀態(tài).可以看出,通過寄存器間接尋址,可成功讀出1號窗壁的FFH位置的45H值到AL寄存器中.圖12證明了整個操作過程的成功,即8086CPU成功訪問到雙空間存儲器指定地址.
圖13 讀取0100FFH地址Fig.13 Reading out digit from 0100FFH address
操作六修改推移鎖存器實驗.
按“F10”鍵使處理器依次單步執(zhí)行2.5節(jié)方案(6),執(zhí)行結(jié)果如圖14所示(僅給出有意義的低8位).執(zhí)行后推移鎖存器后3,5和14號推移鎖存器的值分別更新為2AH,55HV和F3H.
圖14 操作六結(jié)果Fig.14 Results after operating by No.6
實驗結(jié)論:成功修改推移鎖存器.
操作七修改推移鎖存器及移動映射窗實驗.
首先按2.5節(jié)方案(6)將V1,2V號推移矢量分別指向3號和253號窗壁,即推移鎖存器分別更新為03H和FDH,然后執(zhí)行與方案(5)相同偏移地址上的操作.
執(zhí)行結(jié)果:修改推移鎖存器結(jié)果如圖15所示,移動映射窗如圖16所示.
圖15 修改推移鎖存器Fig.15 Rewriting the move latches
圖16 操作七后對應映射窗內(nèi)容Fig.16 Digits in map window after operating by No.7
實驗結(jié)論:圖15說明成功修改推移鎖存器,圖12與16的對比說明已正確移動映射窗.另外,雖然Proteus 8.0沒有提供直接查看鎖存器當前鎖存值的功能,通過操作六和七可以證明執(zhí)行推移指令時會將推移鎖存器和254號窗壁中推移矢量表中的值保持同步.
操作八中斷系統(tǒng)實驗.
按“F10”鍵執(zhí)行2.5節(jié)方案(8),即“INT 30H”指令(見圖17),執(zhí)行結(jié)果如圖18所示.
圖17 即將執(zhí)行INT 30H前8086CPU狀態(tài)Fig.17 8086CPU statebeforeexecutingin struct INT 30H
圖18 執(zhí)行中斷服務程序Fig.18 Running interrupt service routine
實驗結(jié)論:此時CS:F050H,IP:0036H可以驗證處理器正確響應設置在254號不可閉窗的30H中斷服務子程序的地址并執(zhí)行該子程序.
對上述實驗重復多次,每次給出不同的參數(shù),均達到實驗目的.實驗結(jié)果證明內(nèi)存空間推移理論和技術的核心內(nèi)容的正確性.
基于Proteus 8.0硬件仿真系統(tǒng)完成的實驗證實了內(nèi)存空間在雙空間存儲器上推移的理論和核心技術.實驗中8086CPU的1 MB內(nèi)存空間依靠16個推移鎖存器被分時映射到16 MB的雙空間存儲器的任意位置,從而使8086CPU對其1 MB內(nèi)存空間的隨機訪問自動落實為對16 MB雙空間存儲器指定位置的隨機實時訪問.本工作通過設置不可閉窗,保證了CPU的正確啟動過程、執(zhí)行初始化程序和執(zhí)行中斷命令.本工作對推移鎖存器進行了方便靈活的改寫,并以此實現(xiàn)了內(nèi)存空間在雙空間存儲器上的推移操作.
本工作的成功為雙空間存儲器理論和內(nèi)存空間推移技術奠定了可靠基礎,為研制基于雙空間存儲器的新型計算機系統(tǒng)勾勒出了設計思想.并可從實驗結(jié)果推測出,未來的計算機系統(tǒng)中可以用一個大容量的雙空間存儲器來取代其內(nèi)存儲器和外存存儲器,使CPU能實時隨機訪問的存儲器范圍達到雙空間存儲器的整個空間,不再存在內(nèi)存和外存間的數(shù)據(jù)拷貝問題.
[1]JIN Y,HE H C,L¨U Y T.Ternary optical computer architecture[J].Physica Scripta,2005, T118:98-101.
[2]金翊.走近光學計算機[J].上海大學學報(自然科學版),2011,17(4):401-411.
[3]金翊,王宏健,歐陽山,等.可重構(gòu)三值光學處理器的原理、基本結(jié)構(gòu)和實現(xiàn)[J].中國科學:信息科學,2012,42(6):778-788.
[4]諶章義.千位三值光學處理器理論、結(jié)構(gòu)和實現(xiàn)[D].上海:上海大學,2010.
[5]金翊.三值光計算機高數(shù)據(jù)寬度的管理策略[J].上海大學學報(自然科學版),2007,13(5):519-523.
[6]李梅,金翊,何華燦,等.基于三值邏輯光學處理器實現(xiàn)向量矩陣乘法[J].計算機應用研究,2009, 26(8):2839-2841.
[7]WANG,X C,PENG J J,JIN Y,et al.Vector-matrix multiplication based on a ternary optical computer[M]//High performance computing and applications.Berlin:Springer-Verlag,2009: 426-432.
[8]SIMPSON R E,FONS P,KOLOBOV A V,et al.Interfacial phase-change memory[J].Nature Nanotechnology,2011,6(8):501-505.
[9]WONG H S P,RAOUx S,KIM S B,et al.Phase change memory[J].Proceedings of the IEEE, 2010,98(12):2201-2227.
[10]LAI S.Current status of the phase change memory and its future[C]//Electron Devices Meeting. 2003,DOI:10.1109/IEDM.2003.1269271.
[11]TAKASHIMAD,KUNISHIMAI.High-density chain ferroelectric random access memory (CFRAM)[J].IEEE Journal of Solid-State Circuits,1998,33(5):787-792.
[12]EVANS J,MONTROSS N,SALAZAR G,et al.A discrete ferroelectric memory[C]//Non-Volatile Memory Technology Symposium.2012,DOI:10.1109/NVMTS.2013.6632857.
[13]TEHRANI S,SLAUGHTER J M,CHEN E,et al.Progress and outlook for MRAM technology[J]. IEEE Transactions on Magnetics,1999,35(5):2814-2819.
[14]YODA H,FUjITA S,SHIMOMURA N,et al.Progress of STT-MRAM technology and the effect on normally-off computing systems[C]//Electron Devices Meeting.2012,DOI: 10.1109/IEDM.2012.6479023.
[15]ZHUANG W W,PAN W,ULRICH B D,et al.Novel colossal magnetoresistive thin film nonvolatile resistance random access memory(RRAM)[C]//International Electron Devices Meeting.2002, DOI:10.1109/IEDM.2002.1175811.
[16]CHENY C,CHENC F,CHENC T,et al.An access-transistor-free(0T/1R)nonvolatile resistance random access memory(RRAM)using a novel threshold switching,selfrectifying chalcogenide device[C]//IEEE International Electron Devices Meeting.2004,DOI: 10.1109/IEDM.2003.1269425.
[17]Jedec.DDR4 SDRAM standard[EB/OL].(2015-03-20)[2017-01-15].http://www.jedec. org/standards-documents/docs/jesd79-4a.
[18]Agiga.AGIGARAM?DDR4 NVDIMM[EB/OL].(2015-05-20)[2017-01-15].http://www. agigatech.com/ddr4.php.
[19]金翊,歐陽山,沈云付,等.一種計算機系統(tǒng)和數(shù)據(jù)讀寫方法:201410199434.9[P].2012-04-05.
[20]顧暉,梁惺彥.微機原理與接口技術——基于8086和Proteus仿真[M].北京:電子工業(yè)出版社, 2011:177-288.
[21]BREY B B.Intel微處理器[M].金惠華,艾明晶,尚利宏,等譯.北京:機械工業(yè)出版社,2010: 287-309.
[22]Intel.Hexadecimal object file format specification[EB/OL].(2015-01-18)[2017-01-15].http:// microsym.com/editor/assets/intelhex.pdf.
本文彩色版可登陸本刊網(wǎng)站查詢:http://www.journal.shu.edu.cn
Experiment of memory space move technique for double-space storage
ZHAN Haojun,JIN Yi,OUYANG Shan,SHI Yeqiang
(School of Computer Engineering and Science,Shanghai University,Shanghai 200444,China)
This work presents an emulation experiment for double-space storage principle and the memory space move technique.The experiment validate feasibility of using nonvolatile random access memory(NVRAM)to build a double-space storage and correctness of the memory space movement technique.The experiment system consists of an 8086CPU, 16 MB double-space storage,and sixteen 8-bit move latches.Two unmovable and fourteen movable window frames are set up.The first instruction and initial program are set in the 255th window that cannot be closed.An interrupt vector table and a move vector table are set in the 254th unclosed window.It has been make sure that the 8086CPU is booted properly,and the initial program,interrupt service routine,read and write memory instruction are executed correctly.Further,access to the 8086CPU’s 1 MB memory can be automatically transformed to the 16 MB double-space memory unit,and the move latches can be modified to map the window frame into a new window wall of the double-spacestorage.The experimental results lay a foundation for the double-space memory principle and its memory space move technique.
double-space storage;non-volatile random access memory(NVRAM);memory space move
TP 333
A
1007-2861(2017)02-0201-15
10.3969/j.issn.1007-2861.2015.01.017
2015-04-18
國家自然科學基金青年科學基金資助項目(61103054);上海市自然科學基金資助項目(15ZR1415400, 13ZR1416000);上海市教委科研創(chuàng)新資助項目(13ZZ074,13YZ005)
金翊(1957—),男,教授,博士生導師,博士,研究方向為三值光學計算機.E-mail:yijin@shu.edu.cn