賽靈思 Spartan-3開(kāi)發(fā)板成為作者改進(jìn)其軟件教育用的Oberon 編程語(yǔ)言和編譯器的基礎(chǔ)。
1988 年,Jürg Gutknecht 和我一起完成并出版了Oberon 編程語(yǔ)言[1,2],其為我職業(yè)生涯早期開(kāi)發(fā)的另外兩種編程語(yǔ)言Pascal 和Modula-2 的后續(xù)版本。與Modula-2 相比,我們最初設(shè)計(jì)Oberon 編程語(yǔ)言力求更加精簡(jiǎn)和高效,以便能夠更好地幫助教學(xué)人員為計(jì)算機(jī)科學(xué)專業(yè)的學(xué)生教授系統(tǒng)編程。我們?cè)俳釉賱?lì),于1990 年針對(duì)可采用windows 系統(tǒng)和具有字處理能力的工作站開(kāi)發(fā)了Oberon 操作系統(tǒng)(OS),以此作為工作站的現(xiàn)代實(shí)現(xiàn)方式。接著,我們出版了一本書(shū),名為《Project Oberon》,詳細(xì)講解了Oberon 編譯器以及與之同名的操作系統(tǒng)。此外,書(shū)中還包括詳細(xì)的指令和源代碼。
幾年前,我的朋友Paul Reed 建議我重新修訂并再次出版這本書(shū),不僅因?yàn)檫@本書(shū)對(duì)系統(tǒng)設(shè)計(jì)教學(xué)具有重要價(jià)值,同時(shí)還因?yàn)檫@本書(shū)可以作為良好的切入點(diǎn),幫助那些想要成為創(chuàng)新者的人們從零基礎(chǔ)構(gòu)建可靠的系統(tǒng)。
然而,我當(dāng)時(shí)實(shí)際上是遇到了很大的困難。我最初開(kāi)發(fā)的編譯器是將已基本消失了的處理器作為目標(biāo)。因此,我的解決辦法就是為現(xiàn)代處理器重新編寫(xiě)編譯器。但在做了不少研究之后,我無(wú)法找到一款能夠在清晰度、規(guī)律性和簡(jiǎn)潔性上符合我標(biāo)準(zhǔn)的處理器。因此,我自己設(shè)計(jì)了這款編譯器。而我之所以能夠?qū)⒃撓敕ǜ吨T實(shí)現(xiàn),都是因?yàn)楝F(xiàn)代FPGA 能夠幫助我設(shè)計(jì)硬件以及系統(tǒng)軟件。更重要的是,選擇賽靈思FPGA 能幫助我更新系統(tǒng),同時(shí)讓設(shè)計(jì)盡可能接近自1990 年以來(lái)的原始版本。
實(shí)現(xiàn)在低成本Digilent Spartan?-3開(kāi)發(fā)板上的新型處理器RISC 負(fù)責(zé)托管1MB 靜態(tài)RAM (SRAM) 內(nèi)存。我唯一添加的系統(tǒng)硬件就是一個(gè)鼠標(biāo)接口和一個(gè)用來(lái)替換舊系統(tǒng)中硬盤(pán)驅(qū)動(dòng)器的SD 卡。
這本書(shū)和面向整個(gè)系統(tǒng)的源代碼可在projectoberon.com[3,4,5] 中查閱,也可在該網(wǎng)站上名為 S3RISCinstall.zip. 的單個(gè)文件中進(jìn)行查閱。該文件包含指令、SD 卡文件系統(tǒng)圖像和FPGA 配置比特文件(對(duì)于Spartan-3開(kāi)發(fā)板的 Platform Flash,此為PROM文件形式),以及SD 卡/ 鼠標(biāo)接口硬件的構(gòu)造詳圖。
RISC處理器
該處理器由算術(shù)邏輯單元、由16 個(gè)32 位寄存器組成的陣列和帶指令寄存器、IR 及程序計(jì)數(shù)器PC 的控制單元組成。Verilog 模塊RISC5 就是該處理器的典型代表。
該處理器具有20 種指令:4 種用于移動(dòng)、偏移和旋轉(zhuǎn);4 種用于邏輯運(yùn)算;4 種用于整數(shù)運(yùn)算;4 種用于浮點(diǎn)運(yùn)算;2 種用于存儲(chǔ)器訪問(wèn);2 種用于分支。
RISC5 通過(guò)運(yùn)行環(huán)境RISC5Top導(dǎo)入。該運(yùn)行環(huán)境包括到各種(內(nèi)存映射)器件和SRAM(256M×32 位)的接口。整個(gè)系統(tǒng)(圖1)包括以下Verilog 模塊(見(jiàn)行統(tǒng)計(jì)):
?
圖1 – 該系統(tǒng)及其所含Verilog模塊的方框圖
?
?
我將內(nèi)存映射到黑白VGA 顯示器中,這樣它只占用1024×768×1位/ 像素=98304 字節(jié),基本上占 1MB 可用主內(nèi)存的10%。該SD 卡將取代初始系統(tǒng)中80MB 的硬盤(pán)驅(qū)動(dòng)器,其可通過(guò)能夠接受并序列化字節(jié)或32 位字的標(biāo)準(zhǔn)SPI 接口進(jìn)行存取。鍵盤(pán)和鼠標(biāo)通過(guò)標(biāo)準(zhǔn)PS-2 串行接口連接。此外,還提供一根串行異步的RS-232 線和一個(gè)通用8 位并行的I/O接口。模塊RISC5Top 還帶有一個(gè)每毫秒采用增量式計(jì)數(shù)的計(jì)數(shù)器。
OBERON操作系統(tǒng)
該操作系統(tǒng)軟件由包括內(nèi)存分配器(帶垃圾回收器)的內(nèi)核、文件系統(tǒng)以及引導(dǎo)載入程序、文本系統(tǒng)、瀏覽器系統(tǒng)和文本編輯器組成。
名為“Oberon”的模塊是中心任務(wù)調(diào)度程序,而“System”是基礎(chǔ)命令模塊。通過(guò)點(diǎn)擊顯示器上任何瀏覽器文本“M.P”上的中間按鈕即可觸發(fā)動(dòng)作,其中P 是模塊M 聲明的程序名。如果M 不存在,則會(huì)自動(dòng)加載。但是,大多數(shù)文本編輯命令是通過(guò)簡(jiǎn)單的鼠標(biāo)點(diǎn)擊觸發(fā)的。其中,左邊一欄按鈕用來(lái)設(shè)置" 脫字" 符,標(biāo)記文本位置,右邊一欄按鈕用來(lái)選擇文本字段(text stretch)。
“Kernel”模塊包括磁盤(pán)存儲(chǔ)管理和垃圾回收器。我保證觀察瀏覽器是平鋪的,不重疊。標(biāo)準(zhǔn)布局顯示了多個(gè)瀏覽器的兩條垂直軌跡。只需拖動(dòng)標(biāo)題欄,就可以放大、縮小或移動(dòng)它們。圖2 顯示了在顯示器上運(yùn)行的用戶界面以及Spartan-3 開(kāi)發(fā)板、鍵盤(pán)及鼠標(biāo)。
?
圖2 - 顯示用戶界面的顯示器(Spartan-3開(kāi)發(fā)板在右側(cè))
評(píng)論