ARM的STRB和LDRB指令分析


一、SDRAM

1、存儲結構

  SDRAM的內部是一個存儲陣列。陣列就如同表格一樣,將數據“填”進去。在數據讀寫時和表格的檢索原理一樣,先指定一個行(Row),再指定一個列 (Column),我們就可以准確地找到所需要的單元格,這就是內存芯片尋址的基本原理 

  這個單元格(存儲陣列)就叫邏輯 Bank(Logical Bank,下文簡稱 L-Bank)。 由於技術、成本等原因,不可能只做一個全容量的 L-Bank,而且最重要的是,由於 SDRAM的工作原理限制,單一的 L-Ban k將會造成非常嚴重的尋址沖突,大幅降低內存效率。所以人們在 SDRAM內部分割成多個 L-Bank,目前基本都是 4個(這也是SDRAM規范中的最高L-Bank數量),由此可見,在進行尋址時就要先確定是哪個 L-Bank,然后在這個選定的 L-Bank中選擇相應的行與列進行尋址。

 

2、引腳說明

 

  DQM可以阻塞其對應的空間長度(8位)的有效性。例如,當LDQM有效時,如果輸出時,將輸出的[7,0]位置成高阻態;如果輸入,則阻礙[7,0]的輸入,也就是不能修改[7,0]的數據。當UDQM有效時,如果輸出時,將輸出的[15,8]位置成高阻態;如果輸入,則阻礙[15,8]的輸入,也就是不能修改[15,8]的數據。

3、S3C2440與內存相關的硬件電路圖

  SDRAM以兩片32M的K4S561632構成64M的RAM存儲為例進行說明。

 

4、對SDRAM訪問的步驟

(1) CPU發出片選信號nSCS0有效,選中SDRAM芯片

(2) SDRAM中有4個L-Bank,需要2根地址信號選中一個,利用的是ADDR24和ADDR25

(3) 先后發出行地址信號和列地址信號。K4S561632的行地址數是13,列地址數是9。所以,當nSRAS有效時,ADDR2~ADDR14上發出的是行地址信號,它對應32位地址空間的bit[23:11];當nSCAS有效時,ADDR2~ADDR10上發出的是列地址信號,它對應32位地址空間的bit[10:2]。由於BANK6以32位寬度外接SDRAM,ADDR0、ADDR1恆為0,不參與譯碼。

(4) 找到存儲單元后,被選中的芯片就要進行統一的數據傳輸了。

二、分析ldrb/strb指令

1、S3C2440有關ldrb/strb指令的描述

 2、LDRB

  ldrb指令會根據提供的地址,從數據總線中選擇需要的字節。例如:

    ldrb r0,0x30000000取的是0x30000000這個字的[7,0]

    ldrb r0,0x30000001取的是0x30000000這個字的[15,8]

    ldrb r0,0x30000002取的是0x30000000這個字的[23,16]

    ldrb r0,0x30000003取的是0x30000000這個字的[31,24]

  也就是說ldrb指令會先把0x30000000這個地址的字取出來,然后根據ldrb指令提供的地址選擇合適的字節。

  ldrb指令接下來要把取到的數據放在目的寄存器的低8位,然后將高24位填充為0。

3、STRB

  STRB指令首先數據總線(整個字的四個字節)都填充上要寫入的一個字節的數據。然后,外部存儲系統激活合適的字節存儲子系統去存儲這一個字節的數據。

   “外部存儲系統激活合適的字節存儲子系統去存儲這一個字節的數據”這句話,我是這樣理解的,以"strb r3,[r4]"為例進行說明。

  假設r3 = 0x12 ,r4 = 0x30000001

  STRB指令首先數據總線上都填充上要寫入的一個字節的數據,也就是數據總線為0x12121212,訪問的字地址是0x30000000。因為要存儲一個字節的數據到0x30000001,而0x30000000這個字的其他單元不能更改,所以就將DQM0、DQM2、DQM3都有效,而不屏蔽DQM。這樣在寫入的過程中,只將0x12寫入到0x30000001單元中,而其他三個單元不修改,從而完成strb指令規定的任務。

 

參考資料:編譯器對變量存儲地址的處理

      S3C2440 SDRAM內存驅動

             數據掩碼DQM0,DQM1,DQM2,DQM3

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM