Top Banner
1 嵌嵌嵌嵌 嵌嵌嵌 嵌嵌嵌 嵌嵌嵌嵌嵌 嵌嵌
16

嵌入式系统与结构 第三章 通用处理器-软件

Jan 09, 2016

Download

Documents

twyla

嵌入式系统与结构 第三章 通用处理器-软件. 第三章 主要内容.  通用处理器基本结构  通用处理器执行指令-运算  程序员观点理解通用处理器 专用指令集处理器 微处理器的选择 通用处理器设计. 举例:简单通用处理器设计. 基本结构 要求 实现的指令集 简单处理器的 ISS. FSMD. Reset. PC=0;. IR=M[PC]; PC=PC+1. Fetch. Decode. 自以下状态. IR 的位定义 : op IR[15..12] rn IR[11..8] rm IR[7..4]. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 嵌入式系统与结构 第三章  通用处理器-软件

1

  嵌入式系统与结构

第三章 通用处理器-软件

Page 2: 嵌入式系统与结构 第三章  通用处理器-软件

2

  第三章 主要内容 通用处理器基本结构 通用处理器执行指令-运算

程序员观点理解通用处理器 专用指令集处理器

微处理器的选择

通用处理器设计

Page 3: 嵌入式系统与结构 第三章  通用处理器-软件

3

举例:简单通用处理器设计基本结构

要求实现的指令集

简单处理器的 ISS

Page 4: 嵌入式系统与结构 第三章  通用处理器-软件

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 ?

Page 5: 嵌入式系统与结构 第三章  通用处理器-软件

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

Page 6: 嵌入式系统与结构 第三章  通用处理器-软件

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

简单处理器建立 !

Page 7: 嵌入式系统与结构 第三章  通用处理器-软件

7

本章小结

GPP 处理器 高性能、低 NRE, 灵活性

控制器、数据通道、存储器结构化语言占主导

但汇编语言仍然需要有许多开发工具可以获得

包括 ISS 、 ICE ( in-circuit emulators )ASIPs

微控制器 , DSPs, 网络处理器、更多定制的 ASIPs处理器选择是一个重要步骤GPP 设计原理上与单用途处理器设计相同

Page 8: 嵌入式系统与结构 第三章  通用处理器-软件

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

Page 9: 嵌入式系统与结构 第三章  通用处理器-软件

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

Page 10: 嵌入式系统与结构 第三章  通用处理器-软件

10

I/O控制逻辑ALU

控制器 工作寄存器

CPU

程序计数器( PC )指令寄存器( IR )指令译码器( ID )控 制 逻 辑 部 件堆栈指示器( SP )状态寄存器( PSW )

地址寄存器

数据寄存器

8086CPU 内部结构图

Page 11: 嵌入式系统与结构 第三章  通用处理器-软件

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

Page 12: 嵌入式系统与结构 第三章  通用处理器-软件

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

Page 13: 嵌入式系统与结构 第三章  通用处理器-软件

13

Intel PXA255 SOC 系统结构

Page 14: 嵌入式系统与结构 第三章  通用处理器-软件

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

Page 15: 嵌入式系统与结构 第三章  通用处理器-软件

15

例 . 简单处理器基本结构Processor

控制单元 数据通道ALU

Registers

IRPC

Controller

MemoryI/O

控制与状态

Page 16: 嵌入式系统与结构 第三章  通用处理器-软件

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);}