1 / 55

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

嵌入式系统与结构 第三章 通用处理器-软件. 第三章 主要内容.  通用处理器基本结构  通用处理器执行指令-运算  程序员观点理解通用处理器 专用指令集处理器 微处理器的选择 通用处理器设计. 通用处理器 概述. 低的单位成本 部分原因是制造商讲 NRE 分散到了大量处理器中 Motorola 68HC05 微控制器 1996 年出货 10 亿只 投入巨额 NRE 成本进行处理器设计 尖端最优化技术,手工布局来实现最佳性能、尺寸和功耗等设计指标 通用处理器应用于嵌入式系统

dino
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 第三章 主要内容  通用处理器基本结构  通用处理器执行指令-运算  程序员观点理解通用处理器 • 专用指令集处理器 • 微处理器的选择 • 通用处理器设计

  3. 通用处理器概述 • 低的单位成本 • 部分原因是制造商讲NRE分散到了大量处理器中 • Motorola 68HC05 微控制器1996年出货10亿只 • 投入巨额NRE成本进行处理器设计 • 尖端最优化技术,手工布局来实现最佳性能、尺寸和功耗等设计指标 • 通用处理器应用于嵌入式系统 • 只需较低NRE成本,很短的上市/原型时间,具有高度灵活性 • 只需编写软件

  4. Processor Control unit Datapath ALU Controller Control /Status Registers PC IR I/O Memory 3.1 通用处理器基本结构

  5. +1 1. 数据通道结构 Processor Control unit Datapath ALU Controller Control /Status Registers 10 11 PC IR I/O ... Memory 10 11 ...

  6. Processor Control unit Datapath ALU Controller Control /Status Registers PC IR R0 R1 I/O ... Memory 100 load R0, M[500] 500 10 101 inc R1, R0 ... 501 102 store M[501], R1 2. 控制单元

  7. 控制单元子操作 Processor Control unit Datapath ALU Controller Control /Status Registers PC IR 100 R0 R1 load R0, M[500] I/O ... Memory 100 load R0, M[500] 500 10 101 inc R1, R0 501 ... 102 store M[501], R1

  8. 控制单元子操作 Processor Control unit Datapath ALU Controller Control /Status Registers PC IR 100 R0 R1 load R0, M[500] I/O ... Memory 100 load R0, M[500] 500 10 101 inc R1, R0 ... 501 102 store M[501], R1

  9. 控制单元子操作 Processor Control unit Datapath ALU Controller Control /Status Registers 10 PC IR 100 R0 R1 load R0, M[500] I/O ... Memory 100 load R0, M[500] 500 10 101 inc R1, R0 501 ... 102 store M[501], R1

  10. 控制单元子操作 Processor Control unit Datapath ALU Controller Control /Status Registers 10 PC IR 100 R0 R1 load R0, M[500] I/O ... Memory 100 load R0, M[500] 500 10 101 inc R1, R0 501 ... 102 store M[501], R1

  11. 控制单元子操作 Processor Control unit Datapath ALU Controller Control /Status Registers 10 PC IR 100 R0 R1 load R0, M[500] I/O ... Memory 100 load R0, M[500] 500 10 101 inc R1, R0 501 ... 102 store M[501], R1

  12. Processor Control unit Datapath ALU Controller Control /Status Registers PC IR I/O Memory 3. 结构设计考虑-时钟频率 • 时钟周期的倒数 • 必须要长于整个处理器中最长的寄存器到寄存器延时 • 存储器访问时间常常是最长的

  13. Processor Control unit Datapath ALU Controller Control /Status Registers PC IR I/O Memory 结构设计考虑-关键路径 • 以最长时间通过数据通道或控制器的路径。

  14. Processor Processor Program memory Data memory Memory (program and data) Harvard Princeton 4. 存储器结构

  15. 快/昂贵的技术, 通常在片上 Processor Cache Memory 更慢/更便宜的技术, 通常在片外 高速缓冲存储器(Cache)

  16. 第三章 主要内容  通用处理器基本结构  通用处理器执行指令-运算  程序员观点理解通用处理器 • 专用指令集处理器 • 微处理器的选择 • 通用处理器设计

  17. Processor Fetch ops Store results Control unit Datapath Fetch Decode Exec. ALU Controller Control /Status Registers 10 PC IR R0 R1 load R0, M[500] I/O ... Memory 100 load R0, M[500] 500 10 101 inc R1, R0 501 ... 102 store M[501], R1 指令周期的执行 PC=100 clk 100

  18. Processor Control unit Datapath ALU Controller +1 Control /Status Registers Fetch ops Store results Fetch Decode Exec. 11 PC IR R0 R1 inc R1, R0 I/O ... Memory 100 load R0, M[500] 500 10 101 inc R1, R0 501 ... 102 store M[501], R1 指令周期的执行 PC=100 Fetch ops Store results Fetch Decode Exec. clk PC=101 clk 10 101

  19. Processor Control unit Datapath ALU Controller Control /Status Registers PC IR R0 R1 store M[501], R1 Fetch ops Store results Fetch Decode Exec. I/O ... Memory 100 load R0, M[500] 500 10 101 inc R1, R0 501 11 ... 102 store M[501], R1 指令周期的执行 PC=100 Fetch ops Store results Fetch Decode Exec. clk PC=101 Fetch ops Store results Fetch Decode Exec. clk 10 11 102 PC=102 clk

  20. 流水线:增加指令吞吐率 清洗 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 无流水线 流水线 擦干 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 无流水线的盘子清洗过程 Time 流水线盘子清洗过程 Time Fetch-instr. 1 2 3 4 5 6 7 8 Decode 1 2 3 4 5 6 7 8 Fetch ops. 1 2 3 4 5 6 7 8 流水线化 Execute 1 2 3 4 5 6 7 8 指令 1 Store res. 1 2 3 4 5 6 7 8 Time 流水线执行

  21. 处理器的并行化结构 • 指令集并行 • 流水线结构(SISD) • 超标量和超长指令字结构(SIMD) • 多处理器并行(MIMD) • 片上多处理器系统(MPSoC)

  22. 第三章 主要内容  通用处理器基本结构  通用处理器执行指令-运算  程序员观点理解通用处理器 • 专用指令集处理器 • 微处理器的选择 • 通用处理器设计

  23. 程序员的观点 • 程序员不需要详细的理解结构 • 相反,需要知道指令怎样被执行 • 两级指令层次: • 汇编级 • 结构化语言 (C, C++, Java, etc.) • 目前绝大多数开发使用结构化语言 • 汇编级编程仍然需要,主要用于驱动程序设计 • 常常需要详细的时序考虑,扩展位操作 • 汇编级更好的适合这些操作

  24. 1.一个简单指令集 汇编指令. 第一字节 第二字节 运算 MOV Rn, direct 0000 Rn direct Rn = M(direct) MOV direct, Rn 0001 Rn direct M(direct) = Rn Rm MOV @Rn, Rm 0010 Rn M(Rn) = Rm MOV Rn, #immed. 0011 Rn immediate Rn = immediate ADD Rn, Rm 0100 Rn Rm Rn = Rn + Rm SUB Rn, Rm 0101 Rn Rm Rn = Rn - Rm JZ Rn, relative 0110 Rn relative PC = PC+ 相对地址 (only if Rn is 0) 操作码 操作数

  25. 2. 寻址模式 寻址模式 寄存器内容 存储器内容 操作数部分 立即寻址 数据 寄存器直接寻址 寄存器地址 数据 寄存器间接寻址 寄存器地址 存储器地址 数据 直接 存储器地址 数据 间接 存储器地址 存储器地址 数据

  26. 例子程序 等价的汇编程序 C 程序 0 MOV R0, #0; // total = 0 1 MOV R1, #10; // i = 10 2 MOV R2, #1; // constant 1 int total = 0; for (int i=10; i!=0; i--) total += i; // 下一条指令... 3 MOV R3, #0; // constant 0 Loop: JZ R1, Next; // 如果 i=0 跳转 5 ADD R0, R1; // total += i 6 SUB R1, R2; // i-- 7 JZ R3, Loop; // 总是跳转 Next: // 下一条指令...

  27. 3. 嵌入式系统软件设计的考虑 • 程序和数据存储空间分配 • 嵌入式处理器常常非常有限 • e.g., 64 Kbytes program, 256 bytes of RAM (expandable) • 寄存器: 有多少? • 8086CPU的寄存器组(8/16位) • 32位ARM处理器的寄存器组 • 32位嵌入式SoC系统结构 • I/O接口 • 接口驱动程序设计 • Interrupts

  28. 操作系统 DB file_name “out.txt” -- store file name MOV R0, 1324 -- system call “open” id MOV R1, file_name -- address of file-name INT 34 -- cause a system call JZ R0, L1 -- if zero -> error . . . read the file JMP L2 -- bypass error cond. L1: . . . handle the error L2: • 可选的软件层次为一个应用程序提供低层次的服务. • 文件管理、磁盘访问 • 键盘显示接口 • 多程序、多线程的调度执行 • 程序通过系统调用来使用操作系统 系统调用的实现举例

  29. 4. 嵌入式开发环境 • 开发处理器 • 可以编写和调试我们写的程序 • 一般用PC • 目标处理器 • 在嵌入式系统中程序将要运行的处理器 • 一般与开发处理器不同 目标处理器 开发处理器

  30. Asm. File C File C File Compiler Assembler Binary File Binary File Binary File Linker Debugger Exec. File Profiler 验证阶段 实现阶段 Library 4.1 软件开发过程 • 编译器(Compiler) • 交叉编译器 • 在开发处理器上运行,但编译给另一个处理器使用 • 汇编器(Assembler) • 链接器 (Linker) • 调试器(Debugger) • 性能调优工具(Profiler)

  31. 4.2 运行一个程序 • 交叉编译后,如何运行编译的代码?需要两个操作: • 下载到目标处理器 • 仿真 • 仿真 • 一种方法: 硬件描述语言 • 但很慢,并不总是可以得到 • 另一种方法: 指令集仿真器Instruction set simulator (ISS) • ISS可以在开发处理器上运行,但是执行的是目标处理器的指令

  32. 一个简单处理器的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); }

  33. (a) (b) 实现阶段 实现阶段 验证阶段 开发处理器 Debugger/ ISS 外部工具 程序员 验证阶段 仿真器 4.3 测试与调试 • ISS • 可以进行程序控制 –设置断点,查看寄存器,设置值,单步执行, ... • 但不能与实时环境交互 • 下载到板上 • 使用设备编程器 • 在实时环境运行,但不可控制 • 折衷: 仿真器emulator • 在真实环境下运行,以接近实际的运行速度 • 提供一些从PC上可控制的能力

  34. 第三章 主要内容  通用处理器基本结构  通用处理器执行指令-运算  程序员观点理解通用处理器 • 专用指令集处理器 • 微处理器的选择 • 通用处理器设计

  35. 专用指令集处理器(ASIPs) • 通用处理器 • 过于通用以至对需求应用处理效率低 • e.g., 视频处理 –需要巨大的视频缓冲和对大数据矩阵的操作,这在CPP中是不能高效率实现的 • 单用途处理器具有高NRE, 并且不可编程 • ASIPs–瞄准特定领域 • 包含了专用领域的结构特征 • e.g., 嵌入式控制, 数字信号处理, 视频处理, 网络处理, 通信, etc. • 仍然是可编程的

  36. 一个通用的ASIP:微控制器 • 用于嵌入式控制 • 读传感器,设置激励器 • 大多数处理事件(位数据): 数据量不大 • e.g., VCR, 磁盘驱动, 数码照相机, 洗衣机, 微波炉 • Microcontroller 特点 • 片上外设 • 定时器,ADC,串口通信等. • 程序紧凑,尤其是在寄存器空间的使用上 • 片上程序和数据存储 • 对芯片的引脚进行直接的编程访问 • 位操作和其它低级操作提供专门指令

  37. 另一常用 ASIP: 数字信号处理器 (DSP) • 单处理应用 • 大量的数据,常常是数据流 • 数据转换必须很快 • e.g., 蜂窝电话的语音滤波器, 数字TV, 音乐合成 • DSP特点 • 多个指令执行单元 • 单周期乘加指令 • 高效矢量操作 – e.g., 两个矩阵相加 • 矢量 ALUs, 循环缓冲器, etc.

  38. 趋势:更多的定制ASIPs • 过去,微处理器是以芯片的形式获得的 • 目前, 越来越多的是通过 (IP)核来获得 • e.g., 可综合的 VHDL model • 有机会增加定制的datapath硬件和一些定制指令,或者可以删除一些指令 • 产生显著的性能、功耗、尺寸影响。 • 问题: 需要编译器/调试器对定制ASIP支持 • 注意:绝大多数开发都是使用结构化语言 • 一个方案: 自动编译器和调试器产生 • e.g., www.tensillica.com • 另一个方案: 可重定义 compilers • e.g., www.improvsys.com (定制 VLIW 结构)

  39. 第三章 主要内容  通用处理器基本结构  通用处理器执行指令-运算  程序员观点理解通用处理器 • 专用指令集处理器 • 微处理器的选择 • 通用处理器设计

  40. 通用处理器选择 Sources: Intel, Motorola, MIPS, ARM, TI, and IBM Website/Datasheet; Embedded Systems Programming, Nov. 1998

  41. 第三章 主要内容  通用处理器基本结构  通用处理器执行指令-运算  程序员观点理解通用处理器 • 专用指令集处理器 • 微处理器的选择 • 通用处理器设计

  42. 举例:简单通用处理器设计 • 基本结构 • 要求实现的指令集 • 简单处理器的ISS

  43. 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] dir IR[7..0] imm IR[7..0] rel IR[7..0] Mov1 RF[rn] = M[dir] 到 Fetch状态 op = 0000 Mov2 M[dir] = RF[rn] 0001 到 Fetch状态 Mov3 M[rn] = RF[rm] 0010 到 Fetch状态 Mov4 RF[rn]= imm 0011 到 Fetch状态 Add RF[rn] =RF[rn]+RF[rm] 0100 到 Fetch状态 Sub RF[rn] = RF[rn]-RF[rm] 0101 到 Fetch状态 Jz PC=(RF[rn]=0) ?rel :PC 0110 到 Fetch状态 简单通用处理器的FSMD Declarations: bit PC[16], IR[16]; bit M[64k][16], RF[16][8]; 为什么寄存器文件使用16个寄存器? 为什么存储器设计成64K?

  44. 简单通用处理器的结构细化 Datapath 1 控制单元 0 到所有输入控制信号 RFs 2x1 mux RFwa Controller (Next-state and control logic; state register) RF (16) RFw RFwe 来自输入控制信号 RFr1a RFr1e 16 RFr2a PCld Irld PC IR RFr1 RFr2 PCinc RFr2e ALUs PCclr ALU ALUz 2 1 0 Ms 3x1 mux Mre Mwe Memory D A

  45. Datapath 1 Control unit 0 To all input control signals RFs 2x1 mux RFwa Controller (Next-state and control logic; state register) RF (16) RFw RFwe From all output control signals RFr1a RFr1e 16 RFr2a Irld PCld PC IR RFr1 RFr2 PCinc RFr2e ALUs PCclr ALU ALUz 2 1 0 Ms 3x1 mux Mre Mwe Memory D A 简单微处理器设计 Reset PC=0; PCclr=1; IR=M[PC]; PC=PC+1 Fetch MS=10; Irld=1; Mre=1; PCinc=1; Decode from states below Mov1 RF[rn] = M[dir] RFwa=rn; RFwe=1; RFs=01; Ms=01; Mre=1; to Fetch op = 0000 RFr1a=rn; RFr1e=1; Ms=01; Mwe=1; Mov2 M[dir] = RF[rn] 0001 to Fetch RFr1a=rn; RFr1e=1; Ms=10; Mwe=1; Mov3 M[rn] = RF[rm] 0010 to Fetch Mov4 RF[rn]= imm RFwa=rn; RFwe=1; RFs=10; 0011 to Fetch RFwa=rn; RFwe=1; RFs=00; RFr1a=rn; RFr1e=1; RFr2a=rm; RFr2e=1; ALUs=00 Add RF[rn] =RF[rn]+RF[rm] 0100 to Fetch RFwa=rn; RFwe=1; RFs=00; RFr1a=rn; RFr1e=1; RFr2a=rm; RFr2e=1; ALUs=01 Sub RF[rn] = RF[rn]-RF[rm] 0101 to Fetch PCld= ALUz; RFrla=rn; RFrle=1; Jz PC=(RF[rn]=0) ?rel :PC 0110 to Fetch FSMD datapath建立后FSM 操作代替FSMD 操作 简单处理器建立!

  46. 本章小结 • GPP处理器 • 高性能、低NRE, 灵活性 • 控制器、数据通道、存储器 • 结构化语言占主导 • 但汇编语言仍然需要 • 有许多开发工具可以获得 • 包括ISS、ICE(in-circuit emulators) • ASIPs • 微控制器, DSPs, 网络处理器、更多定制的ASIPs • 处理器选择是一个重要步骤 • GPP设计原理上与单用途处理器设计相同

  47. LPT 接口引脚 I/O 方向 寄存器地址 1 Output 寄存器2的0th bit 2-9 Output 寄存器0的0~7bit 10,11,12,13,15 Input 寄存器1的6,7,5,4,3th 14,16,17 Output 寄存器2的1,2,3th bit 示例: 并行端口驱动程序 • 使用汇编语言编程配置PC的并口来执行数字I/O • 这个表提供并口连接器引脚和响应的寄存器位置关系。可通过读写3个专用寄存器来完成响应的管脚的配置。 • 举例 : 并口监控这个输入开关,来开闭

  48. LPT Connection Pin I/O Direction Register Address 1 Output 0th bit of register #2 2-9 Output 0th bit of register #2 10,11,12,13,15 Input 6,7,5,4,3th bit of register #1 14,16,17 Output 1,2,3th bit of register #2 Parallel Port Example .386 CheckPort proc push ax ; 保存ax的内容 push dx ; 保存dx内容 mov dx, 3BCh + 1 ; base + 1 寄存器1的地址 in ax, dx ; 读寄存器 #1 and 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 ; 清除位0 out dx, al ; 将al值写入端口 jmp Done ; we are done SwitchOn: mov dx, 3BCh + 0 ; base + 0 寄存器 #0地址 in al, dx ; 读当前端口状态 or al, 01h ; 第一位置1 out dx, al ; 写端口 Done: pop dx ; 恢复内容 pop ax ; 恢复内容 CheckPort endp extern “C” CheckPort(void); void main(void) { while( 1 ) { CheckPort(); }}

  49. 8086CPU内部结构图 CPU 控制器 工作寄存器 程序计数器(PC) 地址寄存器 指令寄存器(IR) ┆ 指令译码器(ID) 数据寄存器 控 制 逻 辑 部 件 堆栈指示器(SP) ┆ 状态寄存器(PSW) I/O控制逻辑 ALU

  50. 物理地址形成逻辑 A H A L B H B L C H C L D H D L S P B P D I S I 地址总线 AX (20位) 通用寄存器 BX CX 数据总线 DX 8086总线 16位 C S D S S S E S I P ALU数据总线 内部寄存器 总线 控制 电路 (16位) 暂存器 ALU EU 控制器 1 2 3 4 5 6 (8 位) 标 志 总线接口单元(BIU) 执行单元(EU)

More Related