計組假期預習微型指南
寫在前面
首先,看到各位學弟學妹們對計組充滿好奇並且想要假期預習一下計組,我本人是很高興的,為了幫助各位學弟學妹們在預習的時候少走點彎路,我以個人名義寫下這篇計組假期預習攻略。
這篇文章的本意並不是讓大家一個暑假搞定全部計組內容,而是讓大家對計組要做的東西有一個基本了解和心理准備。
注意:如果在閱讀本文中遇到陌生名詞,請務必去查一下!
什么是計組
這里我就不復制百度百科了,直接談談6系計組課程的一些事宜
首先,計組分為兩門課程。
-
計算機組成(4學分,可能變化)
這門課程主要是講授數字電路的一些基本知識與計算機各個組成部分的理論知識。雖然,這門課程被稱為計組理論課,但是,實驗課要用到的方法都是在理論課上講授,所以,萬萬不可掉以輕心。
這門課程的教學內容可以參考往年課件,具體方法,可以在北航課程中心搜索"計算機組成"(登陸狀態可查看相應課程資源,下載課件)。 -
計算機組成課程設計(3學分,可能變化)
這就是讓6系學子叫苦連天的計組大魔王了。它不僅僅需要計算機的各種原理知識與代碼能力,同時是6系本科階段第一門要求一定的工程素養的學科。對於多數人來說,這門課程會是一個前所未有的挑戰。
說這門課程難,的確,多數6系本科生在此時不具備要求的工程能力,但是,就我個人看來,這門課程的難度還沒到憑借努力無法克服的程度。計組課設課程內容:
大致內容是以闖關制(前一個實驗如果沒通過,不可以進行下一個實驗)的方式來完成若干個實驗。
每個實驗分為課下部分與課上測試部分,計組課設的學時就是課上測試部分。課下部分雖然沒有計入學時,但是占了計組課設絕大部分時間。
更多詳細內容就請大家期待開學之后老師們的講解吧,畢竟介紹課程制度不是本篇博客的目的~課程結構示意圖,具體教學內容與順序因各個老師不同而有微小差別。
計組課設涉及的工具與語言
這里將給大家簡單介紹一下計組課設所涉及的工具和語言,以及一些要點。限於篇幅與本文的目的,更多的坑還需要大家自行發現。
- logisim
一款數字電路仿真軟件,主要操作還是靠鼠標繪制電路連線以實現特定功能。建議諸位在預習的時候可以在熟悉這個軟件的同時學習一些數字電路的基本知識。 - 匯編部分
- MIPS匯編語言
- 什么是MIPS?
MIPS是一套體系結構,可以理解為符合某一類規范的計算機的指令集架構(ISA instruction set architecture)。除此之外還有著名的x86、ARM等等。- 什么是匯編語言
大家所學習過的C語言在編譯之后得到的就是匯編語言構成的代碼,再經過匯編器,就可以得到直接在計算機上運行的機器語言。不同體系結構使用的是不同的匯編語言。 - 對於初學者,上面這些估計很難理解,所以建議大家先自行百度,抱着疑問去預習。
- 什么是匯編語言
- Mars
MIPS匯編語言的仿真工具。前文提到了,不同架構的計算機使用不同的匯編語言,多數同學使用的PC機也不是MIPS架構的,同時,我們希望能夠清楚地觀察匯編語言的執行情況,那么,我們就需要一款仿真軟件,也就是本課程使用的Mars。這個軟件的目的就是便於大家觀察匯編語言的執行情況,並且自己動手用匯編語言編寫程序。
- Verilog部分
- HDL(硬件描述語言)
用來描述數字電路構成的語言,用於構建電路模型。在大家熟悉的C程序中,代碼總是一條一條地執行,即,串行。但是這在HDL中則不成立了,電路是並行的!
想要明白這一點,大家必須要明白,HDL是描述硬件的,是用代碼描述一個實體,這個實體上有很多個電路,這些電路同一時刻都是在工作的。這一點必須明白,這是初學者從高級語言到HDL經常犯錯的地方。 - Verilog
硬件描述語言的一種,注意,Verilog和System Verilog不是一回事。 - ISE
硬件描述語言既然被發明出來,顯然不僅僅是用來光給人描述的,可以用於FPGA相關。
這里簡單說說啥是FPGA,大致就是,可以燒錄我們用HDL描述的電路的一塊電路板。但是FPGA本身不具備將HDL轉化為具體電路模型的功能。
那么,如何將HDL語言轉化為具體的電路模型呢?
這就需要相應的工具了,ISE就是將Verilog轉化為具體電路模型的工具。 - ISim
描述了電路模型,我們怎么在不燒錄(燒錄的概念您們應該在電設接觸過,不過當時您們是把程序燒錄到板子上,這里的燒錄指的是把您們電路的設計變成一個可以使用的“板子”)到FPGA的前提下測試我們的電路是否存在BUG呢,這就需要電路仿真軟件了,ISim就是ISE配套的仿真軟件。
仿真軟件通過模擬我們所描述的電路的運行並反饋相應現象幫助我們檢查我們的電路是否能夠正常運行。
- HDL(硬件描述語言)
開始計組實驗預習前的准備
雖然,前文說過,計組理論課和實驗課不完全重合且側重點不一樣,但是,一定的理論基礎是實驗課的基礎,所以,請諸位開始正式的計組實驗課程預習之前務必對基礎的理論知識進行學習。大致可以參考以下內容。
注意!這些理論內容已經涉及了計組實驗的大部分內容,沒必要在預習階段完全掌握。大家在學習理論的同時加以實踐,注意同步即可
- 《數字設計和計算機體系結構》(涉及章節的章節小結,最好看看)
-
二進制基礎(1.2~1.5)
-
第二章全部
-
第三章全部
-
注意!第一章至第三章可以歸結為數字電路基礎知識
-
第四章部分使用的不是Verilog,所以建議這一部分用后文會介紹的《Verilog數字系統設計教程》進行學習,詳細內容后文介紹。
-
數字模塊(5.1~5.5)
-
MIPS體系結構介紹與匯編語言學習:第六章除了x86部分都是必看!(如果存在疑惑可以閱讀《MIPS體系結構透視》或查閱其他資料,此外,在這里推薦肖利民老師對應部分的教學課件)
-
CPU設計(7.1~7.7)關於CPU設計部分的學習,我覺得用這本書作為一個大致的了解即可,即,明白什么是CPU、有哪些主要模塊、指令是怎么由CPU執行的、多周期CPU原理、流水線原理。真正到了CPU設計部分的話,還是建議參考高小鵬老師對應部分的課件。
-
《Verilog數字系統設計教程》(如果有覺得迷惑的地方可以自行百度)
-
基礎概念與語法:第一章至第七章(第七章部分除7.7外了解即可)
-
對電路不同抽象層級的描述:第九章(9.3了解即可)
-
可綜合的狀態機設計:第十二章至第十三章
(注意:實際上,文中提及的有些語句寫上即使了也可以綜合,只是在綜合的時候被忽略了,比如
initial
。) -
阻塞式賦值與非阻塞式賦值的異同
理解Verilog神必的reg -
《MIPS體系結構透視》
這本書中的多數內容作為預習可能有些過火,但是這本書中有很多對於初學者起重要學習補充作用的部分,故我把這本書列入了預習范圍中。- 補充內容——MIPS規范的學習:第九章和第十一章。
- 異常中斷:第三章與第五章(注意!這部分內容已經是計組實驗中靠后部分的內容,建議在能夠實現流水線CPU之后再進行學習)
-
往屆計組實驗指導書
指導書中包含了本次的實驗目標與一些基本的提示信息,本人提供的資料中不包含這些內容。 -
高小鵬老師的教學課件
如果您們覺得前文所提及的資料太難、太多難以直接入門的話,可以先通過高老師的教學課件入門,然后閱讀資料深化認識。
上述資料大抵都能在課程中心通過搜索"計算機組成"找到,我只是一個搬運工~
附贈資料
某盤鏈接:
鏈接:https://pan.baidu.com/s/1aHy1MZfPMXRMlh3Md3tFfg
提取碼:249m
切記,理論和實踐並重。完完全全把理論學完了再來實踐是不行的!
預習目標
前文介紹了需要的理論知識,並沒有把每一部分實驗需要哪些理論基礎給大家做一個說明,下面就完成這件事。
這里給大家按照難度級別划分幾個預習目標(難度逐級增加),大家量力而為。
-
難度一
熟悉logisim的基本使用,能夠使用logisim構建具有一定功能的時序電路(可以參考高老師課件的課后作業部分也可以參考《數字設計和計算機體系結構》的部分課后習題)需要的理論基礎
- 數字電路基礎知識
-
難度二
熟悉Mars的基本使用能夠用MIPS匯編編寫具有一定功能的程序並且具備使用Mars調試匯編代碼的能力。練手題目可以根據大家學習C語言時做過的題目進行練習。
需要的理論基礎- 數字電路基本知識
- MIPS匯編基礎
- MIPS軟件標准 《MIPS體系結構透視》(進階內容)
-
難度三
注意!本部分建議與Verilog的學習同步進行成功安裝ISE(不要安裝Win10版!),熟悉ISE的使用,尤其要懂得綜合(synthesize)功能的使用。學會使用ISIM進行電路仿真與調試。
練手題目可以參考 難度一 部分的題目,不過這回是要用Verilog實現,建議嘗試 門電路級別描述 與 行為級別描述 兩種方式。
警告:這個部分看起來難點在於Verilog的學習,
實際上ISE與ISIM的使用是一個不亞於Verilog的難點。ISE與ISIM的使用對計組學習影響重大,請大家一定要好好熟悉這個工具需要的理論基礎
- 數字電路基本知識
- Verilog語法知識
-
下面就是CPU設計部分的內容了,大家可以參考高老師的課件進行學習
-
難度四
這個任務主要是讓大家直觀地感受什么是CPU,所以,在預習階段,沒必要在這個任務上苛求完美使用logisim實現單周期CPU,指令集可以參考《數字設計和計算機體系結構》對應部分內容,自行用Mars編寫匯編代碼並導出機器碼,將機器碼導入logisim中CPU的模塊中進行測試
-
難度五
把 難度四 中的CPU通過Verilog實現
其中,測試程序的導入可以通過Verilog的$readmemh
實現,如果不僅僅希望通過仿真波形進行觀察,還可以加入$display
進行調試。 -
難度六
實現一個多周期CPU,指令集參考《數字設計和計算機體系結構》對應內容。為什么不讓您們實現流水線呢?因為一個暑假預習到能夠實現流水線的程度不太現實。
有關軟件的一些教程
Logisim
Mars
這個軟件教程不多(實際上,功能也不復雜,大家摸索下基本上都能玩明白)
多用HELP
功能是好習慣。
ISE
ISE安裝教程(筆者當時預習的時候是按照這個教程來的,如果不能用的話大家就再四處找找,配環境是挺麻煩的的步驟)
ISE基本使用教程(看到波形仿真即可,后面的板級綜合暫時用不到)
ISIM使用指南(這個教程當年救了筆者的狗命)
如果這些教程還不夠的話,大家自己再找找鴨~ 自主尋找資料遲早都要經歷的鴨~
結語
筆者所列舉的預習內容確實有些多了,並且在學習順序上也可能存在着不完善的地方,希望大家在學習過程中根據自身情況進行取舍。
最后,再次重申和提醒,這篇文章並沒有也做不到把計組全部的坑給列出來,僅僅是給各位希望預習計組的同學指一條不那么彎的路,具體的學習還望大家發揮主觀能動性。