視頻:
如果本次課程對應(yīng)的 Coursera 的視頻打不開半沽,可以點(diǎn)擊下面鏈接
P1W3U3.3 - Memory Units
在開始講存儲單元的時候爽柒,課程先回顧了一下在 P1W2U2.4 ALU 那節(jié)課里提到的馮諾依曼架構(gòu)圖。
如下圖這節(jié)課就來講右下角灰色部分“存儲”(Memory)者填。
老師設(shè)計的存儲只有一個主存儲:RAM (類似內(nèi)存浩村?),不考慮次存儲(比如硬盤)占哟。
老師設(shè)計的主存儲器RAM:即用來存儲被操作的數(shù)據(jù)心墅,也存儲程序。
RAM的實(shí)現(xiàn)原理重邏輯榨乎,而現(xiàn)實(shí)世界的物理實(shí)現(xiàn)不會涉及嗓化。
和DFF一樣,如果想用硬件物理實(shí)現(xiàn)的RAM谬哀,也要做些課外工作
在開始RAM前刺覆,先看看RAM的基礎(chǔ)組成部分“寄存器”。
課程又先回顧了上節(jié)課的 1位寄存器史煎。
寄存器
16位寄存機(jī) 由 16個1位寄存器組成谦屑。
在本課程里,老師不特殊說明的情況下篇梭,Register(寄存器)默認(rèn)都是指16位寄存器氢橙。
讀 寄存器
“讀”寄存器悍手,實(shí)際上就是 16位 out 的輸出。
寫 寄存器
“寫”寄存器,先設(shè)置 In 的值坦康,再設(shè)置 load 為1竣付,這樣在 load 設(shè)置 1 的一個Clock周期后,out就輸出一個Clock周期前In的值了滞欠。
那接下來古胆,用硬件模擬器來用 內(nèi)建的 寄存器 演示一下。
打開硬件模擬器筛璧,選擇 tools/builtInChips/DRegister.hdl
1.設(shè)置 輸入值 (44)和 load值(1)逸绎。
2.因?yàn)閔dl文件里有 CLOCKED ,所以模擬器的鐘表按鈕就可以點(diǎn)擊了夭谤。
點(diǎn)擊一下棺牧。
3.Time 從 0 到 0+(半個Clock),寄存器內(nèi)部變?yōu)?4了朗儒,但是out還沒變陨帆。
4.再點(diǎn)擊一下 “鐘表按鈕”,Time 從 0+ 到 1(完成一個Clock周期)采蚀。out變成44疲牵。
RAM 單元
1.學(xué)習(xí)了寄存器,RAM就是有n個有序排列寄存器組成的榆鼠。從0到n-1纲爸。
2.在任何一個時間點(diǎn),只有一個寄存器被選中妆够,從out/w 輸出识啦。
3.如何選擇寄存器,需要一個地址(address)神妹,地址由k位組成颓哮。
4.課程 Hack小電腦 的 w(word width)默認(rèn)為 16位。
5.RAM 的示意圖 底部 也是有 小三角鸵荠,所以也是時序電路冕茅,圖中左下,寫出了HDL語言如何編寫蛹找。
讀 RAM
設(shè)置 地址(address)届慈,例如 i徒溪。設(shè)置 load 為 0(讀操作)忿偷。
那么RAM的 out 此時的輸出,就是 選中的 “寄存器 i ” 的 out
寫 RAM
1臊泌、設(shè)置地址為 i (address = i)
2鲤桥、設(shè)置數(shù)據(jù)為 v (in = v)
3、設(shè)置load 為 1 (寫操作)
模擬器演示
操作演示缺虐,打開 tools/builtInChips/RAM8.hdl
寫操作
地址選擇1
設(shè)置load為1(寫)
輸入In 設(shè)為44
點(diǎn)一下鬧鐘按鈕(走半個Clock周期)
RAM里的寄存器1就被設(shè)置成了44
如果再點(diǎn)一下鬧鐘按鈕(完成一個Clock周期),RAM的out就輸出44了礁凡。
讀操作
切換地址i
設(shè)置load為0 (讀)
從演示上來看高氮,只要點(diǎn)一下鬧鐘按鈕,RAM 的 out 就能讀出對應(yīng) 寄存器i 的數(shù)顷牌。
最后剪芍,如下作業(yè):
RAM8
RAM64
RAM512
RAM4k
RAM16k
上面幾個RAM是組成Hack小電腦所需的。
為什么要用RAM窟蓝,而不是其他存儲單元呢罪裹?
因?yàn)椋还躌AM有多大运挫,讀寫操作 和 “找出對應(yīng)寄存器” 都能在同樣一個很短的時間內(nèi)(一個clock状共?)完成。
這節(jié)課谁帕,講了如何從 1位寄存器峡继,做出 16位寄存器,又從16位寄存器 如何組成 RAM匈挖。
下節(jié)課 來講另一個重要的單元 計數(shù)器(Counter)碾牌。