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