|
進(jìn)入波形仿真后點(diǎn)擊運(yùn)行按鈕即可出波形,下面我們來(lái)驗(yàn)證我們的cpu代碼是否正確 大家先看兩個(gè)圖,等會(huì)小墨同學(xué)會(huì)結(jié)合這兩個(gè)圖給大家細(xì)細(xì)講解仿真過(guò)程 我們先來(lái)看第一個(gè)過(guò)程 上電后,cpu先從ROM中讀回兩個(gè)周期的數(shù)據(jù),是從ROM的0地址開(kāi)始的,再對(duì)比我們之前定義好的ROM,數(shù)據(jù)讀取正確,讀回的數(shù)據(jù)的前三位是111,即指令碼JMP,后13位003c為地址碼,JMP指令是將讀回的數(shù)據(jù)作為新的地址碼來(lái)讀取相應(yīng)地址的數(shù)據(jù)。那么,下一步,cpu應(yīng)該是從ROM的003c地址處讀數(shù)據(jù)才對(duì),再看一下波形 對(duì)比波形后可知,cpu正好是從003c處讀取數(shù)據(jù),讀到的數(shù)據(jù)指令碼位111即JMP,地址碼位0006,再到ROM的0006地址處看 這次讀回的指令碼位101,即LDA,也就是說(shuō)將后13位地址碼對(duì)應(yīng)的RAM中的數(shù)據(jù)讀回,送到累加器中,想一下,這時(shí)的RAM應(yīng)該是打開(kāi)的,而且雙向輸入輸出口的數(shù)據(jù)總線(xiàn)上應(yīng)該是來(lái)自RAM的8位數(shù)據(jù),由于ROM0006地址處的地址碼為1800是13位的,而RAM的地址是9位的,因此實(shí)際上我們從RAM中讀回的數(shù)據(jù)是從RAM的0地址讀回的,即我們之前給RAM寫(xiě)好的0000_0000,再看一下波形 正如我們所想的一樣,數(shù)據(jù)總線(xiàn)上是0000_0000,RAM是打開(kāi)的,地址為1800 就這樣,讀者可以自己再試一下,看看我們的cpu是不是按照我們之前給他的程序運(yùn)行的,在這里我就不再給大家一一介紹了 雖然波形仿真很直觀(guān),但是看久了就會(huì)令人眼花繚亂,尤其是數(shù)據(jù)很多的時(shí)候,我們只能看其中一部分,不能講所有數(shù)據(jù)看完整,這時(shí)候我們單單是用波形來(lái)仿真就遠(yuǎn)遠(yuǎn)不夠了,下面介紹用系統(tǒng)任務(wù)仿真的過(guò)程 再回到我們的代碼,還記得小墨同學(xué)注釋掉了一些代碼吧,我們把那些代碼給加上 我以其中一個(gè)過(guò)程為例 假設(shè)讀回的指令碼位101,即LDA,如果我在fentch_8的高電平期間且在cpu輸出地址為奇數(shù)的時(shí)候記錄一下此時(shí)的時(shí)間、指令、地址、目的地址、數(shù)據(jù)的話(huà)就可以不用看波形,讓電腦來(lái)幫助我們來(lái)分析了,因此作如下處理 這里我延時(shí)60ns,是因?yàn)榈谝淮斡涗浀臅r(shí)候數(shù)據(jù)總線(xiàn)上還沒(méi)有數(shù)據(jù),只有延時(shí)一會(huì)才會(huì)有數(shù)據(jù),即上面那張波形圖右邊那根黃色的線(xiàn)處記錄一下數(shù)據(jù),并將其顯示。我們也可以加上一下標(biāo)注,來(lái)幫助我們觀(guān)察 這樣我們?cè)賮?lái)仿真的時(shí)候就不用看波形了,直接打開(kāi)transcript一欄觀(guān)察記錄即可 這樣便可以為我們省下大量的仿真時(shí)間 這里小墨同學(xué)只做一個(gè)事例,其實(shí)有很多細(xì)節(jié)還需要各位讀者自己挖掘,小墨同學(xué)在做這個(gè)實(shí)驗(yàn)的時(shí)候也遇到過(guò)不少問(wèn)題,但是問(wèn)題總是要解決的,希望各位讀者不要老借助于教程,遇到問(wèn)題需要自己解決,自己考慮一下應(yīng)該怎么修改,這樣學(xué)到的知識(shí)才是最牢固的。 這里小墨同學(xué)只做第一個(gè)測(cè)試,第二第三個(gè)測(cè)試留給讀者自己完成,我已上傳過(guò)代碼,希望廣大讀者多提意見(jiàn),大家共同進(jìn)步 純手打~謝謝各位大神支持~ |