陳凱
當人們看到“隨機存取存儲器”或者是“RAM”這樣的詞語時,頭腦中浮現出來的畫面是怎樣的呢?也許是如圖1所示的樣子。
這當然沒有錯,如果要為自己的計算機添加內存條,那么只要找到和圖片中差不多的物件,安裝到主板相應位置即可。然而,若說起“隨機存取存儲器”,頭腦中所浮現的畫面僅僅像圖1所示的樣子,那又如何解答以下問題:隨機存取存儲器存儲的究竟是什么?如何讀取或寫入信息?“隨機”一詞又是什么意思?筆者經常會考慮,究竟怎樣做,才能讓應用背后的技術更簡單直觀地在教學過程中呈現出來?
按生產工藝和性能不同,“隨機存取存儲器”分好幾種,本文選取常用也相對簡單的動態隨機存取存儲器(縮寫為DRAM)進行說明,用EWB電路模擬軟件來模擬存儲器讀寫過程,EWB軟件既可以繪制電路,也可以實施電路的模擬運行,當然大家也可以使用其他的電路模擬軟件來實施文中的例子。為了盡可能簡單直觀地說明問題,筆者對文中的電路做了極大的簡化,希望能做到形不似卻神似。
考慮以下場景:Alice帶領探險隊進入某大規模地下迷宮執行神秘任務,她要根據向導Bob給自己留下的“指路神器”來辨識方向,每遇見一個岔路,就按下“指路神器”的按鈕,以燈亮表示走左側岔路,燈不亮表示走右側岔路。由于害怕隊伍中有敵人派來的奸細,所以只有到岔路口才能讀取信息。問題是,Bob如何將方向信號保存到“指路神器”中呢?最簡單的“指路神器”可以用一系列電鍵、電容、發光二極管組裝而成,假設Alice只會碰到兩次道路分岔的情況,那么Bob可以提供兩套設備,并預先作了如圖2所示的操作。
因為電容可以存儲電荷,所以電容中是否存儲有電荷就可以用來表示信息。圖標表示的就是用來存儲信息的電容。為了將“左轉”信息存儲在一號裝置的電容中,Bob將一號裝置的電鍵閉合一段時間后再斷開;為了將“右轉”信息存儲在二號裝置的電容中,Bob將二號裝置的電鍵一直處于斷開狀態。Alice拿到“指路神器”時的狀態應該是如下頁圖3所示的狀態。
注意,不到讀取信息的時候,電鍵[0]和[1]都必須是斷開的,因為一旦合攏電鍵[0]或[1],就等于把電容中原有的信息覆蓋了。默認情況下,發光二極管都是不亮的,當遇到第一個岔路時,Alice合攏電鍵[A](如下頁圖4),這時一號裝置的發光二極管會亮一段時間,直到電容放電完畢后才重新變暗,于是她就知道要走左側岔路了。
而合攏電鍵[B],二號裝置的發光二極管始終都不會亮,于是她就知道要走右側岔路。然而,現實總是沒有理想那么豐滿,電容雖然可以臨時存儲進電荷來代表信息,但電容的電荷會隨著時間的流逝而逐漸丟失,也就是通俗所說的漏電。EWB軟件中的電容太“完美”了,較難演示漏電,于是筆者就用了一個高阻值的電阻來模擬電容漏電的過程(如圖5)。
在模擬實驗時,可以先用5秒左右時間,閉合電鍵[3]給電容充電,然后斷開。因為電容中的電會在幾秒內漏完,所以只有及時合攏[C]才能讀出電容中的信息。這個例子已經比較直觀地演示了RAM中最基本的存取信息的過程。
如果用實際的電容操作實驗就會發現,幾微法的電容在斷電后信息維持時間還是相當長的,但在內存條中,電容的電容值很小,維持時間非常短,所以使用中要定時實施“刷新”動作,才能維持住電容中的電荷量,斷電超過一定時間后,RAM中的信息就會丟失。由于定時刷新電路比較復雜,這里就不作展開了。
想象一個魔幻的場景:假設Alice還持有一個神奇動物記錄器,她的一項任務就是在規定時間里,統計地下迷宮中某種神奇動物的行為特征,如果遇見該動物在活動,則往電容存儲1,如遇見該動物在睡眠,則往電容存儲0。不過Alice是個十分專注又缺乏時間觀念的探險家,常常不在規定時間里進行記錄。因此,Bob設計了一個帶有“允許”開關的記錄裝置,Alice的助手Carol負責打開或關閉這個“允許”開關,只有在“允許”開關合攏的情況下,Alice才能完成信息記錄動作。于是整個電路圖變成了如下頁圖6所示的樣子。
圖6中多了許多零件,尤其值得注意的是多了場效應晶體管,以來表示。這個電路的作用是通過場效應晶體管控制外界是否有往電容存儲信息的權限。例如,電鍵[P]閉合表示允許寫信息,電鍵[D]閉合表示執行寫入數值1的動作,于是信息1就被存儲到電容中。為了檢驗數值1是否被存入電容,可以先把電鍵[D]和[P]斷開,然后閉合電鍵[R],如發光二極管短暫點亮,則說明數據被寫入。即便不講解電路的原理,也能在比較短的時間里,演示信息存儲和讀取的整個過程,或者可以直接讓學習者在模擬軟件中親自操作一下。
當然,在RAM電路中,并不是通過電鍵來控制讀寫信息的時間順序,而是依賴一個時序電路來控制整個流程,大家也許注意到了,每次讀取信息時,電容的電荷都會丟失,所以還需要借助一個回寫電路,將讀取的信息重新寫入電容中。
想象一個稍微復雜點的場景:Alice要借助一套裝置統計地下迷宮中四種神奇動物的行為特征——或許是因為看見神奇動物的興奮讓她變得比較健忘吧,當初究竟為什么要選擇她來執行這項任務呢?
需要探查的四種神奇動物編號從零號到三號。如遇見動物在活動,則往相應電容中存儲1,遇見動物在睡眠,則往相應電容中存儲0。例如,看見零號動物在活動,則往零號電容存儲1,看見二號動物在睡眠,則往二號電容存儲0。雖然看上去需求并不復雜,但為了實現指定存儲元件的地址定位工作,就需要用到邏輯門,若將電路圖完整繪制出來,占用的篇幅也是相當可觀的,好在可以將具體的電子元件在邏輯層面進行封裝,這樣就可以在基本符合事實的情況下解釋定位過程了。地址為www.indiabix.com/electronics-circuits/dynamic-ram/的網頁上提供了一個現成的邏輯電路JAVA模擬器,可以直接點擊鼠標模擬運行。
如圖7所示,兩個帶小圓圈的三角形邏輯元件是非門,四個類似拱門形狀的邏輯元件是與門。這六個元件的連接,實際上是按照以下四行邏輯表達式來構造的:
F0 = A1 AND A2;
F1 = (NOT A1) AND A2;
F2 = A1 AND (NOT A2);
F3 = (NOT A1) AND (NOT A2)
這四行邏輯表達式中,初始輸入的A1和A2可以有“0、0”“0、1”“1、0”
“1、1”四種情況,每輸入一對A1和A2的值,四行邏輯表達式中都只會有一個結果為1,這樣就能將A1和A2的數值作為定位地址來使用了。可以清晰地看出,兩個二進制符號能夠定位四個地址。如果需要定位更多的地址,就要用到更復雜一些的邏輯表達式。根據二進制原理,n個符號就能定位2的n次方數量的地址。由于可以按地址存儲信息,因此就能實現隨時在某特定位置存取信息的功能,與通過磁帶或紙帶順序讀寫信息的方式有很大不同,因此稱為隨機。
筆者一直認為應該將數字電路的知識納入到信息技術課程中,因為相關內容與計算思維的培養有著密切的關系。當前有些地區的通用技術課程或勞動技術課程中,包含有一些基礎的數字電路的知識和實驗,如果能將它們和信息技術的部分內容進行整合,可以起到一加一大于二的效果。