Uploaded by lihc1314i

第11讲 数字电路架构高层次综合(1)

advertisement
课程基本信息
课程基本信息
课程大纲
中秋节 
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 总结
本节课涵盖了:
– 资源和资源类型
– 资源共享和绑定
– 资源绑定的图模型
– 冲突图
– 结构化综合模型
– 一个完整的例题
在本课程的后面部分,我们将探索自动进行资源绑定的算
法
Download