课程基本信息 课程基本信息 课程大纲 中秋节 09/05:绪言、数制与编码 09/19:逻辑代数:逻辑代数定理公式、逻辑函数标准形式、公式化简 国庆节 09/26:逻辑代数:卡诺图简介、卡诺图化简 10/10 (实) :逻辑门电路:CMOS逻辑门、组合逻辑:组合逻辑分析、设计、编码器 10/17 (实) :组合逻辑:译码器、数据选择器、加法器、比较器、乘法器 10/24 (实) :触发器:基本RS(门闩)、同步RS、主从RS、主从JK 10/31:触发器:边沿触发器、存储器 11/07(提交第一次实验报告):时序逻辑电路:分析 11/14(实):时序逻辑电路:同步时序逻辑设计、计数器与状态化简 11/21(实, 提交第二次实验报告 ):集成电路安全:集成电路概述、密码芯片 11/28(实):数字电路架构高层次综合:图论基础、调度问题的图优化 12/05(实):数字电路架构高层次综合:绪论、资源分配和调度 12/12(实):(金意儿老师)集成电路安全 12/19:集中答疑 12/26:闭卷考试 数字电路与系统 第11讲 数字电路架构高层次综合(1) 目录 1 数字电路架构——综合 2 课程纲要 3 调度 4 资源绑定 1.1 前言 自主设计课程 除课件外,没有其他材料要求 所有材料均在这些注释中以及课程中进行了描述 课程材料借鉴资料 – Giovanni De Micheli, “Synthesis and Optimization of Digital Circuits”, McGraw- Hill, 1994 A good description of most of the topics covered Also covers logic synthesis, not covered in this course – Keshab K. Parhi, “VLSI Digital Signal Processing Systems”, Wiley-Interscience, 1999 Useful for retiming, and a slightly different perspective – Sabih H. Gerez, “Algorithms for VLSI Design Automation”, Wiley, 1999. Useful for a general overview, and some details on floorplanning – M. McFarland, A. Parker, R. Camposano, “The High-Level Synthesis of Digital Systems”, Proc. IEEE, Vol. 78, No. 2, Feb 1990 – R. Camposano, “From Behavior to Structure: High-Level Synthesis”, IEEE Design & Test of Computers, October 1990. 1.2 综合是什么? 综合是将高级抽象层次的描述转化成较低层次的描述 – Matlab → AHDL/VHDL – AHDL /VHDL → 门电路 – 门电路 → 晶体管 综合很重要,因为: – 它提高了生产效率 – 它允许进行设计空间探索 – 它缩短了产品设计时间 – 行业规模和需求巨大 综合也是数学中一些有趣的、“类似游戏的”部分的实 际应用 1.3 什么是综合? 现今综合主要分为两类,取决于输入和输出的描述 – 逻辑综合 • 将给定的布尔式映射到门电路 – 结构化综合(高层次综合,HLS) • 对于给定的电路行为描述,创建一个结构 这门课将会让你更好地理解结构化综合 1.4 示例:结构化综合 问题 – 创建能够实现该行为的电路: “y[n] := a[n] * b[n] + c[n] * d[n]” 方案 (a) 速度快,占用资源多 每个周期一个结果 (b) 速度慢,占用资源少 每两个周期一个结果 2 课程纲要 导论 调度 – 什么时候应该执行每个操作? 资源分配和调度 – 在设计中应该使用多少个计算单元,哪个单元应该执行哪个任务? 存储和性能估计 – 设计占用资源多少?运行速度如何? 控制单元综合 – 如何设计控制器以告知每个单元每次应该做什么? 2 课程纲要 图论和组合优化入门 – 什么是图,如何使用它? – 简单和棘手的问题 – 图的最长路径 – 着色图 – 查找完整子图 – 整数线性程序 2 课程纲要 调度算法 – As Soon As Possible / As Late As Possible – list scheduling – 整数线性程序调度 – 仿射循环调度 – 重定时 资源共享算法 – 间隔着色图 – 寄存器共享 – 整数线性程序资源共享 其他主题 – 函数逼近 – 平面图 学科观点和修订 3 引入:调度 四部分内容: – 调度 – 资源绑定 – 面积和性能评估 – 控制单元综合 这门课包括: – 代码和操作之间的关系 – 数据流和数据流图的控制 – 条件和循环建模 – 资源约束调度 – 链接调度 – 同步 3.1 示例代码片段 – 一段求解微分方程的代码: begin diffeq read( x, y, u, dx, a ); repeat { xl = x + dx; ul = u – 3*x*u*dx – 3*y*dx; yl = y + u*dx; c = xl < a; x = xl; u = ul; y = yl; } until( c ); write( y ); end diffeq xl = x + dx; ul = u – 3*x*u*dx – 3*y*dx; yl = y + u*dx; c = xl < a; 3.2 图和模型 – 要用一种保留了主要内容的方式来表达代码; – “图”对于描述此类模型很有效; – 图G(V,E) 是一个(V,E)对,其中V是一个集合,E 是V上的二元关系; – V的元素称为顶点,E的元素称为边; – 根据边是无序对还是有序对,图形可以是无向 或有向的。 3.2 图和模型 有向图 非循环图 循环图 V = {a,b,c,d} V = {a,b,c,d} E={(a,b),(a,c),(b,d),(c,d)} E = {(b,a),(a,c),(d,b),(c,d)} 无向图 V = {a,b,c,d} E = {{a,b},{a,c},{b,d},{c,d}} 3.3 数据流图 – 数据流图(DFG)表示数据流经计算的方式 xl = x + dx; ul = u – 3*x*u*dx –3*y*dx; yl = y + u*dx; c = xl < a; 3.3 数据流图 – 需要做的是分解算法,标准化以保证输入仅有两个元素 xl = x + dx; ul = u – 3*x*u*dx – 3*y*dx; yl = y + u*dx; c = xl < a; xl = x + dx; t1 = 3*x; t2 = u*dx; t3 = t1*t2; t4 = 3*y; t5 = t4*dx; t6 = u – t3; ul = t6 - t5; t7 = u*dx; yl = y + t7; c = xl < a; 3.4 数据流图和编译 – 硬件和软件实现都必须分解为基本操作 – 对于软件,此过程由编译器完成。每个步骤都 可以由汇编指令执行。 – 假设每个时钟周期执行 1 条指令,上述代码将 花费 11 个周期来执行。数据流图展示了如何 利用并行性来加快速度 – 必须先知道图中节点的每个边的“值”,然后 才能执行该节点描述的计算 3.4 数据流图和编译 – 操作v1必须先知道 操作v2的结果,然 后才能继续进行 – 操作v3完全不依赖 v2,因此如果有足 够的硬件,可以同 时进行操作 3.5 数据流图 – 从形式上而言,数据流图是有向图G(V,E),其 顶点集与任务集一一对应,并且其边沿集与从 一个任务到另一任务的数据传输相对应。 – 数据流程图表示可用的最大并行度 – 不允许表达循环或条件 3.6 控制数据流图 – 能表示条件和循环的结构称为控制数据流图(CDFG) – 控制数据流图是层次结构图,其中层次结构的每个级 别都是一个非循环数据流图,另外两个附加节点分别 代表任务的开始和结束 e.g. 1)喝啤酒 2)吃咖喱 1.1)去酒吧 1.2)点单饮酒 3.7 条件 – 可以通过引入任务 “B”(Branch, 用于分支)来表示条 件,该任务在层次结构的较低级别具有两个替代扩展 a = b < c; if (a) then d = b * c; else d = b + c; 3.8 循环 – 通过引入任务“L”(Loop, 用于循环)来表示循环 – “L”任务在每次迭代时测试循环条件,并进行必要的 更新 for i = 1 to 3 a = a * b; 3.9 函数调用 – 通过引入任务“F”(Function, 用于功能)来表示功能调用 – F任务调用由层次结构中较低层表示的函数体 a = fun(x); b = fun(y); fun(p) { return p*p; } 3.10 一个简单的调度 – 如果拥有无限的硬件资源,可以使算法执行多快? – 假设每个操作需要一个时钟周期 周期1 周期2 周期3 周期4 至少需要四个时钟周期。 该调度需要至少4个乘法器,1个 加法器/减法器和一个比较器 3.11 改善调度 – 通过调整任务的执行,可以减少所需的资源数量 周期1 周期2 周期3 周期4 该调度需要至少3个乘法器,1个加法器/减法器和一个比较器 3.12 调度:定义 – 对于图G(V,E)中的每个节点v,关联执行时间 d(v) – 该图的调度是函数S:V → ℕ,其中对于所有边 (v1,v2)∈E, S(v2) ≥ S(v1) + d(v1) – 对于每个节点v,S(v)表示相关任务的开始时间 3.13 资源受限调度 – 通常,调度任务包括找到一个可以在短时间内 完成的调度,但要受可用硬件资源的限制 – 这称为“资源受限调度” – 示例:调度微分方程代码,使其只需要: • 1个乘法器,1个加法器/减法器,1个比较器 3.13 资源受限调度 xl = x + dx; t1 = 3*x; t2 = u*dx; t3 = t1*t2; t4 = 3*y; t5 = t4*dx; t6 = u – t3; ul = t6 - t5; t7 = u*dx; yl = y + t7; c = xl < a; 3.14 链接调度 – 到目前为止,基本时间单位是1个时钟周期。 – 如果减法仅需要0.5个时钟周期怎么办? 可以在一个 时钟周期内进行两次减法运算。 周期1 周期2 周期3 3.14 链接调度 链接的优点 – 减少调度的延迟 • 延迟是所需的时钟周期总数 – 避免寄存 • 一个时钟周期内的每次数据传输都需要一个寄存器 来存储临时数据 链接的缺势 – 必须使用亚时钟周期单位 – 调度算法的设计变得更加复杂 3.15 同步 – 乘法和加法具有可预测的延迟 • 可以将它们合并到调度模型中 – 某些块没有,例如:数据相关的迭代 (while (a) { … }) 延迟可预测的硬件模块 延迟不可预测的硬件模块 3.15 同步 – 延迟无法预测的任务可以分类为: • 有界延迟任务 for( i=0; i<50; i++ ) { … if( something ) continue; } • 一个简单的解决方案:可以 假设此任务花费了最长的理 论时间 无限延迟任务 while(x) { 没有易于计算的最长理论时间 … x = <something complicated> } 3.15 同步 – 需要使用方法来处理无界任务(它们也可以应用于有 界任务) B ——有界 UB ——无界,实际延迟= n 3.16 总结 本节课涵盖了: – 代码与操作之间的关系 – 数据流图和控制数据流图 – 条件和循环建模 – 资源受限调度 – 链接调度 – 同步化 在本课程的后面部分,我们将探索自动进行调度的算法 4 引入:资源绑定 四部分内容: – 调度 – 资源绑定 – 面积和性能评估 – 控制单元综合 这门课包括: – 资源和资源类型 – 资源共享和绑定 – 资源绑定的图形模型 – 冲突图 – 结构化综合模型 – 一个完整的例题 4.1 资源 – 将可以执行特定功能的硬件称为“资源” • 例如 16x16位乘法器,PCI接口 – 可以对资源执行操作,例如: • 可以对两个物理上不同的乘法器之一执行乘法 • 可以通过专用加法器或ALU(算术逻辑单元)执行 加法。 – 在这里要注意区分操作和执行该操作的资源 4.2 资源类型 – 资源的“类型”表示其执行不同操作的能力 • 乘法器可以做乘法 • 加法器可以做加法 • ALU可以进行加、减、乘、比较、转置等 – 资源类型集R由可用的所有不同资源类型组成 • R = {乘法器,加法器,ALU(算术逻辑单元)} 4.3 资源共享 – 不需要n个加法器来完成算法中的n个加法 • 在传统的顺序处理器中,仅使用一个加法器来完成程 序中的所有加法 • 加法器一次只能用于一项加法,但因为已经调度好了 它们,所有这是可以实现的 – 使用同一资源执行几种不同的操作就是“资源共 享” – 优点:可以节省存储和峰值功率。 – 缺点:(可能)会使速度变慢,消耗更多能量。 4.3 资源共享 – 思考下面的代码及其经过调度的DFG: a = b + 2; c = a + 7; – 可以使用两个加法器或一个共享加法器来完成 加法器少一个但MUX(数据 选择器)多2个,最大时钟速 率可能更差 需要产生选择信号 4.4 资源绑定 – 资源绑定是决定哪个资源应该执行哪个操作的 过程 – 笛卡尔积 • 表示两组的笛卡尔积 • A×B = { (a,b) | a∈A, b∈B } • 例如:{a,b}×{1,2} = {(a,1),(a,2),(b,1),(b,2)} – 资源绑定是函数Y:V→R×ℕ 4.4 资源绑定 – 看一下之前的例子: 4.5 绑定图 – 超图通过允许边入射到任意数量的节点来扩展 图的概念 – 可以用超图 G’(V,E∪EB)表示绑定的CDFG或 DFG E = { (v1,v2) } EB = { {v1}, {v2} } E = { (v1,v2) } EB = { {v1,v2} } 4.6 冲突图 – 有时必须将操作绑定到不同的资源 • 例如:同时执行 – 可以使用冲突图表示此类信息 – 它们具有与相应的DFG或CDFG相同的节点。 – 边缘对应于冲突 • 边缘连接的两个节点不能绑定到同一资源 4.6 冲突图 – 在上节课讲过的例子: 周期1 周期2 周期3 周期4 乘数冲突图 4.6 冲突图 – 在这个例子中,冲突图的结构非常简单 • 两个不相交的节点集,每个节点在其内部完全连接 – 这是因为所有操作都花了一个周期——对于多 周期操作,冲突图会变得更加有趣和重要 4.7 结构模板 – 一旦有了调度表S和资源绑定Y,我们就知道构造 电路所需要的一切 – 为此,综合工具需要牢记“模板” – 使用基于寄存器总线的架构:在一个时钟周期内 • 从寄存器读取值,通过多路复用器,然后将其导向正 确的资源 • 执行操作 • 结果写回寄存器 4.7 结构模板 应在该时钟周期内将其写 入时启用寄存器 选择线决定将哪个寄存 器配送到哪个资源 一些资源可能需要其他控制 4.8 例题 – 考虑以下代码: • a = i+j; b = 2*a + j; c = a * b; d = a*a; • (a)为代码构建CDFG • (b)调度图,使每个运算尽快开始,假设每个乘法需要两个 时钟周期,每个加法需要一个时钟周期 • (c)如果将资源类型设置为R = {adder,multiplier},请为 此示例构造一个资源绑定 • (d)绘制完整的数据路径 • (e)提出节省资源使用的方法 4.8 例题 – 考虑以下代码: • a = i+j; b = 2*a + j; c = a * b; d = a*a; (a)为代码构建CDFG 4.8 例题 – 考虑以下代码: • a = i+j; b = 2*a + j; c = a * b; d = a*a; (b)调度图,使每个运算尽快开始,假设每个乘法 需要两个时钟周期,每个加法需要一个时钟周期 4.8 例题 – 考虑以下代码: • a = i+j; b = 2*a + j; c = a * b; d = a*a; (c)如果将资源类型设置为R = {adder, multiplier},请为此示例构造一个资源绑定 4.8 例题(A-C) A: CDFG,B: 调度图,C: 资源绑定 Y(v1) = (adder,1) Y(v3) = (adder,1) Y(v5) = (multiplier,2) Y(v2) = (multiplier,1) Y(v4) = (multiplier,1) 4.8 例题(D):绘制完整的数据路径 4.8 例题(E):节省存储空间的方法 – 可以通过在周期4-5中调度v5和在6-7中调度 v4来节省1个乘法器,而代价是一个时钟周期 4.9 总结 本节课涵盖了: – 资源和资源类型 – 资源共享和绑定 – 资源绑定的图模型 – 冲突图 – 结构化综合模型 – 一个完整的例题 在本课程的后面部分,我们将探索自动进行资源绑定的算 法