新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 處理器外接SDRAM的控制技術介紹

        處理器外接SDRAM的控制技術介紹

        作者: 時間:2011-04-25 來源:網絡 收藏

        現代的(SoC)或DSP都內建有內存器,它是外部、FLASH、EEPROM、SRAM……等內存的接口。但不同內部的內存方式都不盡相同,而且它們的控制程序大部分都位于開機程序內,皆屬于匯編語言,所以常令人不知所云。

        本文引用地址:http://www.104case.com/article/150824.htm

          的規格

          現代的并不需要額外的外部器件,就可以直接將外部內存連接至處理器的腳位上。但是,在選擇時,還是必須考慮下列幾項因素:

          ● 工作電壓

          ● 最大的工作頻率

          ● 最大的記憶容量

          ● I/O大小和排數(bank number)

          ● “列地址閃控(column address strobe;CAS)”的延遲(latency)

          ● 刷新(refresh)的速率

          ● 分頁大小(page size)

          ● 初始化的順序(sequency):可程序化的順序是MRS=>REF(refresh)或REF=>MRS。

          上述參數都列在SDRAM規格中,它們必須能符合處理器內部的內存控制器之要求,惟有如此,才不需要額外的外部器件,否則就必須另外設計邏輯電路來銜接。在圖1中,SDRAM-B無法符合ADSP-TS201S處理器的內存控制器的要求。因為SDRAM-B的“突發資料組之寬度(burst length)”是1,而不是“全分頁”;而且SDRAM-B的分頁大小是2048字組(word或16bits),但是ADSP-TS201S處理器最多只能支持1024字組。所以,相較之下,應該SDRAM-A才對。

          緩存器的設定

          與其它控制器一樣,處理器內部的內存控制器也需要透過緩存器(register)去設定它的組態與功能。根據圖1的規格,可以設定ADSP-TS201S處理器的“SDRAM控制緩存器(SDRCON)”。SDRCON緩存器的初始值是0,表示SDRAM是在禁能(disable)狀態。圖2是SDRCON緩存器的每個位的名稱。

          1. 位0(SDRAM ENABLE):設為1時,表示有SDRAM存在。

          2. 位1~2(CAS LATENCY;CL):表示當讀取(read)命令發出之后,至數據出現時之間的時間。它與寫入作業無關。此值可以在SDRAM規格表中查到,如圖3所示。假設外部總線速率是100MHz,則CL應設為2。有些SDRAM的時序參數(例如:CL、tRAS、tRP…..等)是根據不同的傳輸速率和速率等級(speed grade)而定的。

          3.位3(PIPE DEPTH):當有數個SDRAM并排使用時,可能需要外部緩沖存儲器(buffer),這時,此位必須設為1。不過,如果SDRAM腳位上的電容值遠低于30pF,則此位可以設為0。

          4.位4~5(PAGE BOUNDARY):分頁邊界,是用來定義分頁的大小,單位是字組。此值與“列的地址(column addresses)”數目相等。圖4是SDRAM-A的規格,從中可以查出:列地址的總數目是256(A0~A7),因此,分頁大小是256。

          5. 位7~8(REFRESH RATE):這個值能決定處理器內部的刷新計數器(refresh counter)之值,好讓處理器的速率能與外部SDRAM所需的刷新速率相配合。于圖4中,刷新計數值是4K;而且在SDRAM規格中,會經常見到:64ms,4096 cycle refresh或者4096 cycles/64ms或15.6μs/row。刷新速率的計算公式是:cycles=SOCCLK×tREF/Rows,其中,SOCCLK是處理器的CPU速率,tREF是SDRAM刷新間隔(refresh period),Rows是行地址的位數目。假設SOCCLK等于250MHz,由上述公式可以求得刷新速率等于3900周期(cycles)。因此,實際的刷新速率必須等于或小于3900周期,但是ADSP-TS201S處理器的內存控制器最多只支持3700周期,所以此值要設定為3700。

          6. 位9~10(PRC TO RAS DELAY):此參數決定SDRAM的Precharge到RAS之間的延遲時間,也就是tRP,如圖5所示。圖6是SDRAM的時序規格范例,其中,傳輸率屬-6等級者,它的最小tRP值是18ns,若使用100MHz速率,則至少需要1.8周期(100MHz×18ns=1.8)。因此,tRP應該設為2周期。

          7. 位11~13(RAS TO PRC DELAY):此參數決定RAS到Precharge之間的延遲時間,也就是tRAS。如圖6所示,最小的tRAS值是42ns,若使用100MHz速率,則至少需要4.2周期。因此,tRAS應該設為5周期。

          8. 位14(INIT SEQUENCE):它決定SDRAM于開機時的初始化程序。若此程序是:在開機后100μs內,至少必須執行一個COMMAND INHIBIT或NOP命令,之后,執行PRECHARGE命令,此時,SDRAM是處于閑置(idle)狀態。然后,執行兩個AUTO-REFRESH,再設定“模式緩存器(mode register)”。最后,才能執行讀寫作業。這表示此SDRAM的初始化時間至少需要:PRE+2×Autorefresh+MRS(mode register set)。

          9. 位15(EMR ENABLE):只有當連接至低功率(2.5V)的SDRAM時,才必須設定這個位值,否則保持0。

          當SDRCON緩存器按照上述規則被設定好之后,內存控制器將會發出MRS命令,對外部SDRAM進行初始化。

        設計程序

          了解了SDRAM規格與內存控制器的緩存器功能之后,接著就要設計SDRAM的初始化程序,其一般設計程序概述如下:

          1. 設定刷新定時器(refresh timer)的預分頻(prescaler)參數:它決定刷新定時器的輸入頻率(input clock)。總線頻率除以此參數(或者還要再加上一個正整數值)就等于刷新定時器。

          2. 設定刷新定時器的計時時間的長度(或刷新速率):亦即,設定刷新SDRAM暫存內容的時間間隔。當此計時時間終了時,內存控制器會自動發出刷新請求。例如:若已知系統頻率和最大可允許的刷新時間,就可以經由預分頻參數、系統頻率、最大可允許的刷新時間,求出適當的刷新時間間隔(不能大于最大可允許的刷新時間)。請參考上節的REFRESH RATE定義。

          3. 設定基準地址(base address):大多數的SoC都是采用多任務式總線(multiplexed bus)架構,使不同種類的內存、不同的數據端口大小(port size)能夠共享使用相同的總線,此時,內存控制器必須根據此基準地址,來和目前所要存取的地址做比較,之后,內存控制器才能知道目前要和哪一種內存——具有某種特定的屬性——進行存取作業。這些特定的屬性包括:內存的作業模式或類型、數據端口大小、防止寫入、使用外部的內存控制器、局部區域的獨立運算(atomic opration)、支持數據管線作業(data pipelining;可以增加一個執行周期,以省略掉數據建立所需的額外時間)、數據是正確的。

          4. 設定存取模式:這包含,設定SDRAM的大小、單一SDRAM的內部記憶排的數量、行起始地址的位(row start address bit)、行地址線的數目(row address lines)、分頁模式(當總線閑置時,分頁是關閉的;亦或一直保持開啟,直到發生分頁失誤或執行刷新作業)、取消內部記憶排交錯(bank interleaving)。

          5. 設定作業模式:這包含,選擇多任務尋址的方式(記憶排交錯或分頁交錯)、啟動刷新作業、存取SDRAM時執行何種作業、選擇多任務尋址的腳位與記憶排的多任務地址線、決定A10腳位、設定SDRAM的各種時間參數(請參考上節與SDRAM規格書)、突量數據(burst)的長度、開啟外部多任務尋址、延長SDRAM的控制(命令)時間。

          6. 按照不同內存控制器的要求,執行SDRAM的初始化程序(下列僅是范例):

          ● 對所有記憶排,執行PRECHARGE命令1次。

          ● 執行CBR REFRESH命令8次。

          ● 執行MODE REGISTER WRITE命令1次。

          ● 啟動刷新服務,讓SDRAM進入正常作業狀態中。

          轉譯備份緩沖器

          “轉譯備份緩沖器(Translation Lookaside Buffer;TLB)”保存著最近才被使用的“分頁表項目(page table entry;PTE)”。PTE是一種數據結構,包含著可以將“有效地址”轉譯成“實體地址”的信息。PTE是以分頁為一個儲存單位,一個分頁是4 KBytes。通常,32-bit處理器的一個PTE含有8 Bytes的信息,而64-bit處理器的一個PTE含有16 Bytes的信息。

          通常,TLB是位于“內存管理單元(MMU)”內部,而且又可區分為:指令MMU內的“指令TLB(ITLB)”、數據MMU內的“數據TLB(DTLB)”。它們和外部內存的關系很密切,所以,在完成SDRAM的初始化作業之后,通常會令全部的PTE無效,并關閉指令緩沖器(I Cache)和數據緩沖器(D Cache),以清除所有殘留的數據。

          結 語

          內存的控制方式在系統開機時就被決定了。因此,如果要對SDRAM進行硬件線路的除錯驗證,都必須在開機程序(boot code)中進行。若不了解SDRAM的規格和SoC處理器的內存控制方式,這個除錯工作將會變得很困難。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 岳普湖县| 石城县| 庆安县| 杭锦旗| 武定县| 洛浦县| 白沙| 邓州市| 临武县| 滨海县| 开江县| 张家川| 苏州市| 巨野县| 汤阴县| 大埔县| 南江县| 马山县| 大英县| 会同县| 施秉县| 昌乐县| 莆田市| 集贤县| 沙河市| 洛南县| 沈丘县| 昌黎县| 武定县| 漠河县| 六枝特区| 沙洋县| 万全县| 双牌县| 澎湖县| 龙海市| 汉源县| 剑川县| 大荔县| 潞西市| 伊宁县|