太久不寫(xiě)博客暑认,再次提筆時(shí),總是一籌莫展大审、萬(wàn)般痛苦蘸际。這次就先來(lái)幾篇隨意點(diǎn)的博客練練手吧!
從畢業(yè)開(kāi)始徒扶,就一直很想寫(xiě)幾篇博客回顧一下在大學(xué)里學(xué)習(xí)的幾門(mén)很有意思又很有用的課程×竿現(xiàn)在一晃,工作已經(jīng)五年了姜骡,說(shuō)長(zhǎng)不長(zhǎng)导坟、說(shuō)短也不短,也該是時(shí)候?qū)扅c(diǎn)東西來(lái)回顧和感激在大學(xué)所學(xué)的課程溶浴。
《C語(yǔ)言》《數(shù)據(jù)結(jié)構(gòu)與算法》等一些基礎(chǔ)的課程作為軟工工程的入門(mén)學(xué)科乍迄,重中之重,就留到以后來(lái)寫(xiě)士败。這次我想先來(lái)回顧大學(xué)的一位老師教授的三門(mén)課闯两,對(duì)我影響深遠(yuǎn)的三門(mén)課:《計(jì)算機(jī)結(jié)構(gòu)與組成》、《計(jì)算機(jī)圖形學(xué)》和《人工智能》谅将。三門(mén)課是由同一位老師教授漾狼,三門(mén)高深而又復(fù)雜的課程,但又非常的有趣和痛苦饥臂,我們一個(gè)個(gè)的來(lái)慢慢絮叨絮叨逊躁。
首先說(shuō)說(shuō)《計(jì)算機(jī)結(jié)構(gòu)與組成》,作為大一下學(xué)期就開(kāi)設(shè)的課程隅熙,對(duì)我們這些剛接觸編程沒(méi)多久的新人來(lái)說(shuō)還是有些難度的稽煤。當(dāng)然即便是難,也要硬著頭皮學(xué)完囚戚、學(xué)會(huì)酵熙。至于課程內(nèi)容吧,沒(méi)啥好說(shuō)的驰坊,跟國(guó)內(nèi)很多的大學(xué)教的一樣匾二,講講計(jì)算機(jī)的發(fā)展歷史,各個(gè)模塊的功能、介紹一下操作系統(tǒng)等等察藐。而之所以要拿來(lái)出來(lái)敘敘舊皮璧,主要還是因?yàn)檫@門(mén)課的課后大作業(yè):設(shè)計(jì)CPU。
說(shuō)是設(shè)計(jì)CPU分飞,其實(shí)并不是真的設(shè)計(jì)一個(gè)能在主板上真實(shí)可用的CPU悴务,而是使用Logisim軟件來(lái)設(shè)計(jì)一個(gè)16位單時(shí)鐘周期的CPU。具體請(qǐng)看如下作業(yè)信息要求:
具體制作過(guò)程就不細(xì)細(xì)講解了浸须,我們直奔最后的結(jié)果吧惨寿。
在這個(gè)課程的最后,我當(dāng)然是非常完美的完成了這個(gè)作業(yè)删窒,設(shè)計(jì)了一個(gè)屬于自己的另類CPU裂垦,并且可以準(zhǔn)確執(zhí)行一段提前編碼好的小程序。
(ps:其實(shí)也不是很完美啦肌索,有些地方的設(shè)計(jì)還有很高的優(yōu)化空間蕉拢,當(dāng)然一些地方的設(shè)計(jì)也不是最合理的,一起其實(shí)也只是勉強(qiáng)能用而已诚亚,嘿嘿~~~)
在看最后運(yùn)行的效果前晕换,首先來(lái)看看這個(gè)另類CPU的整體布局吧:
這是CodeRAM模塊
這個(gè)是PC模塊
這個(gè)是OP模塊:
DataPath模塊:
這個(gè)是RegFile模塊:
ALU模塊:
不知名模塊:
嗯,更多的就不截取了站宗,反正就是這一堆的線路圖闸准,很多我也不知道該怎么解釋了,時(shí)間有點(diǎn)久遠(yuǎn)了梢灭。
把這些組合在一起就成了CPU的內(nèi)部邏輯夷家,然后配置上代碼內(nèi)存和數(shù)據(jù)內(nèi)存(代碼的內(nèi)存和數(shù)據(jù)的內(nèi)存是分開(kāi)的)、時(shí)鐘等等就是一個(gè)可以運(yùn)行一段小程序的計(jì)算機(jī)了敏释。
后面為了驗(yàn)證這個(gè)CPU的可運(yùn)行库快,且沒(méi)有出錯(cuò),自己設(shè)計(jì)了一小段匯編程序钥顽,并手工轉(zhuǎn)碼成16進(jìn)制义屏,如下所示:
中間為匯編指令,后面為轉(zhuǎn)碼后的16進(jìn)制蜂大。
內(nèi)存的初始數(shù)據(jù)如下:
然后只需運(yùn)行這段小程序闽铐,在進(jìn)行一些運(yùn)算后,內(nèi)存的數(shù)據(jù)變成了如下的形式:
上面看的是理論數(shù)據(jù)奶浦,下面我們來(lái)看看實(shí)際的運(yùn)行效果:
以上兄墅,收!