白家璇 辛雨雯 崔天宇
關(guān)鍵詞:JavaScript;虛擬實(shí)驗(yàn);計(jì)算機(jī)組成原理
中圖分類號:G642;TP391 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2023)10-0059-04
0 引言
計(jì)算機(jī)組成原理是中國民航大學(xué)本科計(jì)算機(jī)專業(yè)的專業(yè)基礎(chǔ)課,通過學(xué)習(xí),體會(huì)到本課程的實(shí)踐性很強(qiáng),需要?jiǎng)邮植僮鲗?shí)踐才能真正理解理論內(nèi)容,但傳統(tǒng)的只在實(shí)物實(shí)驗(yàn)箱上進(jìn)行實(shí)驗(yàn)操作存在很多不足。譬如:1)固化的內(nèi)部電路,內(nèi)部的每個(gè)功能模塊硬件電路已焊接好,只需連接I/O導(dǎo)線即可搭建電路連接圖,對硬件電路缺乏設(shè)計(jì)動(dòng)手能力的培養(yǎng),而且也只能做相對固定的實(shí)驗(yàn),不方便擴(kuò)展,難于進(jìn)行設(shè)計(jì)性和綜合性實(shí)驗(yàn),更新?lián)Q代等都很難跟上時(shí)代的發(fā)展需求;2)已經(jīng)封裝好的實(shí)驗(yàn)箱,其內(nèi)部的實(shí)現(xiàn)原理、運(yùn)行狀態(tài)等都無法直接觀察;3)實(shí)驗(yàn)室的開放時(shí)間有限,因人力資源、學(xué)生自身的上課安排、實(shí)驗(yàn)室課程安排等現(xiàn)實(shí)原因造成大多數(shù)情況下,學(xué)生能使用實(shí)驗(yàn)箱的時(shí)間遠(yuǎn)遠(yuǎn)不足,學(xué)生的實(shí)驗(yàn)時(shí)間和空間受到極大限制;4)在實(shí)驗(yàn)連線時(shí),容易對同顏色的接線進(jìn)行混淆,同時(shí),如果實(shí)驗(yàn)箱有問題或者部分接線的損壞,對于學(xué)生來說都是未知的,在排查錯(cuò)誤時(shí),不容易將這些硬件的自身問題找出來,會(huì)導(dǎo)致實(shí)驗(yàn)效率低下[1]。本文主要介紹一種基于JavaScript設(shè)計(jì)開發(fā)的實(shí)驗(yàn)仿真平臺,配合實(shí)物實(shí)驗(yàn)箱進(jìn)行實(shí)驗(yàn),能大大提高學(xué)生的實(shí)驗(yàn)和學(xué)習(xí)效率。
1 系統(tǒng)設(shè)計(jì)方案
本系統(tǒng)在功能上主要開發(fā)數(shù)字邏輯課程中的基本邏輯元器件,譬如與、或、非等各種門電路,D觸發(fā)器等芯片,對所生成的器件功能驗(yàn)證完成之后,再將這些器件組合應(yīng)用于計(jì)算機(jī)組成原理課程的各種功能模塊的設(shè)計(jì)實(shí)驗(yàn)中,譬如運(yùn)算器、微程序控制器、總線電路、RAM存儲(chǔ)器讀/寫、模型機(jī)的模擬實(shí)驗(yàn)等[2]。在此基礎(chǔ)上,作為擴(kuò)展可以再完成微機(jī)接口技術(shù)課程的實(shí)驗(yàn),譬如8253計(jì)數(shù)器/定時(shí)器、8255A并行傳送、8259A中斷等。其中的每一個(gè)器件或模塊都是分解成一個(gè)個(gè)小的實(shí)驗(yàn)分步實(shí)現(xiàn),最后再組合形成一個(gè)具有獨(dú)立功能的模塊。
系統(tǒng)前端采用HTML、CSS、VML 工具,其中CSS實(shí)現(xiàn)系統(tǒng)外觀的設(shè)計(jì)及各個(gè)部件的具體外形,VML實(shí)現(xiàn)組件間的線路連接生成功能;后端采用JavaScript工具;通過UI界面選擇實(shí)驗(yàn)所需芯片;通過HTML5File API將電路保存為.txt文件(.txt文件具有還原電路功能);選用Webstorm作為代碼編譯平臺(Webstorm具有項(xiàng)目重構(gòu)、快捷搜索、自動(dòng)排版、代碼提示、錯(cuò)誤提示等優(yōu)點(diǎn))。另外,還需引入組件調(diào)度模塊,因?yàn)樵谕ㄟ^組件庫與電路繪制模塊設(shè)計(jì)好電路圖之后,運(yùn)行時(shí)還需要解決如何讓各個(gè)組件協(xié)調(diào)有序的工作,否則會(huì)出錯(cuò)。系統(tǒng)總體功能模塊結(jié)構(gòu)如圖1所示。
2 系統(tǒng)芯片設(shè)計(jì)
本系統(tǒng)開發(fā)涉及邏輯與、或等各種門電路器件的設(shè)計(jì),74LS139、74LS175、74LS273、74LS374等多個(gè)數(shù)字功能器件的設(shè)計(jì),continuousPulse等多個(gè)基本原件的設(shè)計(jì)、EPROM2716只讀存儲(chǔ)器等多個(gè)存儲(chǔ)芯片的設(shè)計(jì)和SuqueTimer脈沖發(fā)生器的設(shè)計(jì)和運(yùn)算器等多個(gè)模塊的設(shè)計(jì)。
2.1 數(shù)字功能器件設(shè)計(jì)
設(shè)計(jì)一個(gè)芯片器件,首先需通過代碼定義每個(gè)芯片的外觀,主要包括定義芯片上對應(yīng)位置引腳的類型type、數(shù)據(jù)源器件source、中間器件intermediat、目的器件destination等,每個(gè)芯片的設(shè)計(jì)大同小異,本文以74LS273為例介紹數(shù)字功能器件的設(shè)計(jì)方法。涉及的外觀屬性主要有:id—芯片編號(唯一,為后面設(shè)計(jì)前端時(shí)引用);type—寄存器上對應(yīng)位置引腳類型;source—數(shù)據(jù)源器件;intermediate—中間器件;destination—目的器件;name—器件外觀顯示名稱;width—器件外觀寬度;Height—器件外觀高度;PaddingLR—器件左右邊距;Pinname—器件引腳名稱,Pinwidth—器件引腳寬度(不小于16)。
芯片外觀設(shè)計(jì)好后,還需對芯片的運(yùn)算條件進(jìn)行設(shè)計(jì)與判斷。74LS273首先對用戶的輸入值進(jìn)行有無變化的判斷,如果有變化,返回true,否則返回false,同時(shí)判斷mr、cp的值(mr為pinNO=0的引腳,cp為pinNo=10的引腳),此處mr為0,處于清0狀態(tài),判斷函數(shù)返回true不為0時(shí),通過cp時(shí)鐘信號對數(shù)據(jù)進(jìn)行鎖存。對于74LS273的功能實(shí)現(xiàn)函數(shù),還需判斷其pinNo是否為0,即mr 引腳,如果本引腳處于低電平,則74LS273芯片處于清0狀態(tài),否則正常輸出[3-4]。在本74LS273的設(shè)計(jì)中通過使用for循環(huán)實(shí)現(xiàn)芯片的功能函數(shù),具體編程代碼如圖2所示。
2.2 基本原件設(shè)計(jì)
本文以continuousPulse為例介紹基本原件的設(shè)計(jì)方法,主要討論其工作方式。對于是否已達(dá)到運(yùn)算標(biāo)準(zhǔn)的函數(shù)判斷,因?yàn)榇斯δ芟喈?dāng)于給一次脈沖,一旦按下這個(gè)脈沖,器件就到達(dá)了運(yùn)算條件,所以只需要簡單地判斷輸入端口是否有值輸入即可。
對于輸入引腳值的設(shè)置,系統(tǒng)中使用了if結(jié)構(gòu)進(jìn)行判斷,如果設(shè)置輸入的值為0,則將其值設(shè)置為1,否則設(shè)置為0,同時(shí)判斷芯片是否達(dá)到了運(yùn)算條件[5-6]。
2.3 虛擬組件設(shè)計(jì)
本文以EPROM2716c4為例介紹虛擬組件的設(shè)計(jì)方法,其重要引腳為第11(ce)與12(oe)引腳。首先判斷芯片所有的值是否已經(jīng)輸入,如果ce片選信號與oe讀信號中有一個(gè)輸入,則返回True,否則返回False;對于只讀存儲(chǔ)器是否滿足運(yùn)行條件的判斷,需通過輸入值進(jìn)行,如果輸入的值沒有變化,就無須再重新計(jì)算,當(dāng)ce或oe中有一個(gè)引腳的值為1時(shí),則各個(gè)io引腳變?yōu)楦咦钁B(tài)。
3 計(jì)算機(jī)組成原理仿真實(shí)驗(yàn)
3.1 全加器仿真實(shí)驗(yàn)
全加器仿真實(shí)驗(yàn)的電路圖設(shè)計(jì)如圖3所示,共用到3個(gè)與門、2個(gè)或門、2個(gè)異或門,3個(gè)輸入、2個(gè)輸出(輸入、輸出見表1)。當(dāng)Ai和Bi異或后再與Ci-1進(jìn)行異或可得到SUMi,當(dāng)Ai、Bi、Ci-1中只要有兩個(gè)以上的輸入為1,則進(jìn)位Ci=1。所以,只需要將其中的兩個(gè)變量求與,然后再將結(jié)果求或,具體邏輯表達(dá)式為:
此全加器共有3個(gè)輸入量,按照所設(shè)計(jì)的進(jìn)行電路連接,分為輸出“和”SUMi、進(jìn)位輸出Ci,這樣就設(shè)計(jì)了一個(gè)“1位加法器”[7-8]。
按照圖3的設(shè)計(jì)進(jìn)行電路連接,得到如圖4所示的電路圖。
由圖3、圖4和表1可知,此全加器設(shè)計(jì)都用1作為輸入(3個(gè)開關(guān)均為輸入),在遇到第二個(gè)與門時(shí),因?yàn)榈谌艦楫惢蜷T,所以就會(huì)有1個(gè)0的輸入,在左邊的最后一個(gè)與門處,會(huì)接受右分支輸入的1個(gè)0,這個(gè)右分支的0與左分支的1相與,最后輸出0結(jié)果,小燈滅;同時(shí)可以看到,如果右邊的小燈為異或,相對于左邊,則一個(gè)輸入為0,另外一個(gè)輸入為1,兩者相與,就能得到1,右邊的小燈就會(huì)不斷閃爍,與實(shí)驗(yàn)結(jié)果相符。此時(shí),如果把左邊的與門改成異或門,原理上左邊的小燈應(yīng)該會(huì)亮[9],仿真實(shí)驗(yàn)結(jié)果也得到了證實(shí),如圖5所示。
3.2 RAM 仿真實(shí)驗(yàn)
本文以RAM6116隨機(jī)存儲(chǔ)器芯片的讀/寫操作實(shí)驗(yàn)仿真為例,驗(yàn)證RAM的讀/寫操作以及AR地址寄存器的地址寫入功能,驗(yàn)證實(shí)驗(yàn)電路圖的設(shè)計(jì)如圖6所示,用到了系統(tǒng)所設(shè)計(jì)的74LS273和74LS245芯片,其中74LS273作為AR地址寄存器使用,同時(shí)也作為總線向RAM6116進(jìn)行寫數(shù)據(jù)的傳輸寄存器,74LS245作為一條總線向RAM6116寫入中間數(shù)據(jù)寄存器使用,起暫存數(shù)據(jù)作用,其他的還用到控制數(shù)據(jù)輸入開關(guān),給“與”上升沿脈沖的單脈沖信號P1、P2及用于數(shù)據(jù)顯示的顯示燈使用。
此RAM6116的實(shí)驗(yàn)原理:SW7-SW0數(shù)據(jù)開關(guān)用于設(shè)置讀/寫地址和欲寫入存儲(chǔ)器的數(shù)據(jù),經(jīng)三態(tài)門74LS245與總線相連,通過總線把地址發(fā)送至AR。靜態(tài)存儲(chǔ)器由1片6116(2K×8)構(gòu)成,但地址輸入引腳A8~A10接地,因此實(shí)際存儲(chǔ)容量為256字節(jié),其余地址引腳A0~A7與AR相連,讀和寫的地址均由AR給出。6116的數(shù)據(jù)引腳為輸入、輸出雙向引腳,與總線相連,既可從總線輸入要輸?shù)臄?shù)據(jù),也可以通過總線輸出數(shù)據(jù)到數(shù)據(jù)燈顯示。共使用了兩組顯示燈,一組顯示從存儲(chǔ)器讀出的數(shù)據(jù),另一組顯示存儲(chǔ)單元的地址[10]。
讀數(shù)據(jù)時(shí),在數(shù)據(jù)開關(guān)上設(shè)置好要讀取的存儲(chǔ)單元地址,并打開三態(tài)門74LS245,LDAR置1,發(fā)出P2脈沖,將地址輸入6116,設(shè)置6116為讀操作,即可讀出數(shù)據(jù)并在數(shù)據(jù)燈上顯示。
寫數(shù)據(jù)時(shí),先在數(shù)據(jù)開關(guān)上設(shè)置好要存儲(chǔ)單元的地址,并打開三態(tài)門74LS245,LDAR置1,發(fā)出一個(gè)P2脈沖,將地址送入6116,然后在數(shù)據(jù)開關(guān)上設(shè)置好要寫入的數(shù)據(jù),確保三態(tài)門打開,設(shè)置6116為寫操作,發(fā)出一個(gè)P1脈沖,即可將數(shù)據(jù)寫入。RAM驗(yàn)證實(shí)驗(yàn)電路圖和如此相連的電路圖如圖7和圖8所示。設(shè)置電路的初始狀態(tài)為MR=1、CE=1、SW-BUS=1。
1)寫操作仿真。以存入11H 為例,調(diào)節(jié)SW7~SW0為存入的地址00000001,LDAR和WE都置為1,打開SW-BUS,點(diǎn)擊P2,觀察到中間一排燈泡僅最后一個(gè)點(diǎn)亮,即操作無誤;關(guān)閉SW-BUS,調(diào)節(jié)SW7~SW0為存入的數(shù)據(jù)00010001,打開SW-BUS,然后打開CE,點(diǎn)擊P1,可以觀察到上面一排燈泡為00010001,1為亮0為暗(如圖8所示),即操作無誤,關(guān)閉CE,關(guān)閉SW-BUS。重復(fù)上述過程直至全部存入[11]。
在圖8中可以看到中間一排燈泡僅最后一個(gè)點(diǎn)亮(操作無誤),上面一排燈泡為00010001(1為點(diǎn)亮0為滅,操作無誤),存入正確。
2)讀操作仿真。以讀取11H為例仿真讀操作,接著以上1)中最后存入的繼續(xù),此時(shí)SW-BUS處于關(guān)閉狀態(tài)。調(diào)整SW7~SW0為00000001,然后打開SWBUS,點(diǎn)擊P2,打開CE和WE,觀察到上面一排燈泡的點(diǎn)亮狀態(tài),然后關(guān)閉CE和SW-BUS。重復(fù)上述過程,直至完成所有數(shù)據(jù)的讀操作[12]。
4 結(jié)束語
本虛擬實(shí)驗(yàn)系統(tǒng)基于JavaScript開發(fā)了許多數(shù)字邏輯組件,大致分為4類:1)74LS181、RAM等芯片器件;2)與、或、非、異或等各種邏輯門電路;3)開關(guān)、小燈、單脈沖和連續(xù)脈沖等基本元件;4)為了屏蔽電路細(xì)節(jié)或?qū)崿F(xiàn)電路簡潔,將多個(gè)功能部件封裝為一個(gè)組件而成的各種虛擬組件,譬如時(shí)序電路組件、EPROM2716。在此基礎(chǔ)上,設(shè)計(jì)了計(jì)算機(jī)組成原理課程實(shí)驗(yàn)中的多個(gè)模塊并進(jìn)行了仿真實(shí)驗(yàn),譬如全加器、運(yùn)算器、微控制器等[13]。新冠疫情期間,配合實(shí)物實(shí)驗(yàn)箱,部分模塊已用在了中國民航大學(xué)計(jì)算機(jī)專業(yè)的計(jì)算機(jī)組成原理課程中。實(shí)踐證明,通過開發(fā)系統(tǒng),大大提高了學(xué)生的分析解決問題能力和創(chuàng)新能力;在實(shí)際教學(xué)中應(yīng)用仿真實(shí)驗(yàn),能有效提高學(xué)生的學(xué)習(xí)熱情和學(xué)習(xí)積極性,收到了事半功倍的學(xué)習(xí)效果,受到了學(xué)生的極大歡迎。
同時(shí),基于JavaScript的開發(fā)平臺也存有一些不足,譬如芯片數(shù)量有限,如果在實(shí)驗(yàn)過程中發(fā)現(xiàn)芯片短缺時(shí),還須重新設(shè)計(jì);通過VML設(shè)計(jì)的連線也有一定的局限性,對于較復(fù)雜的實(shí)驗(yàn),連線很多會(huì)很亂,沒有優(yōu)化機(jī)制。
另外,系統(tǒng)開發(fā)也參考了https://blog.csdn.net/qq_51314467/article/details/124159657 和https://blog.csdn.net/qq_51314467/article/details/124733329網(wǎng)站的相關(guān)內(nèi)容,在此一并表示感謝。