绪论

记一记嵌入式系统的设计步骤

嵌入式系统本身引起的设计困难

  • 测试的复杂性
    • 怎么测试系统的实时性
    • 怎么使用真实数据进行测试
  • 有限的可观察性和可控性
    • 嵌入式系统通常不具有键盘和屏幕
    • 难以通过观测内部总线的电信号来了解系统内部运行过程
  • 受限的开发环境
    • 需要专门的模拟仿真软件

嵌入式计算的性能

在一般的计算中,性能都是指平均情况。嵌入式计算的核心是实时计算,在实时系统中,性能必须满足截止时限。

嵌入式系统的设计步骤

嵌入式系统的设计步骤

需求分析

需求分为功能性和非功能性两部分

  • 功能性需求:
    • 系统的输入,以及相关输入的输出
  • 非功能性需求:
    • 性能:软件性能度量和满足特定操作的硬截止时限
    • 成本:包括制造成本和一次性工程费用(NRE)
    • 尺寸和重量:对于手持式设备需要严格约束
    • 功耗:对于电池供电系统的重要因素

规格说明

规格说明解释系统做什么,并不涉及如何做。

体系结构设计

描述系统如何实现规格的功能

硬件和软件组件的设计

组件设计是为了确保符合体系结构和规格说明的要求

系统集成

将建立的软硬件组件合并成能运转的系统

处理器

什么是处理器?

  • 通用处理器是一个执行存储器中指令的有限状态机(FSM)
  • 系统的状态由存储器和处理器寄存器的数据定义。每条指令都规定了总状态变化的特定方式,还指定随后执行哪条指令。

处理器分类

  • 从体系结构的角度:
    • 冯·诺依曼体系结构
    • 哈佛体系结构
  • 从指令集复杂程度的角度:
    • 复杂指令集计算机CISC
    • 精简指令集计算机RISC
  • 从指令执行方式的角度:
    • 单发射
    • 多发射

冯·诺依曼结构

在同一片存储器中,既可以存储数据,也可以存储指令。

代表:X86、ARM7

  • 指令和数据空间统一编址,存储分配灵活,可以最大限度的利用资源。

  • 适合于复杂的、任务可扩展的嵌入式系统。

    比如:在通用计算或智能终端中,应用软件的多样性使得计算机要不断地变化所执行的代码的内容,并且频繁地对数据与代码占有的存储器进行重新分配。

哈佛结构

独立的程序和数据存储器,避免了存储端口的竞争,为数字信号处理提供了较高的性能,因此大部分DSP都采用哈佛体系结构。

代表:ARM9、TI DSP

  • 指令和数据空间独立编址,避免了存储端口的竞争。
  • 适合于那些程序固化、任务相对简单的嵌入式系统。
  • 不能编写自修改程序,但指令与数据空间分开,安全。

CISC vs. RISC

RISC CISC
指令长度 固定的(如32bit)指令长度,
指令类型很少
变长指令集,
指令类型很多
程序数据与指令存储 Load-Store结构,数据处理指令只访问CPU内部寄存器,
与访问存储器的指令是分开的
一般允许将存储器中的数据作为数据处理指令的操作数
寄存器 较大的通用寄存器堆,
便于Load-Store有效工作
CPU内部寄存器一般较少,
且多数都有特殊用途
流水线 简化流水线设计,实现高效执行、单周期执行 连续指令的流水线之间重叠少,
执行一条指令一般需要多个时钟周期

大端和小端

  • 大端格式:在字(word)的最高位中存放数据的最低位字节(byte),如:IBM的PowerPC处理器。
  • 小端格式:在字(word)的最低位中存放数据的最低位字节(byte),如:X86结构处理器。

单发射与多发射

  • 单发射(single-issue):处理器一次只能执行一条指令。如:ARM7
  • 多发射(multi-issue):处理器在同一时间能够执行多条指令。在处理器内部,需要增加额外的译码和执行单元。
  • 超标量(Superscalar)处理器:使用专门的硬件逻辑识别处理器在运行的时候可以同时执行的多条指令(多发射)。如:Pentium
  • 超长指令字(VLIW)处理器:依靠编译器来决定哪些指令组合可以同时在处理器上执行,并且不会产生错误。如:Itanium

超标量和超长指令字都是处理多条指令,不同点在于:

  • 超标量是将多条指令同时用多个指令译码器处理后发给对应功能单元;
  • 超长指令字是将指令包用单个指令译码器处理后拆分为多个指令给对应功能单元。

二进制数的补码和反码

请百度吧,我实在不想写了

MU0处理器

MU0处理器结构示意图

基本部件

  • 程序计数器(PC)寄存器:保存下一条指令地址

  • 累加器(ACC)寄存器:保存正在处理的数据

  • 算术逻辑单元(ALU):对二进制数进行操作

  • 指令寄存器(IR):保存当前执行的指令

  • 指令译码器和控制逻辑:根据指令控制上述部件产生所需的结果

  • 对MU0处理器的一些判断:

    • 冯·诺依曼结构?哈佛结构?
    • RISC?CISC?
    • 单发射?多发射?
答案

MU0是冯诺依曼结构,RISC,单发射。

指令集

RTL设计

RTL级示意图

控制信号编码

上执行,下取指

控制信号

  • PCce、IRce、ACCce:PC、IR、ACC寄存器对应的时钟使能信号,有效时可以将数据写入寄存器

  • ALUfs:ALU功能的选择信号

  • Asel、Bsel:两个多路器的选择控制信号

  • ACCoe:把ACC值送到存储器memory的三态驱动器的控制信号

  • MEMrq、RnW:存储器的请求和读/写控制信号

  • STO指令与LDA指令在取指周期的控制信号数值完全相同。

  • 因此,STO指令与LDA指令在取指周期的操作过程完全一致

问:对于MU0的STO指令,在指令执行状态时,控制信号RnW的编码值为?

答案

0

可优化的部分

  • PCce和IRce总是相同的 -> 可合并为一个信号
  • ACCoe为高时,RnW为低(写操作) -> 一个信号可由另一个信号反相产生