1 / 42

第 2 课 嵌入式 SoC 系统设计概述

第 2 课 嵌入式 SoC 系统设计概述. 嵌入式 SoC 系统设计技术 嵌入式系统的系统级描述方法. 2.1 嵌入式系统设计技术. 处理器技术 IC 技术 设计技术. 1. 处理器技术. ( 体系结构考虑 ). 1 处理器定制化程度. 随着处理问题的不同,处理器有不同的定制化程度. total = 0 for i = 1 to N loop total += M[i] end loop. 需要的功能. 单用途 处理器. 通用目的 处理器. 专用

cheng
Download Presentation

第 2 课 嵌入式 SoC 系统设计概述

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课 嵌入式SoC系统设计概述 嵌入式SoC系统设计技术 嵌入式系统的系统级描述方法

  2. 2.1 嵌入式系统设计技术 处理器技术 IC 技术 设计技术

  3. 1. 处理器技术 (体系结构考虑)

  4. 1 处理器定制化程度 • 随着处理问题的不同,处理器有不同的定制化程度 total = 0 for i = 1 to N loop total += M[i] end loop 需要的功能 单用途 处理器 通用目的 处理器 专用 处理器

  5. 控制器 控制器 数据通道 数据通道 控制器 数据通道 控制逻辑 索引 控制逻辑和状态寄存器 控制逻辑和状态寄存器 寄存器文件 寄存器文件 总计 状态寄存器 + 专用 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 处理器计算引擎结构 • 计算引擎结构--实现系统所需功能 • 处理器不必是可编程的 • “处理器” 不等于是通用目的处理器

  6. 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

  7. 2. IC 技术 (实现技术考虑)

  8. gate oxide IC package IC source channel drain Silicon substrate 数字电路实现方式 • 把数字(门级)实现映射到IC上的方法 • IC技术的差别在于如何根据特定的设计来定制IC • IC一般都有10层以上的结构 • 谁来建立布局层? • 何时建立布局层?

  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. 通用目的 处理器 ASIP 单用途 处理器 通用型改善之处: 定制型改善 灵活性 可维护性 NRE成本 建立样机时间 上市时间 成本(低量产) 功耗 性能 大小 成本(高产量) PLD Semi-custom Full-custom 4 处理器和IC技术的权衡 • 基本权衡 • 通用vs定制 • 处理器技术与IC技术的取舍 • 两种技术是独立的。

  14. 3. 设计技术 (设计方法学考虑)

  15. 编译/综合: 库/IP 测试/验证 系统规范 系统级 综合 硬件/软件/ OS 模型仿真器/ 检查器 编译/综合: 自动产生低级实现细节 行为级规范 行为级综合 核 硬件软件协同仿真器 库/IP: 将预先设计好的低抽象级实现用于高级 寄存器传输规范 RT综合 RT元件 HDL仿真器 测试/验证: 确保每级功能正确,减少各级之间来回反复的成本 逻辑实现 逻辑综合 逻辑门/ 单元 逻辑门仿真器 至最终实现 设计技术—自顶向下流程 • 如何将所需的系统功能从概念转变成实现的方法

  16. 改进设计流程以提高设计效率的方法 • 编译/综合 • 库/IP • 测试/验证

  17. 2.2 嵌入式系统级描述方法 计算模型 计算模型实例-FSM 状态机的实现

  18. 需求分析 规格说明 体系结构设计 执行装置设计 硬件设计 软件设计 系统集成 系统测试 产 品 传统设计主要抽象层次

  19. 体系结构设计 • 规格说明不讲系统如何做,而只讲系统做什么 • 体系结构设计是设计者认为的设计第一阶段 • 目的: 描述系统如何实现那些功能,如何计划系统的各个构件。 显示器 GPS接受信号 搜索引擎 转换器 数据库 用户界面 移动地图框图

  20. 显示器 CPU 帧 缓冲器 GPS信号接收器 存储器 I/O面板 硬件 数据库搜索 转换器 像素 位置 用户界面 时钟 移动地图系统体系结构细化 软件 图1-6移动地图的硬件和软件系统

  21. 如何继续向下细化直至系统实现? • 一般采用经验性设计 • 如何验证性能满足要求? • 如何避免系统实现中的功能性错误? • 如何保证上市时间?

  22. 2.2.1 嵌入式系统的计算模型描述 系统行为的复杂度 模型与语言

  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. 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语言来捕获。。。

  28. 用自然语言的描述 “将电梯向上或向下移动到被请求楼层,到达被请求楼层后,打开电梯门至少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.

  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. 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)

  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. 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

  35. 如何把一个系统描述成一个状态机 • 1. 列出所有的状态 • 2. 声明所有的变量(在本例中没有) • 3. 对每一个状态,列出到其它状态的所有可能的转移和相关的条件 • 4. 对每个状态或迁移,列出相关操作 • 5. 对每个状态,确保现有转移条件是互斥和完整的 • 互斥:任意两个条件不能同时成立; • 完整:任意时间所有条件中总有一个成立

  36. 状态机与时序程序模型 • 每种模型反映了对系统行为的不同考虑方式 • 状态机: 鼓励设计者要先清楚所有可能的状态,以及在所有可能输入下可能产生的状态转移 • 时序程序模型: 通过可遍历和可条件执行的指令序列来变换数据 • 状态机描述的优势 • 更自然的计算手段 • 其优势不在于采用的是图形表达 (state diagram) • 采用文本语言仍然具有相同优势 (i.e., state table) • 此外,时序程序模型也能够用图形表达的方式(i.e., flowchart)

  37. 2.2.3 状态机的时序实现 用时序语言实现状态机 语言子集方法 时序语言的状态机模版

  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 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

  41. 状态机通用模板 #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; } } }

More Related