1 嵌嵌嵌嵌 嵌嵌嵌 统 嵌嵌嵌 嵌嵌嵌嵌嵌 嵌嵌 -
Jan 09, 2016
1
嵌入式系统与结构
第三章 通用处理器-软件
2
第三章 主要内容 通用处理器基本结构 通用处理器执行指令-运算
程序员观点理解通用处理器 专用指令集处理器
微处理器的选择
通用处理器设计
3
举例:简单通用处理器设计基本结构
要求实现的指令集
简单处理器的 ISS
4
简单通用处理器的 FSMDDeclarations: bit PC[16], IR[16]; bit M[64k][16], RF[16][16];
IR 的位定义 : op IR[15..12] rn IR[11..8] rm IR[7..4]
dir IR[7..0] imm IR[7..0] rel IR[7..0]
Reset
Fetch
Decode
IR=M[PC];PC=PC+1
Mov1 RF[rn] = M[dir]
Mov2
Mov3
Mov4
Add
Sub
Jz01100101
01000011
00100001
op =
0000
M[dir] = RF[rn]
M[rn] = RF[rm]
RF[rn]= imm
RF[rn] =RF[rn]+RF[rm]
RF[rn] = RF[rn]-RF[rm]
PC=(RF[rn]=0) ?rel :PC
到 Fetch 状态
到 Fetch 状态
到 Fetch 状态
到 Fetch 状态
到 Fetch 状态
到 Fetch 状态
到 Fetch 状态
PC=0;
自以下状态
FSMD
为什么寄存器文件使用 16 个寄存器?为什么存储器设计成 64K ?
5
简单通用处理器的结构细化Datapath
IRPC
Controller(Next-state and
controllogic; state register)
Memory
RF (16)
RFwa
RFwe
RFr1a
RFr1e
RFr2a
RFr2eRFr1 RFr2
RFw
ALUALUs
2x1 mux
ALUz
RFs
PCld
PCinc
PCclr
3x1 muxMs
MweMre
到所有输入控制信号
来自输入控制信号
控制单元
16Irld
2
1
0
A D
1
0
6
简单微处理器设计
datapath 建立后 FSM 操作代替 FSMD 操作
RFwa=rn; RFwe=1; RFs=01;Ms=01; Mre=1;
RFr1a=rn; RFr1e=1; Ms=01; Mwe=1;
RFr1a=rn; RFr1e=1; Ms=10; Mwe=1;
RFwa=rn; RFwe=1; RFs=10;
RFwa=rn; RFwe=1; RFs=00;RFr1a=rn; RFr1e=1;RFr2a=rm; RFr2e=1; ALUs=00RFwa=rn; RFwe=1; RFs=00;RFr1a=rn; RFr1e=1;RFr2a=rm; RFr2e=1; ALUs=01PCld= ALUz;RFrla=rn;RFrle=1;
MS=10;Irld=1;Mre=1;PCinc=1;
PCclr=1;Reset
Fetch
Decode
IR=M[PC];PC=PC+1
Mov1 RF[rn] = M[dir]
Mov2
Mov3
Mov4
Add
Sub
Jz0110
0101
0100
0011
0010
0001
op = 0000
M[dir] = RF[rn]
M[rn] = RF[rm]
RF[rn]= imm
RF[rn] =RF[rn]+RF[rm]
RF[rn] = RF[rn]-RF[rm]
PC=(RF[rn]=0) ?rel :PC
to Fetch
to Fetch
to Fetch
to Fetch
to Fetch
to Fetch
to Fetch
PC=0;
from states below
FSMD
Datapath
IRPC
Controller(Next-state and
controllogic; state
register)
Memory
RF (16)
RFwa
RFwe
RFr1a
RFr1e
RFr2a
RFr2eRFr1 RFr2
RFw
ALUALUs
2x1 mux
ALUz
RFs
PCld
PCinc
PCclr
3x1 muxMsMweMre
To all input control signals
From all output control signals
Control unit
16Irld
2
1
0
A D
1
0
简单处理器建立 !
7
本章小结
GPP 处理器 高性能、低 NRE, 灵活性
控制器、数据通道、存储器结构化语言占主导
但汇编语言仍然需要有许多开发工具可以获得
包括 ISS 、 ICE ( in-circuit emulators )ASIPs
微控制器 , DSPs, 网络处理器、更多定制的 ASIPs处理器选择是一个重要步骤GPP 设计原理上与单用途处理器设计相同
8
示例 : 并行端口驱动程序
使用汇编语言编程配置 PC 的并口来执行数字 I/O 这个表提供并口连接器引脚和响应的寄存器位置关系。
可通过读写 3 个专用寄存器来完成响应的管脚的配置。 举例 : 并口监控这个输入开关,来开闭
PC Parallel port
Pin 13
Pin 2
Switch
LED
LPT 接口引脚 I/O 方向 寄存器地址1 Output 寄存器 2 的 0th bit
2-9 Output 寄存器 0 的 0 ~ 7bit
14,16,17 Output 寄存器 2 的 1,2,3th bit
10,11,12,13,15 Input 寄存器 1 的 6,7,5,4,3th
9
Parallel Port Example.386
CheckPort procpush ax ; 保存 ax 的内容
push dx ; 保存 dx 内容mov dx, 3BCh + 1 ; base + 1 寄存器 1 的地址in ax, dx ; 读寄存器 #1and al, 10h ; 屏蔽位 4 以外的所有位cmp al, 0 ; al 为 0 ?jne SwitchOn ; 不是则点亮 LED
SwitchOff:mov dx, 3BCh + 0 ; base + 0 寄存器 0 的地址in al, dx ; 读当前端口状态and al, f7h ; 清除位 0out dx, al ; 将 al 值写入端口jmp Done ; we are done
SwitchOn:mov dx, 3BCh + 0 ; base + 0 寄存器 #0 地址in al, dx ; 读当前端口状态or al, 01h ; 第一位置 1out dx, al ; 写端口
Done: pop dx ; 恢复内容pop ax ; 恢复内容
CheckPort endp
extern “C” CheckPort(void);void main(void) {
while( 1 ) {CheckPort();
}}
LPT Connection Pin I/O Direction Register Address
1 Output 0th bit of register #2
2-9 Output 0th bit of register #2
14,16,17 Output 1,2,3th bit of register #2
10,11,12,13,15 Input 6,7,5,4,3th bit of register #1
PC Parallel port
Pin 13
Pin 2
Switch
LED
10
I/O控制逻辑ALU
控制器 工作寄存器
CPU
程序计数器( PC )指令寄存器( IR )指令译码器( ID )控 制 逻 辑 部 件堆栈指示器( SP )状态寄存器( PSW )
地址寄存器
数据寄存器
┆
┆
8086CPU 内部结构图
11
总线控制电路
EU控制器
标 志
暂存器
通用寄存器
ALU 数据总线
地址总线
数据总线
执行单元( EU) 总线接口单元( BIU )
( 20 位)
( 8 位)
( 16 位)
16 位
ALU
S SD S
E SI P
C S
内部寄存器
B H B LA H A L
D H
D LS PB P
C LC H
D IS I
8086总线
物理地址形成逻辑
21 3 64 5
AXBX
DXCX
12
ARM 处理器的寄存器组织
未用
通用寄存器和程序计数
器
R0
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13 ( SP )R14 ( LR )
R15
状态寄存器
CPSR
SPSR
用户 系统 管理 中止 未定义 IRQ FIQ
R13_svc
R14_svc
SPSR_svcSPSR_abt
R13_abtR14_abt
SPSR_und
R13_undR14_und
R13_IRQ
R14_irq
SPSR_irq
R13_fiq
R14_fiq
R11_fiq
R12_fiq
R9_fiq
R10_fiq
R8_fiq
SPSR_fiq
13
Intel PXA255 SOC 系统结构
14
例 . 一个简单指令集
操作码 操作数
MOV Rn, direct
MOV @Rn, Rm
ADD Rn, Rm
0000 Rn direct
0010 Rn
0100 RmRn
Rn = M(direct)
Rn = Rn + Rm
SUB Rn, Rm 0101 Rm Rn = Rn - Rm
MOV Rn, #immed. 0011 Rn immediate Rn = immediate
汇编指令 . 第一字节 第二字节 运算
JZ Rn, relative 0110 Rn relative PC = PC+ 相对地址 (only if Rn is 0)
Rn
MOV direct, Rn 0001 Rn direct M(direct) = Rn
Rm M(Rn) = Rm
15
例 . 简单处理器基本结构Processor
控制单元 数据通道ALU
Registers
IRPC
Controller
MemoryI/O
控制与状态
16
一个简单处理器的 ISS#include <stdio.h>typedef struct { unsigned char first_byte, second_byte;} instruction;
instruction program[1024]; // 指令存储器unsigned char memory[256]; // 数据存储器
int run_program(int num_bytes) {
int pc = -1; unsigned char reg[16], fb, sb; while( ++pc < (num_bytes / 2) ) { fb = program[pc].first_byte; sb = program[pc].second_byte; switch( fb >> 4 ) { case 0: reg[fb & 0x0f] = memory[sb];
break; case 1: memory[sb] = reg[fb & 0x0f];
break; case 2: memory[reg[fb & 0x0f]] = reg[sb >> 4]; break; case 3: reg[fb & 0x0f] = sb; break; case 4: reg[fb & 0x0f] += reg[sb >> 4];
break; case 5: reg[fb & 0x0f] -= reg[sb >> 4];
break; case 6: pc += sb; break; default: return –1;
} } return 0;}
int main(int argc, char *argv[]) {
FILE* ifs;
If( argc != 2 || (ifs = fopen(argv[1], “rb”) == NULL ) { return –1; } if (run_program(fread(program, sizeof(program) , ifs)) == 0) {
print_memory_contents();return(0);
} else return(-1);}