Download presentation
Presentation is loading. Please wait.
1
ARM CPU從高階語言到Machine Code
劉冠彣 2017/11
2
outline ITRI Small Cell ARM架構 ARM Addressing Modes ARM指令格式 Memory
浮點數運算 IC製造過程
3
ITRI Small Cell
4
ITRI Small Cell PHY L1 Software on TI 66xx Series DSP
L2/L3/RRM Software on TI 66xx Series DSP/ARM core TCI6638K2K Multicore DSP ARM KeyStone II System-on-Chip (SoC)
5
TCI6638K2K
6
ARM架構
7
ARM ARM將設計授權給設計公司(如Qualcomm),製造授權給晶圓代工公司(如台積電),最後生產出來的晶片再賣給其他廠商做成實際產品(如HTC)
8
ARM Cortex-A15
9
ARM 處理器的指令集可簡單分為2種,CISC(complex instruction set computer)以及RISC (reduced instruction set computer)。 ARM的架構是採用RISC架構,如同它的名稱一樣,Advanced RISC Machines RISC的優點列舉如下: 指令長度固定,方便CPU解碼,簡化解碼器設計。 盡量在CPU的暫存器(最快的記憶體元件)裡操作,避免額外的讀取與載入時間。 由於指令長度固定,更能受益於執行線路管線化(pipeline)後所帶來的效能提升。 處理器簡化,電晶體數量少,易於提升運作時脈。比起同時脈的CISC處理器,耗電量較低。 RISC的缺點列舉如下: 複雜指令需要由許多的小指令去完成,程式變得比較大,記憶體也占用比較多,這在硬碟昂貴,常常 使用磁帶儲存的時代來說,是個大缺點。 程式變長,代表著讀取工作變得繁重,需要更多的時間將指令從記憶體載入至處理器內。
10
哈佛架構 哈佛架構則是馮‧紐曼架構的延 伸,哈佛架構更進一步定義了程式 和資料是由兩個獨立的空間儲存, 同時也有兩個記憶體控制單元分別 操作。讀取程式後解碼便得到資料 位址,再到資料記憶體中讀取資 料。此種架構好處在於指令和資料 的記憶體操作能夠同時進行,當處 理器在運算資料時,便可以先行擷 取下一道指令。
11
cache D-cache (data) I-cache (instruction)
a cache in a CPU or GPU servicing data load and store requests, mirroring main memory (or VRAM for a GPU). I-cache (instruction) a cache in a CPU or GPU servicing instruction fetch requests for program code (or shaders for a GPU), possibly implementing modified Harvard architecture if program machine code is stored in the same address space and physical memory as data.
12
ARM Addressing Modes
13
ARM Addressing Modes 立即定址 (Immediate) 暫存器定址 (Register direct)
基底定址 (Base Displacement) 暫存器偏移定址 (Scaled register offset) 暫存器間接定址 (Register indirect) 多暫存器定址 (Multiple register) 區塊拷貝定址 (Stack) 相對定址 (PC-relative)
14
立即定址 (Immediate) 也叫即時定址,指令中的操作碼欄位後面的位址碼部分就是運算 元本身。也就是說,資料就包含在指令當中,取出指令也就取出 了可以立即使用的運算元(立即值)。 SUBS R0,R0,#1 ;R0-1→R0 E MOV R0,#0xff00 ;0xff00→R0 E3 A0 0C FF
15
暫存器定址 (Register direct)
利用暫存器中的數值作為運算元,運算元的值在暫存器中,指令 中的位址碼欄位指出的是暫存器的編號,指令執行時直接取出暫 存器值操作,是一種執行效率較高的定址方式。 MOV R1,R2 ;R2→R1 E1 A SUB R0,R1,R2 ;R1-R2→R0 E
16
基底定址 (Base Displacement)
又稱為基址變址定址,是將基底暫存器的內容與指令中給出的偏 移量相加,形成運算元的有效位址。基底定址用於存取基底位址 附近的儲存單元,常用於查表、陣列操作、功能元件暫存器存取 等。 LDR R2,[R3,#0x0F] ;R2←[R3+0x0F] E F STR R1,[R0,#-4] ;R1←[R0-4] E LDR R0,[R1,#4] ;R0←[R1+4]、R1 ←R1+4 E LDR R0,[R1],#4 ;R0 ←[R1]、R1 ←R1+4 E LDR R0,[R1,R2] ;R0 ←[R1+R2] E
17
暫存器偏移定址 (Scaled register offset)
暫存器偏移定址是ARM指令集特有的定址方式,當第2個運算元 是暫存器偏移方式時,第2個暫存器運算元在第1個運算元結合之 前,選擇進行移位操作。 Logical shift by immediate Logical shift by register MOV R0,R2,LSL #3 ;R2的值左移3位,結果放入R0,即R0=R2*8 E1 A
18
暫存器間接定址 (Register indirect)
暫存器間接定址指令中的位址碼,給出的是一個通用暫存器編號, 所需要的運算元保存在暫存器指定位址的儲存單元中,即暫存器 為運算元的位址指標。 LDR R1,[R2] ;R1←[R2] E
19
多暫存器定址 (Multiple register)
就是一次可以傳送多個暫存器值,允許一條指令傳送16個通用暫 存器的任何子集或所有暫存器。 LDMIA﹙Load Multiple Increment After﹚ 連續的暫存器可用”-”連接,否則用”,”分隔書寫 LDMIA R1,{R2,R12} ;R2←[R1],R12←[R2+4] E
20
區塊拷貝定址 (Stack) 多暫存器傳送指令,用於將一塊資料從記憶體的某一位置拷貝到 另一位置。
STMIA R0!,{R1-R7} E8 A0 00 FE STMIB R0!,{R1-R7} E9 A0 00 FE STMDA R0!,{R1-R7} E FE STMDB R0!,{R1-R7} E FE 第1條指令將R1~R7的資料保存到記憶體中,記憶體指標在保存第1個值之後增加,增長方向為向上增長 第2條指令將R1~R7的資料保存到記憶體中,記憶體指標在保存第1個值之前增加,增長方向為向上增長 第3條指令將R1~R7的資料保存到記憶體中,記憶體指標在保存第1個值之後增加,增長方向為向下增長 第4條指令將R1~R7的資料保存到記憶體中,記憶體指標在保存第1個值之前增加,增長方向為向下增長
21
相對定址 (PC-relative) 是基底定址的一種變通,由程式計數器PC提供基準位址,指令中 的位址碼欄位作為偏移量,兩者相加後得到的位址即為運算元的 有效位址。 BL ROUTE1 ;呼叫ROUTE1 副程式 EB FF FF FE BEQ LOOP ;條件跳躍到LOOP1標籤處 0A
22
ARM指令格式
23
ARM 的指令格式
24
ARM 的指令格式 ARM的指令格式,位於31-28 位元的 Cond 欄位,是指令前置條件 欄,因此每個 ARM 指令都是條件式執行的。因此,ARM 的跳躍 類指令只有 B、BL、BX 等三個,其中 BL 是會儲存程式計數器 PC 到 LR 當中的跳躍,通常用來進行副程式的呼叫,而 BX 則是會儲 存狀態暫存器的跳躍。
25
暫存器 R13 也被指為 SP(Stack Pointer) R14 也被指為 LR(Link Register)
R15 也被指為 PC(Program Counter)
26
ARM 的狀態暫存器 (CPSR, SPSR)
27
ARM 的狀態暫存器 (CPSR, SPSR) ARM的狀態暫存器有 CPSR (Current Processor Status Register) 與 SPSR (Saved Processor Status Register)。其中 SPSR 乃是在中斷時用 來自動儲存CPSR的暫存器。 狀態暫存器 CPSR 與 SPSR的結構,除了用來儲存條件旗標之外, 還有中斷控制位元 I、F,可用來允許或禁止中斷,狀態位元 T 用 來記錄處理器是位於正常 (ARM:指令為32位元) 或精簡 (Thumb:指 令為16位元) 狀態,處理器模式 Mode 是用來記錄處理器的模式, 像是 (User / System / FIQ / SVC / ABT / IRQ / Undef) 等。
28
CPSR
29
ARM的指令集 指令 說明 意義 運算指令 MOV {cond}{S} Rd,operand2 資料傳送 Rd<=operand2
MVN{cond}{S} Rd,operand2 負資料傳送 Rd<=(~operand2) ADD{cond}{S} Rd,Rn,operand2 加法運算 Rd<=Rn+operand2 SUB{cond}{S} Rd,Rn,operand2 減法運算 Rd<=Rn-operand2 RSB{cond}{S} Rd,Rn,operand2 逆向減法 Rd<=operand2-Rn ADC{cond}{S} Rd,Rn,operand2 帶進位加法 Rd<=Rn+operand2+Carry SBC{cond}{S} Rd,Rn,operand2 帶進位減法 Rd<=Rn-operand2-(NOT)Carry RSC{cond}{S} Rc,Rn,operand2 帶進位逆向減法 Rd<=operand2-Rn-(NOT)Carry AND{cond}{S} Rd,Rn,operand2 邏輯“與”操作 Rd<=Rn&operand2 ORR{cond}{S} Rd,Rn,operand2 邏輯“或”操作 Rd<=Rn|operand2 EOR{cond}{S} Rd,Rn,operand2 邏輯“互斥或” Rd<=Rn^operand2 BIC{cond}{S} Rd,Rn,operand2 位元清除 Rd<=Rn&(~operand2) CMP{cond} Rn,operand2 比較指令 標誌 N、Z、C、V<=Rn-operand2 CMN{cond} Rn,operand2 負數比較指令 標誌 N、Z、C、V<=Rn+operand2 TST{cond} Rn,operand2 位元測試指令 標誌 N、Z、C、V<=Rn&operand2 TEQ{cond} Rn,operand2 相等測試指令 標誌 N、Z、C、V<=Rn^operand2
30
ARM的指令集 記憶體相關指令 LDR{cond} Rd,addressing 載入 Word Rd<=[addressing]
LDR{cond}B Rd,addressing 載入 Byte LDR{cond}T Rd,addressing 載入Word (以使用者模式) LDR{cond}BT Rd,addressing 載入Byte (以使用者模式) LDR{cond}H Rd,addressing 載入半字組 LDR{cond}SB Rd,addressing 載入 byte (有正負號) LDR{cond}SH Rd,addressing 載入半字組 (有正負號) STR{cond} Rd,addressing 儲存Word [addressing]<=Rd STRB{cond} Rd,addressing 儲存Byte STR{cond}T Rd,addressing 儲存Word (以使用者模式) STR{cond}BT Rd,addressing 儲存byte (以使用者模式) STR{cond}H Rd,addressing 儲存半字組 LDM{cond}{mode} Rn{!},reglist 多暫存器載入 reglist<=[Rn…],Rn 寫回 STM{cond}{mode} Rn{!},reglist 多暫存器儲存 [Rn…]<=reglist, Rn 寫回 SWP{cond} Rd,Rm,Rn 暫存器和記憶體字資料交換指令 Rd<=[Rn],[Rn]<=Rm (Rn≠Rd或Rm) SWP{cond}B Rd,Rm,Rn 暫存器和記憶體位元組資料交換指令
31
ARM的指令集 分支指令 B{cond} label PC<=label BL{cond} label 帶連接的分支
LR<=PC-4,PClabel BX{cond} label 帶狀態的分支 PC<=label, 切換處理器狀態 其他指令 SWI{cond} immed_24 軟中斷指令 產生軟中斷,處理器進入管理模式 MRS{cond} Rd,psr 讀狀態暫存器指令 Rd<=psr,psr為 CPSR 或 SPSR MSR{cond} psr_fields,Rd/#immend_8r 寫狀態暫存器指令 psr_fields<=Rd/#immed_8r,p 為 CPSR 或 SPSR 協同處理器指令 CDP{cond} coproc,opcode1,CRd,CRn,CRm(,opcode2) 協同處理器資料操作指令 取決於協同處理器 LDC{cond}{L} coproc,CRd,<地址> 協同處理器資料讀取指令 STC{cond}{L} coproc,CRd,<地址> 協同處理器資料寫入指令 MCR{cond} coproc,opcodel,Rd,CRn,CRm{,opcode2} ARM暫存器到協同處理器暫存器的資料傳送指令 MRC{cond} coproc,opcodel,Rd,CRn,CRm{,opcode2} 協同處理器暫存器到ARM暫存器的資料傳送指令
32
指令示範 int x=10; int y=8; if (y<x) x = y; else y=x;
MOV r3, # //10→r3 E3 A0 30 0A STR r3, [r1, #8] //r3→[r1+8] E MOV r3, # //8→r3 E3 A STR r3, [r1, #12] //r3→[r1+12] E C LDR r2, [r1, #8] // [r1+8]→r2 E LDR r3, [r1, #12] // [r1+12]→r3 E C CMP r2, r //r2-r3 E BLE .L //if(<=0) branch to .L3 DA LDR r3, [r1, #8] //[r1+8]→r3 E STR r3, [r1, #12] //r3→[r1+12] E C .L3: LDR r3, [r1, #12] //[r1+12]→r3 E C STR r3, [r1, #8] //r3→[r1+8] E
33
指令示範 While(r1!=0) r1= r0++; loop:
LDR r1, [r0], #1 //r1←r0 , r0←r E CMP r1, # // r E BNE loop //if not equal,branch to loop 1A FF FF FE
34
OpCode
35
OPCode 範例 SUB R0,R0,#1 E HEX= BIN Cond I OpCode S Rn Rd Operand 2
36
Memory
37
Memory level 1 2 3 4 name registers cache main memory HDD or SSD
typical size <1KB >16MB >16GB >500G implementation technology custom memory with multiple ports, CMOS on-chip or off-chip CMOS SRAM CMOS DRAM magnetic disk or NAND flash access time(ns) 0.25~0.5 0.5~25 80~250 bandwidth (MB/sec) 20000~100000 5000~10000 1000~5000 20~500 managed by compiler hardware operating system backed by CD or tape
38
隨機存取記憶體(random access memory, RAM)
是一種可以讀出也可寫入的雙向性記憶體。通常用來暫存待處理的應用程式或資 料。也是電腦病毒會寄生的位置。當停電或關機後,其RAM內的資料會消失,因此 通常在停機前必須將RAM內的資料存到磁碟等輔助記憶體上,再行關機。 通常分為下列種類: DRAM(Dynamic Random Access Memory):主要用於電腦的主記憶體。在DRAM裏,資訊是存 放在電容器裏的一系列電荷。在幾微秒內,它就可以充電完畢,但是電容器會漏電,所以 需要不斷地充電以維持電位。就是因為要不斷充電,所以它才叫作「動態」。DRAM存取速 度較慢,但價格較便宜。 SRAM(Static Random Access Memory):通常被採用來作為快取記憶體(Cache Memory)。以 正反器(Flip-Flop)為基本記憶元件,只有在寫入動作時才會有充電動作。如果沒有寫入的指 令,在SRAM裡不會有任何東西被更動,這也是它為什麼被稱為靜態的原因。SRAM的優點是 它比DRAM快得多。缺點則是它比DRAM貴許多。
39
DRAM "1" 狀態 "0" 狀態
40
SRAM SRAM的基本單元有3種狀態:standby (電路處於閒置), reading(讀取)與writing(寫入)
字元線(Word Line)、位元線(Bit Line) 1 1 1 standby (Q=1) reading (Q=1) writing (寫入0)
41
唯讀記憶體(read-only-memory, ROM )
這種記憶體在出廠時,就已經將資料寫入(燒錄),電腦在運作時僅能從中讀取資料,而無法寫入新 的資料。例如:BIOS(基本輸入及輸出系統)記憶體,是一套程式,在出廠時就已經燒錄在裡面,不 會隨著電源的關閉而消失,就是最典型的ROM。 通常分為下列種類: ROM (Masked ROM) 出廠時即已燒錄好程式碼,只允許讀出而無法再寫入 PROM (Programmable ROM:) 可供燒錄一次 EPROM(Erasable PROM) 可反覆燒錄多次,清除資料須用紫外線(UV),清除時需完全複寫 EEPROM (Electrically EPROM) 藉由電壓來清除資料,可燒錄多次,可部分清除資料,一次一個bit Flash Memory 與EEPROM同樣都是使用電壓就能快速更新程式或資料,加資料時可在區塊中寫入或清除,並去除一次一個bit之限制
42
HDD (Hard Disk Drive)
43
HDD (Hard Disk Drive) 磁軌 磁區 柱面
當磁盤旋轉時,磁頭若保持在一個位置上,則每個磁 頭都會在磁盤表面劃出一個圓形軌跡,這些圓形軌跡 就叫做磁軌(Track)。 磁區 磁盤上的每個磁軌被等分為若干個弧段,這些弧段便 是硬碟的磁區(Sector)。 柱面 在有多個碟片構成的盤組中,由不同碟片的面,但處 於同一半徑圓的多個磁軌組成的一個圓柱面 (Cylinder)。 硬碟的儲存量:磁柱 x 磁軌 x 磁區 x 磁區大小。 (磁碟片資料的儲存是以 sector 為最小單位。)
44
SSD (Solid State Drive)
NAND Flash Memory (橘色):負責存放資料 非揮發性(NON-VOLATILE),即使沒有供應電源,也能保存已 經寫入的資料。 快閃記憶體的寫入操作必須在空白區域進行,如果目標區域已 經有資料,必須先擦除後寫入,因此擦除操作是快閃記憶體的 基本操作。 Controller (黃色):控制SSD NAND Flash Memory有抹除次數限制,為了讓使用壽命延長, Controller必須有效率讓每個Page平均寫入,避免都是在對同一 個page作讀寫這樣會加速損耗導致壽命減短。 將Flash Memory模擬成傳統硬碟讓Flash Memory可以直接在PC上 使用。 不同廠商的Controller的運算方法皆不同。
45
Trinary-Level Cell,TLC
NAND Flash Memory 當要將電子存放進浮閘(Floating Gate)時,便是調整控 制閘(Word Line Control Gate)的電壓,讓部分電子以量 子穿隧效應躍進浮閘。當電子充滿浮閘時,它便代表 0, 當浮閘內部沒有電子時,則代表著 1。一旦要寫資料進入 memroy 中,則將部分元件的電子導出浮閘。這樣便可形 成 0 和 1 相間的排列方式,滿足儲存資料的目標。 Single-level cell, SLC Multi-level cell, MLC Trinary-Level Cell,TLC 儲存位元 1bit/cell 2bit/cell 3bit/cell 讀寫速度 高 中 低 P/E cycle 100000 3000 1000 價格 貴 便宜 排列方式 0 或 1 00、01、10、11 000、001、010、011、100、101、110、111
46
CACHE MAPPING
47
Cache mapping 用來紀錄一個 memory block 要對映到那一個 cache block
direct mapping: 1:1,每個 cache block 僅可以對應到唯一的一個 main memory block 優點:搜尋時間短 缺點:hit rate 低 fully associative: 任意 cache block 可以對應到任意的 main memory block 優點:hit rate 高 缺點:搜尋時間長,CPU 必須掃過整個 cache 才能決定是否該繼續往 main memory 撈資料。電路設計 最複雜,較昂貴。 n-way associative: 把 cache 分成多個 set,CPU 必須檢查指定 set 內的每個 block 是否有可用 的 cache 優點:搜尋時間短且 hit rate 高 worst case: Fully Associative 的情況,也就是 CPU 要檢查整個 cache
48
Direct mapping 範例:快取有128 lines,每個區塊有4 words,Tag 5 bits,請問直接對映式快取之格式為何?
答案: 每個區塊有4個字組 : 4=22 word欄有2 bits 快取有128個區塊: 128=27 block欄有7 bits tag 5 bits 主記憶體為214個word Line size = block size 5bits bits bits 4095÷128=31⋯127
49
Fully associative mapping
範例:快取有128 lines,每個區塊有4 words,Tag 12 bits,請問完全關聯式快取之格式為何? 答案: 每個區塊有4個字組 : 4=22 word欄有2 bits tag欄有12 bits 主記憶體為214個word Line size = block size 12bits bits
50
Set associative mapping
範例:快取有128 lines,每個集合有2 lines,每個區塊有4 words,Tag 6 bits,請問2-way集合關聯式快取之 格式為何? 答案: 每個區塊有4個字組 : 4=22 word欄有2 bits 快取有128個區塊,每個集合有2個區塊 :128/2= 64=26 set欄有6 bits tag欄有6 bits 主記憶體為214個word Line size = block size 6bits bits bits 4095÷64=63⋯63
51
Replacement algorithm
當讀入新區塊到快取中,而快取中之某一區塊(line)必須移出 LRU(Least Recently Used):將集合中目前最久沒使用的區塊加以取代。可 減少失誤次數,實作困難且成本高。 LFU(Least Frequently Used):將集合中一定時間內被使用次數最少的區塊 加以取代。可減少失誤次數,實作困難且成本高。 LRU LFU
52
Replacement algorithm
FIFO(First In First Out,先進先出):將集合中最早進入的區塊加以取代。實作 較簡單,失誤較高。 LIFO(Last in first out,後進先出):將集合中最晚進入的區塊加以取代。實作 較簡單,失誤較高。 Random(隨機選取):由集合中隨機選一個區塊加以取代。實作最簡單,常 用在快取記憶體。
53
浮點數運算
54
小數點表示法 = 正規化 : = X28 符號位元:佔第1個位元,0表示正數,1表示負數。 指數部分:佔2到9,共8個位元。 (8+64=7210= ) 假數部分:佔10到32,共23個位元。
55
精度 單精度浮點數 雙精度浮點數 單精度浮點數使用32位元(4位元組)來儲存一個浮點數 −3.4× 10 38 ~3.4× 10 38
雙精度浮點數使用64位元(8位元組)來儲存一個浮點數 −1.79× ~1.79×
56
準確性 二進位浮點數不能表達0.1 十進位 0.1=二進位 的一個循環小數,表示八 位數, 也就是 ,十進位1/ /32 + 1/16 = 25/256 = π的值可以表示為π = (十進位)。當在一個支援17位 尾數的電腦中表示時,它會變為 × 22。 浮點數也不能表達圓周率 所以 tan 𝜋 2 不等於正無窮,也不會溢位 sin 𝜋≠0
57
IC製造過程
58
IC設計
59
晶圓製造
60
光罩製作
61
切割、測試、封裝
Similar presentations