1
第 2课 嵌入式 SoC 系统设计概述 嵌入式 SoC 系统设计技术 嵌入式系统的系统级描述方法
2
2.1 嵌入式系统设计技术 处理器技术 IC 技术 设计技术
3
1. 处理器技术
( 体系结构考虑 )
4
1 处理器定制化程度随着处理问题的不同,处理器有不同的定制化程度
total = 0for i = 1 to N loop total += M[i]end loop
通用目的处理器
单用途处理器
专用处理器
需要的功能
5
2 处理器计算引擎结构计算引擎结构 -- 实现系统所需功能处理器不必是可编程的
“ 处理器” 不等于是通用目的处理器
IR PC
寄存器文件
通用ALU
数据通道控制器
程序存储器
Assembly code for:
total = 0 for i =1 to …
控制逻辑和状态寄存器
数据存储器
通用目的处理器 (“ 软件” ) 单用途 (“ 硬件” )
数据通道控制器
控制逻辑
状态寄存器
数据存储器
索引
总计
+
IR PC
寄存器文件
专用ALU
数据通道控制器
程序存储器
Assembly code for:
total = 0 for i =1 to …
控制逻辑和状态寄存器
数据存储器
专用
6
Microcontroller
CCD preprocessor Pixel coprocessorA2D
D2A
JPEG codec
DMA controller
Memory controller ISA bus interface UART LCD ctrl
Display ctrl
Multiplier/Accum
Digital camera chip
lens
CCD
Hardware
Software
举例:数码相机 SoC 系统
7
2. IC 技术
( 实现技术考虑 )
8
数字电路实现方式
把数字(门级)实现映射到 IC 上的方法 IC 技术的差别在于如何根据特定的设计来定制 IC IC 一般都有 10 层以上的结构
谁来建立布局层? 何时建立布局层?
source drainchanneloxidegate
Silicon substrate
IC package IC
9
3 类 IC 技术
全定制 VLSI
半定制 ASIC ( 门阵列和标准 Cell)
PLD ( 可编程逻辑阵列 )
10
1 全定制 VLSI - ASIC
所有的层均根据嵌入式系统的特定数字实现进行优化 晶体管的布局放置,降低连线长度 调整晶体管尺寸,优化信号的传输 走线调整
优点 非常高的性能、尺寸小、低功耗
缺点 非常高的 NRE 成本、非常长的上市时间
11
2 半定制 IC
较低层已经全部或部分建立 晶体管和逻辑门级的掩模已经建立,设计师只需要完成连线
的各层
优点 良好性能、比全定制低的 NRE 成本
缺点 仍然需要几周到几个月的流片开发时间
12
3 PLD ( 可编程逻辑器件 )所有的层都已经存在
设计师可以购买一个 IC ( FPGA 芯片) 通过修改 IC 中各模块的连接可以实现需要的功能 现场可编程门逻辑阵列 (FPGA) 非常流行
优点 低 NRE 成本、 IC 立即可用
缺点 体积更大、单位成本更高、功耗大、速度较慢
13
4 处理器和 IC 技术的权衡基本权衡
通用 vs 定制 处理器技术与 IC 技术的取舍 两种技术是独立的。
通用目的处理器
ASIP 单用途 处理器
Semi-customPLD Full-custom
通用型改善之处 : 定制型改善
功耗性能大小
成本(高产量)
灵活性可维护性NRE 成本
建立样机时间上市时间
成本(低量产)
14
3. 设计技术
( 设计方法学考虑 )
15
设计技术—自顶向下流程如何将所需的系统功能从概念转变成实现的方法
库 /IP: 将预先设计好的低抽象级实现用于高级
系统规范
行为级规范
寄存器传输规范
逻辑实现
至最终实现
编译 / 综合 : 自动产生低级实现细节
测试 / 验证:确保每级功能正确,减少各级之间来回反复的成本
编译 /综合 : 库 /IP 测试 / 验证
系统级综合
行为级综合
RT 综合
逻辑综合
硬件 /软件 /OS
核
RT元件
逻辑门 /单元
模型仿真器 /检查器
硬件软件协同仿真器
HDL仿真器
逻辑门仿真器
16
改进设计流程以提高设计效率的方法
编译 / 综合
库 /IP
测试 / 验证
17
2.2 嵌入式系统级描述方法1. 计算模型 计算模型实例 -FSM 状态机的实现
18
需求分析
规格说明
体系结构设计
硬件设计
系统集成
系统测试
产 品
软件设计执行装置设计
传统设计主要抽象层次
19
体系结构设计 规格说明不讲系统如何做,而只讲系统做什么体系结构设计是设计者认为的设计第一阶段 目的:
描述系统如何实现那些功能,如何计划系统的各个构件。
GPS 接受信号
数据库
显示器搜索引擎 转换器
用户界面
移动地图框图
20
数据库搜索转换器
位置 用户界面 时钟
像素软件
显示器
帧
缓冲器CPU
GPS信号接收器
I /O面板
存储器
硬件
图1-6移动地图的硬件和软件系统
移动地图系统体系结构细化
21
如何继续向下细化直至系统实现?
一般采用经验性设计 如何验证性能满足要求? 如何避免系统实现中的功能性错误? 如何保证上市时间?
22
2.2.1 嵌入式系统的计算模型描述
1. 系统行为的复杂度2. 模型与语言
23
随着 IC容量的增加而增加 过去 : 洗衣机 , 小游戏等 (几百条语句) 目前 : TV 机顶盒 , 移动电话等(几十万条语句)
描述的行为通常初始阶段无法很好理解 由于描述错误造成的大量实现 Bug
用汉语描述系统
嵌入式系统行为的复杂度
24
模型与语言
Models
Languages
食谱
德语英语 日语
诗词 故事
食谱与英文时序程
序
C++C Java
状态图 数据流
顺序程序与 C语言
25
模型与语言
如何精确的捕获系统行为 计算模型是关键环节,也可以考虑用 C 和 C++
常用计算模型 Common computation models: 时序程序模型 ( Sequential program model )
程序流程图 通信进程模型 ( Communicating process model )
可描述多个并发的时序程序模型 状态机模型 ( State machine model )
控制为主的系统。 数据流模型 ( Dataflow model )
数据为主的系统 面向对象模型 ( Object-oriented model )
26
2.2.2 计算模型的举例 -FSM 一个电梯控制器的实例
27
一个电梯控制器的实例
简单的电梯控制器 请求解析器
解析不同楼层请求,确认一个被请求楼层
单元控制器 将电梯移到被请求楼层
用 C 语言来捕获。。。
buttonsinside
elevator
UnitControl
b1
down
open
floor
...
RequestResolver
...
up/downbuttons on
eachfloor
b2bN
up1up2dn2
dnN
req
up
System interface
up3dn3
28
使用时序程序模型描述电梯控制器
“ 将电梯向上或向下移动到被请求楼层,到达被请求楼层后,打开电梯门至少 10s ,并一直保持打开状态,直到被请求的楼层改变,确保电梯门在移动中决不会打开。不能改变电梯移动的方向,除非向上移动时没有更高层请求或向下没有更低层请求。。。。”
用自然语言的描述时序程序模型
void UnitControl() { up = down = 0; open = 1; while (1) { while (req == floor); open = 0; if (req > floor) { up = 1;} else {down = 1;} while (req != floor); up = down = 0; open = 1; delay(10); }}
void RequestResolver() { while (1) ... req = ... ...}void main() { Call concurrently: UnitControl() and RequestResolver()}
Inputs: int floor; bit b1..bN; up1..upN-1; dn2..dnN;Outputs: bit up, down, open;Global variables: int req;
You might have come up with something having even more if statements.
29
状态机模型 (FSM)
考虑用 FSM 模型描述系统: 可能的状态
E.g., Idle, GoingUp, GoingDn, DoorOpen 由 input引起的一个状态到另一个状态的迁移
E.g., req > floor 每个状态发生的活动
E.g., In the GoingUp state, u,d,o,t = 1,0,0,0 (up = 1, down, open, and timer_start = 0)
Try it...
30
状态机模型 (FSM)
Idle
GoingUp
req > floor
req < floor
!(req > floor)
!(timer < 10)
req < floor
DoorOpen
GoingDn
req > floor
u,d,o, t = 1,0,0,0
u,d,o,t = 0,0,1,0
u,d,o,t = 0,1,0,0
u,d,o,t = 0,0,1,1
u is up, d is down, o is open
req == floor
!(req<floor)
timer < 10
t is timer_start
UnitControl 过程的状态机
31
第二讲 主要内容
嵌入式系统的设计技术 嵌入式系统的系统级描述方法
计算模型
简单实例
状态机的使用
并行性的表述
32
FSM 的形式定义FSM 是一个 6 元组 F<S, I, O, F, H, s0>
S :为所有状态的集合 {s0, s1, …, sl}
I :为所有输入的集合 {i0, i1, …, im} O:为所有输出的集合 {o0, o1, …, on} F :次态函 数 (S x I → S ) H :输出函数 (S → O ) s0 :初始状态
33
Finite-state machine with datapath model (FSMD)
FSMD :扩展 FSM , 保存的数据具有复杂的数据类型和变量
FSMs 仅使用布尔数据类型和操作,没有使用变量
FSMD: 7 元组 <S, I , O, V, F, H, s0> S :状态集 {s0, s1, …, sl} I :输入集 {i0, i1, …, im} O :输出集 {o0, o1, …, on}
V :变量集 {v0, v1, …, vn} F :次态函数 (S x I x V → S) H:操作函数 (S → O + V) s0 :初始状态
34
Finite-state machine with datapath model (FSMD)
Idle
GoingUp
req > floor
req < floor
!(req > floor)
!(timer < 10)
req < floor
DoorOpen
GoingDn
req > floor
u,d,o, t = 1,0,0,0
u,d,o,t = 0,0,1,0
u,d,o,t = 0,1,0,0
u,d,o,t = 0,0,1,1
u is up, d is down, o is open
req == floor
!(req<floor)
timer < 10
t is timer_start
把 UnitControl 描述成一个 FSMD
35
如何把一个系统描述成一个状态机
1. 列出所有的状态2. 声明所有的变量(在本例中没有)3. 对每一个状态,列出到其它状态的所有可能的转移和相关的条件4. 对每个状态或迁移,列出相关操作5. 对每个状态,确保现有转移条件是互斥和完整的 互斥:任意两个条件不能同时成立; 完整:任意时间所有条件中总有一个成立
36
状态机与时序程序模型
每种模型反映了对系统行为的不同考虑方式 状态机 : 鼓励设计者要先清楚所有可能的状态,
以及在所有可能输入下可能产生的状态转移 时序程序模型 : 通过可遍历和可条件执行的指令序列来变换数据
状态机描述的优势 更自然的计算手段 其优势不在于采用的是图形表达 (state diagram)
采用文本语言仍然具有相同优势 (i.e., state table) 此外,时序程序模型也能够用图形表达的方式 (i.e., flowchart)
37
2.2.3 状态机的时序实现
1. 用时序语言实现状态机 语言子集方法 时序语言的状态机模版
38
在时序程序语言中捕获状态机目前所有的开发工具都是基于时序程序语言的
C, C++, Java, Ada, VHDL, Verilog, etc. 希望能用流行的工具进行系统开发。
两种捕获状态机的方法 前端工具方法
需要安装额外的工具支持状态机语言 图形 / 文本 状态机语言 可以支持图形仿真 顺序程序语言代码自动生成,并被输入到主程序中
缺点:必须支持额外的工具 (license 成本,升级,培训等 ) 语言子集( Language subset )方法
一种最常使用的方法。。。
39
语言子集方法
遵循一套规则模板,用一组等效的时序语言结构来捕获状态机结构最常用的状态机表达工具
C , VHDL/Verilog)
用 C 来捕获UnitControl 状态机 枚举所有的状态 (#define) 声明状态变量并用初始状态进行初始化 (IDLE) 单 switch 语句分支到当前状态的 case 每个 case 有对应的操作或
up, down, open, timer_start 每个 case 分支检查迁移条件,以确定下一状态
if(…) {state = …;}
40
#define IDLE 0#define GOINGUP 1#define GOINGDN 2#define DOOROPEN 3void UnitControl() { int state = IDLE; while (1) { switch (state) { IDLE: up=0; down=0; open=1; timer_start=0; if (req==floor) {state = IDLE;} if (req > floor) {state = GOINGUP;} if (req < floor) {state = GOINGDN;} break; GOINGUP: up=1; down=0; open=0; timer_start=0; if (req > floor) {state = GOINGUP;} if (!(req>floor)) {state = DOOROPEN;} break; GOINGDN: up=1; down=0; open=0; timer_start=0; if (req < floor) {state = GOINGDN;} if (!(req<floor)) {state = DOOROPEN;} break; DOOROPEN: up=0; down=0; open=1; timer_start=1; if (timer < 10) {state = DOOROPEN;} if (!(timer<10)){state = IDLE;} break; } }} UnitControl state machine in sequential programming language
41
#define S0 0#define S1 1...#define SN Nvoid StateMachine() { int state = S0; // or whatever is the initial state. while (1) { switch (state) { S0: // Insert S0’s actions here & Insert transitions Ti leaving S0:
if( T0’s condition is true ) {state = T0’s next state; /*actions*/ }
if( T1’s condition is true ) {state = T1’s next state; /*actions*/ }
... if( Tm’s condition is true ) {state = Tm’s next state; /*actions*/ }
break; S1: // Insert S1’s actions here // Insert transitions Ti leaving S1
break; ... SN: // Insert SN’s actions here // Insert transitions Ti leaving SN
break; } }}
状态机通用模板