2007年12月10日 星期一

1210 調整SRAM記憶體配置方式

目的:因為FPGA版的容量不夠大,無法把4G的ROM與SRAM全部燒進去,必須將所使用的到容量縮到最小。
下圖為MIPS記憶體的配置方式,PCspim也是依照此放式來配置記憶體。


在撰寫MIPS R3000時,我們將程式碼區段放置在ROM內,且將PC從0x0000 0000開始執行。推疊跟靜態資料放置在SRAM內。



我們以移位的程式來做範例


經過lcc compiler與PCspim模擬後,可知道
R29 (sp) = 7fffeffc   $sp  7fffeffc
DATA 靜態資料0x10000000 到 0x10040000
[0x10000000]...[0x10010000] 0x00000000
[0x10010000] 0x0000007e 0x0000007b 0x0000007c 0x00000076
[0x10010010] 0x0000007c 0x00000075 0x00000077 0x00000074
[0x10010020] 0x00000078 0x0000007a 0x00000077 0x00000078
[0x10010030] 0x00000076 0x00000079 0x00000077 0x00000078
[0x10010040] 0x00000081 0x00000079 0x0000007e 0x00000077
. .

. .
[0x100100d0] 0x00000096 0x00000096 0x00000096 0x00000098
[0x100100e0] 0x0000009f 0x000000a0 0x0000009e 0x0000009b
[0x100100f0] 0x0000009b 0x0000009b 0x0000009b 0x0000009a
[0x10010100]...[0x10040000] 0x00000000
STACK
[0x7fffeffc] 0x00000000
為了縮減ROM與SRAM的容量,我們將$pc=0x0000 0000 根據組合語言我們可以知道靜態資料會用到的記憶體位址由0x1001 0000 到 0x1001 00ff,固靜態資料必須大於0x1001 00ff,在根據組合語言內對$sp所做的運算,我們將靜態資料設成0x1001 0110


[0x00400024] 0x27bdfef0 addiu $29, $29, -272 ; 79: addu $sp,$sp,-272


為了避免堆疊與靜態資料衝到,所以$sp=0x1001 0110 + 272 ==> 0x1001 0220
下圖為修改過後的記憶體配置方式:



因為0x1001 0220 ==> 268501536 要宣告的陣列過大,所以我們將SRAM的address全部往前位移,位移過後的記憶體配置方式如下圖:

沒有留言: