学习日志之synthesis and optimization(2)——Architecture level synthesis

1. 目的

Architecture level上进行的综合可以忽略一些详细的结构。使设计者能够在一个较为宏观的视角上对设计进行优化。

2. 这个是干嘛的

Architecture level synthesis的最终目的是将输入的behavior description(用vhdl之类的硬件语言)最终变成sequencing graph一样的形式(就像上学期学的用于描述FSM的图),最终会将整个系统分为两个部分来描述,一个是control unit另一个是data path,然后可以根据这个sequencing graph进行各种参数上的优化,当然这种优化的前提是你得先设置好各种constrains。

3. 工作流程(working flow)

1) 将HDL硬件编译成初始化的sequencing graph


注:编译分为两种,一种是软件编译,这种编译是将高级语言通过编译器翻译成可执行的代码,即010101之类的机器码,这样的代码load到一个机器中去执行;另一种是硬件编译,这种编译目的是将HDL翻译成最终可以做出来的实物器件,也就是一块芯片或者电路板。

软件编译的流程:

program->intermediat form->optimize->target code

硬件编译的流程:

HDL model->sequencing graph->optimize->block-level interconnection

下图是一个sequencing graph的例子:

学习日志之synthesis and optimization(2)——Architecture level synthesis


2) 在behavior-level上进行第一步优化

>数据流优化

*Tree-high reduction(用逻辑运算的交换律和结合律凑出一些运算块,这些运算块可以通过相应的设计组合成尽可能多的并行运算)

*Constant and bariable propagation(constant propagation: 需要带入常数进行运算的部分提前给算出来变成一个常数;variable propagation: 把一些变量直接变成参数放到其他的变量中去。这两者的目的都是为了减少硬件的运算量)

*Common sub-expression(不同的变量如果产生于一样的运算,那么这两个运算就能合并,把输出变为两个输出就可以了)

>控制流优化

*Model expantion(把函数给解开直接放主程序里去)

*Conditional expantion(把条件判断解开和条件下的运算结合成为一个整的运算,用于判断条件的变量变成式子中的一个变量)

*Loop expantion(把循环解开,不要判断循环条件,直接执行)

3) 加上约束条件进行综合

时间域综合(temporal domain)

scheduling: 每个操作确定一个开始的时间,确定运行的前后顺序和并行的运算

空间域综合(spatial domain)

binding: 将操作和硬件资源相关联,可以确定实现的area

sharing: 一个硬件对应多个操作(这样运行速度会慢一点,因为不能并行)

 

约束:

学习日志之synthesis and optimization(2)——Architecture level synthesis