嵌入式系统与SOC设计第2讲嵌入式概述续-设计技术

Download Report

Transcript 嵌入式系统与SOC设计第2讲嵌入式概述续-设计技术

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