看板 Electronics 關於我們 聯絡資訊
想要請問各位大大一個計算機的基本問題 是不是所有的CPU設計 都是把CPU看到的一個address對應的資料定義成一個byte(8 bit)? 請問有甚麼理由呢? 會這樣問的原因是 例如現在ARM是32 bit的CPU 我在去抓instrustion回來的時候 理論上我可以從CPU給出一個address 去access一個外部有32 bit IO bus的memory (假設ARM core的 memory interface也是32 bit data IO) 如此 我就可以每次program counter都只+1 就能順序從外部memory讀進連續的32 bit instruction 但是我看到ARM的設計(或是MIPS) 都是PC=PC+4 也就是CPU認為的一個address還是對應到一個byte 所以必須一次跳4個address 我比較好奇的是 這樣做的話 如果外部接的memory是32 bit IO bus 那address連到這個memory的 address[1:0] 都要變成 don't care 也就是說 CPU address [x:2] = memory [y:0] 來滿足內部一次跳4個address的設計 有甚麼理由需要這樣做 而不設計成PC=PC+4的設計呢? 是因為要相容以前的設計嗎? 感謝回答~~ ^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.45.77.57 ※ 文章網址: https://www.ptt.cc/bbs/Electronics/M.1438447917.A.BA5.html
kdjf: 外面的memory也是32bit bus/8bit address啊 08/02 01:16
kdjf: 方便存取不到32bit的資料(雖然會慢一點) 08/02 01:16
cpyi: 沒什麼特別理由吧 兩種設計都可以 08/02 09:08
Schottky: data 不見得是 32-bit aligned,比如說 24-bit 全彩圖 08/02 09:58
Schottky: 你可以堅持 32-bit aligned (如較早期的 CUDA) 08/02 09:59
Schottky: 但那會製造很多麻煩,還得先整批讀進來再重排資料 08/02 10:00
CCMAKE: Hi S大 所以說即使內部是32 bit reg 外部也是32 bit IO 08/02 22:26
CCMAKE: 還是會使用一個address對應一個byte的方式嚕? 08/02 22:27
CCMAKE: 如果像ARM這種是固定32 bit的ISA,ROM還需要用byte當 08/02 22:31
CCMAKE: 一個address的對應單位嗎? 08/02 22:31
Schottky: ROM 不見得只存 code, MOV byte 的來源/目標可以是 ROM 08/02 22:50
Schottky: 硬體上還是直接對外部記憶體 access 一個 32-bit word 08/02 22:52
Schottky: 但軟體上是不是就得標明這個 byte 的 address ? 08/02 22:53
CCMAKE: 我比較好奇的是硬體實現的方法 假使現在CPU要去access 08/02 23:10
CCMAKE: 一個外部具有32 bit IO bus的memory 假如是讀0X00000000 08/02 23:11
CCMAKE: 那現在讀進CPU的會是32 bit還是8 bit? 08/02 23:12
CCMAKE: 然後 有沒有可能是CPU去access 0X00000001~3? 08/02 23:13
CCMAKE: 還是下次就是要跳0X00000004? 08/02 23:13
Schottky: 硬體上是對 memory 讀 32-bit (0x00000000~0x00000003) 08/02 23:18
Schottky: 有 cache 的話會存在 cache 裡 (ARM 似乎可以沒有cache) 08/02 23:19
POWERPC: 你要的是286/386硬體書,詳細選以下2檔所指章節: 08/04 11:07
POWERPC: http://1drv.ms/1P2cnnr 第3章 08/04 11:07
POWERPC: http://1drv.ms/1P2cwXZ 第2章 08/04 11:08
POWERPC: 等你完全明白時就沒什麼太多困擾了 08/04 11:08
POWERPC: err: 選 --> 讀 08/04 11:10
a881: 這是歷史因素 早期8bit cpu形成template 後人基於此再加 08/05 17:17