数字电路与系统 第12讲 数字电路架构高层次综合(2) 目录 1 存储和性能估算 2 控制单元综合 1 引入:估算 四部分内容: – 调度 – 资源绑定 – 存储和性能估算 – 控制单元综合 这门课包括: – 设计空间和估算问题 – 资源主导型 – 估算在通用电路中的应用 – 兰特规则 1.1 设计空间参数 – 进行电路设计时可能有多个目标 • 存储少 • 低延迟 • [高通量](用于流水线电路) • 最大时钟频率高 • 低功耗 – 这些目标常常是矛盾的,必须在它们之间进行 权衡 1.1 设计空间参数 – 可以想象一个由(存储,延迟,吞吐量,功率)定义 的4维空间 – 可以选择的每种设计都能绘制为该空间中的一个点 – 哪种设计“最佳”? 1. 存储= 1,延迟= 2,吞吐量 = 1,功率= 1 2. 存储= 2,延迟= 2,吞吐量 = 1,功率= 1 3. 存储= 2,延迟= 1,吞吐量 = 2,功率= 2 – 设计1优于设计2 – 设计1可能比设计3更好,具体取决于我们最关注的指 标是存储,延迟还是吞吐量。 1.1 设计空间参数 – 设计2被称为“劣质设计” • 在所有目标中,它都可以由另一种更优的设计代替 – 从图上来看,可以理解为要减小延迟而在存储上有所 妥协(可能是通过使用更多资源来减少时钟周期数) 1.2 为什么要进行估算? – 不仅要尝试创建一个工作电路,而且还要满足 存储,功耗,延迟等方面的一些限制。 – 每次做出高层设计决策时,我们都希望对该决 策在这些目标上的影响进行估算。 • 例如 如果使用5个乘法器而不是4个,功耗将如何变化? – 不想构建一个实际电路并测量功耗,因此需要 一个模型 1.3 资源优先型 – 对于某些“计算资源优先”的电路,存储,速度 ,功率等都是资源的函数。 • 多路选择器,寄存器等相对占用资源较少 – 对这些电路进行估算很容易 • 面积:将每种资源消耗的面积相加: A = Aadd Nadd + Amult Nmult + … • 延迟:从调度中得知 – 通常DSP电路以计算资源为主 – 例子:上一节课讲的例子 • a = i+j; b = 2*a + j; c = a * b; d = a*a; 1.3 资源优先型 占用面积小 占用面积大 总面积= Aadd + 2Amult 1.4 示例:加法器模型 – 如何估算每种资源的存储和速度? – 通常有一个有关如何构造资源的模型,例如一个n位脉 动进位加法器: 面积 = AHA + AFA(S) + (n-2)AFA 延迟 = THA + TFA(S) + (n-2)TFA(C) 1.5 通用电路 – 对于非计算资源优先的电路,其他几个组件可 能会影响设计目标 • 寄存器 • 多路选择器 • 布线 • 控制单元 1.6 寄存器 – 寄存器用来存储中间临时数据——回到前面的示例, 需要3个寄存器存储临时结果 (a,b,t1) • a = i+j; b = 2*a + j; c = a * b; d = a*a; 1.6 寄存器 – 并不总是需要有和临时变量一样多的寄存器 – 如果寄存器少,可以共享寄存器,就像共享资 源一样 • t1 和 b 在“有效期”中不重叠——可以对两个寄存器使用相 同的寄存器both – 临时变量的数量为设计中需要的寄存器数量提 供了一个很好的“粗略估计” 1.7 多路复用器 – 多路选择器用于将操作数引导到对应的资源 – 从资源绑定中可得知所需的多路复用器的数量 和大小 – 多路复用器会占用面积并增加延迟——增加的 延迟取决于输入MUX的数量 1.8 布线 – 导线也会影响电路的面积,延迟和不可忽略的 功耗 – 目前, 信号在 芯片上 的长距 离传输 有时需 要 10+个时钟周期。 – 然而,布线很难进行估算 • 需要参考资源绑定和实际物理器件布局 – 兰特规则(Rent’s rule)可以提供高层次模型 • 将互连量与存储空间中的门数关联 • N = KGβ (N = 针脚数量, G = 门数量) 1.9 兰特规则 兰特规则给出了一个粗略的估算, 即有多少导线将跨越任何给定组的 边界,也即外部信号连接到逻辑区 段的数量与逻辑区段内的电路库数 量的关系 可以用作接线长度的估计 一个给定组 – N = KGβ (N = 针脚数量, G = 门数量) – 常见器件的兰特常数: • SRAM: β = 0.12, K = 6 • 门阵列: β = 0.50, K = 1.9 1.10 控制单元 – 控制单元将选择信号线接到MUX,将使能信号传递给 寄存器,其本身会占用存储面积和产生功耗 – 控制单元的大小根据算法中循环和分支的数量而明显变 化 • 通常,DSP算法的控制单元非常简单 – 控制单元也会影响最大时钟频率 – 在下一节课中,我们将研究控制单元的综合 • 现在,简要说明一下,控制器的大小会随着: 激活信号的数量(选择,使能) 调度的长度 1.11 例题1 – k 位进位选择加法器的结构如下所示: – 相比k 位Ripple-Carry Adder的 – 假设: • 每个加法器都是ripple-carry 设计 1.11 例题1 – 根据字长 k 得出电路面积和延迟的推导模型 – 面积 = 3AFA(k/2) + AMUX(k/2) – 延迟 = TFA(k/2) + TMUX – 用 k 位ripple-carry进位设计比较面积和延迟 – 面积 = 2AFA(k/2) – 延迟 = 2TFA(k/2) – 与 k 位ripple-carry进位设计相比,电路面积总是 更大。 延迟较小,只要 • TMUX < TFA(k/2) (在合理 k 值下几乎总是正确的) 1.12 例题2 – 假设正在设计一个具有门级兰特常数的电路: • β =0.25, k = 1 – 设计中总共有100万个门。 芯片有多少个引脚? • Pins ≈ (1e6)^0.25 ≈ 32 – 假如芯片太大,必须将其分为两块。现在有多少个引 脚? • 假设均分。 然后: • 引脚 ≈ 2(5e5)^0.25 ≈ 53 – 假如设计中功耗的主要来源是驱动外部引脚。 估算由 于使用两个芯片而导致的功率增加: • 增加比例(%) = (53 – 32)/32 = 66% (假设所有引脚相等) 1.13 总结 本节课涵盖了: – 设计空间和估算问题 – 计算资源主导型 – 估算在通用电路中的应用 – 兰特规则 下节课将研究控制单元的综合 2 引入:控制单元综合 四部分内容: – 调度 – 资源绑定 – 面积和性能评估 – 控制单元综合 这门课包括: – 微码和微码优化 – 硬连线控制 – 通过状态机进行控制 2.1 为什么需要控制单元综合? – 数据路径设计包括 • 多路选择器,将数据引导到正确的资源 • 寄存器使能信号,用于选择何时寄存器应存储中间 值 – 这些信号必须从某个地方生成——控制单元 – 一旦知道算法的调度和资源绑定,就有足够的 信息来设计控制器 2.2 一个控制单元 – 再来看一看之前讲过的示例: a = i+j; b = 2*a + j; c = a * b; d = a*a; Y(v1)=(加法器,1 ) Y(v3)=(加法器,1 ) Y(v5)=(乘法器,2 ) Y(v2)=(乘法器,1 ) Y(v4)=(乘法器,1 ) 2.2 一个控制单元 – 此示例的控制单元必须: • 周期1:使能寄存器 “a”,确保 “adder1” 的输入为 “i” 和 “j”(1使能端) • 周期2:确保 “multiplier1” 的输入为 2 和 “a” • 周期3:使能寄存器 “t1” 和 “d”(2使能端) • 周期4:使能寄存器 “b”,确保 “adder1” 的输入为 “t1” 和“j”(1使能端 、1选择比特) • 周期5:确保“乘法器1”的输入为 “a” 和 “b” (1选择 比特) • 周期6:使能寄存器 “c”(1使能端) 2.3 微码与硬连线控制 – 这是时序电路的行为 • 在此示例中,电路除时钟信号外没有输入 • 电路具有7个二进制输出(5个使能端和2条选择线) – 可以将此电路构建为具有3条地址线的基于微码 的控制器(⌈log2 #cycles⌉) 2.3 微码与硬连线控制 – 或者可 以为此 序列专 门构建 一个有 限状态 机 (FSM)实现 – 这两种实现方案之间的选择是一个逻辑综合问 题——将不作详细考虑 – FSM的设计是本门课程的重要内容 • 比相应的微代码控制器更快,更小,功耗更低 • 设计更复杂 • 流片灵活性较差(相对于使用可编程微码ROM) • 设计灵活性较高(如果设计具有无限的延迟节点) 2.4 水平微码 – 对于之前一直在进行处理的示例,构造ROM内容 • 假定数据输出(MSB到LSB)的顺序如下:a启用,t1启用,d启 用,b启用,c启用,加法器1选择,乘法器1选择 • 假设一个3位向上计数器,初始化为0 – ROM微程序 Address Data Address Data 0x0 0x40 0x3 0x0A 0x1 0x00 0x4 0x01 0x2 0x30 0x5 0x04 2.4 水平微码 – 这就是所谓的“水平”微码 • #状态<< #控制信号(通常) • ROM的宽度比高度大 存储器扁平:地址空间小、单行比特数多 – 水平微码使设计拥有较高的自由度 • 以这种方式可以为任何调度和资源绑定设计一个控 制器 • 设计过程很简单 – 但是,ROM可能很大 2.4 水平微码 – 通过向控制器添加一个额外的(组合)层次, 通常可以减少所需的ROM大小。 – 面临的挑战是精心设计ROM和解码器,以减小 𝑛𝑛并优化速度,功耗和面积 2.5 微码优化 – 如果不同时需要任何控制信号,则只需要 ⎡log2(#control sigs+1)⎤-位ROM数据总线 • 然后可以使用 n 到 2n 解码器来生成控制信号 • (修正:n 至 2n 解码器根据输入的 n 位二进制编码来推断 2n 个不同的可能输出之一。例如,一个2至4解码器的真值表为 00-> 0001、01-> 0010、10 -> 0100、11-> 1000) – 为什么(+1)? • 因为不想在某些时钟周期内声明任何控制信号 2.5 微码优化 – 但是,如果不允许并发控制信号,那么并行就 不能实现! • 硬件实现的优势被破坏、调度失去意义 – 解决方式: • 将控制信号集划分为不需要同时使用的子集 – 对于之前的示例,一个可能的分区是: • {a启用,t1启用,b启用,c启用,multiplier1选 择},{d启用,adder1选择} – 可以分别对每个分区进行编码 2.5 微码优化 – 需要⎡log26⎤ = 3位来编码第一个子集,⎡log23⎤ = 2位来编码第二个子集 – 控制器现在看起来像这样: – 已经节省了ROM数据总线的两位! 2.5 微码优化 – 假设对ROM数据总线(MSB到LSB)进行排序:第一 子集的编码,第二子集的编码 – 假设按照上图中的顺序对每个解码器的输出进行滑动排 序。 – 现在有一个合适的ROM程序: Address Data Address Data 0x0 0b11100 0x3 0b10110 0x1 0b00000 0x4 0b01100 0x2 0b11011 0x5 0b10000 2.6 硬连线FSM综合 – 将控制器设计视为标准的FSM综合问题时 – 每个时钟周期对应一个状态 – 可以简单地为带有无限延迟(无界任务)的节 点的序列图指定FSM行为 – 应用于微码的相同优化技术也可以应用于FSM 设计 2.7 有界延迟示例 – 将之前的示例视为FSM,会导致以下状态转换图,可以 很容易地用硬件描述语言对其进行编码 2.8 无界延迟操作 – 来看一下第一节课中的无限延迟示例: 2.8 无界延迟示例 – 为此示例创建一个FSM很容易 • 必须等待来自无限延迟资源的“完成”信号 有控制器的输 入和输出信号 (未显示FSM输出) 2.9 本地控制器 – 到目前为止,仅假设整个电路只有一个大型控 制器 • 是一种高效,因为它允许控制器设计和实现的开销由许多控制 信号共享 • 但是,由于需要在芯片上传送控制信号,因此对于大型电路来 说可能难以实现 – 每个控制信号(或一组控制信号)可以有自己 的控制器 – 这种控制单元称为“分布式控制”。 使用一个 大 型 控 制 器 称 为 “ 集 中 控 制 ” 或 “ lumped control” 2.10 例题 – 设计离散余弦变换(DCT)算法的硬件实现。 算法的内部循环以及调度和资源绑定显示在下 一页。(x1,x2是输入; y1,y2是输出)。 乘法器和加法器都需要一个时钟周期。 • (a)为此电路绘制一条数据路径 • (b)为此电路设计一个基于水平微码的控制器 • (c)通过使设计“非水平”,最大程度地减少所需的ROM大 小 • (d)重新设计控制器,使每个功能单元都有自己的控制器, 该控制器控制其输入多路复用器的选择信号线和其输出寄存器 的使能信号线 2.10 例题 – 设计离散余弦变换(DCT)算法的硬件实现。 算法的内部循环以及调度和资源绑定显示在下 一页。(x1,x2是输入; y1,y2是输出)。 乘法器和加法器都需要一个时钟周期。 t1 = a*x1; // Cycle 1, mult1 t2 = b*x2; // Cycle 1, mult2 y1 = t1 + t2; // Cycle 2, add1 t3 = b*x1; // Cycle 2, mult1 t4 = -a*x2; // Cycle 2, mult2 y2 = t3 + t4; // Cycle 3, add1 2个乘法器,1个加法器 2.11 例题(A) t1 = a*x1; // Cycle 1, mult1 t2 = b*x2; // Cycle 1, mult2 y1 = t1 + t2; // Cycle 2, add1 t3 = b*x1; // Cycle 2, mult1 t4 = -a*x2; // Cycle 2, mult2 y2 = t3 + t4; // Cycle 3, add1 2个乘法器,1个加法器 2.11 例题(A) t1 = a*x1; // Cycle 1, mult1 t2 = b*x2; // Cycle 1, mult2 y1 = t1 + t2; // Cycle 2, add1 t3 = b*x1; // Cycle 2, mult1 t4 = -a*x2; // Cycle 2, mult2 y2 = t3 + t4; // Cycle 3, add1 来自 控制 单元 2.12 例题(B) – 3 个周期 ⎡log2 3⎤ = 2 位ROM地址 – 6 个寄存器+ 3 个复用器选择线= 9 个控制信号 – 假 定 数 据 总 线 排 序 ( 从 MSB 到 LSB ) : 使 能 信 号 线 (t1,t2,y1,t3,t4,y2); 选择信号线(add1, mult1, mult2) Address Data Address Data 0x0 0b110000000 0x2 0b000001100 0x1 0b001110011 2.13 例题(C) – 通常,找到最小化ROM大小的子集很困难。因此,通常 情况下是找一个较好的子集,但不一定是最佳子集 – 子集1:{ t1,y1,y2 } 需要2位 – 子集2:{ t2,t3,add1 } 需要2位 – 子集3:{ t4 } 需要1位 – 子集4:{ mult1 } 需要1位 – 子集5:{ mult2 } 需要1位 2.13 例题(C) 2.13 例题(C) – 运用这节课所讲的技术将导致下表(上一张幻灯片中该图的 顺序)9到7个数据位的压缩。 – 显然,这还可以进一步压缩。例如使下面的bit6 = bit4, bit5 = bit3,bit2 = bit1 = bit0。 这可实现9到3数据位的 压缩。 Address Data Address Data 0x0 0b1111000 0x2 0b0101000 0x1 0b1010111 2.14 例题(D) – 对于水平实现,只需从集总控制器实现中选择相关的输出位 – 假设顺序(从MSB到LSB): • add1控制器:add1,y1,y2 • mult1控制器:mult1,t1,t3 • mult2控制器:mult2,t2,t4 Address 0x0 0x1 0x2 add1 Data mult1 Data mult2 Data 0b000 0b010 0b101 0b010 0b101 0b000 0b010 0b101 0b000 2.15 总结 本节课涵盖了: – 微码和微码优化 – 硬连线控制 – 通过交互状态机进行控制 – 例题详解