教材是机械工业出版社那本绿绿的《高级FPGA设计:结构、实现和优化》。
第1章 高速度结构设计优化
一、速度基本定义
流量 Throughout——每个时钟周期处理的数据量;度量:位数/秒;
时滞Latency——输入与输出之间的时间;度量:时间or时钟周期;
时序Timing——时序元件之间的逻辑延时;度量:时钟周期和频率;
(当两个时序元件之间的最大延时大于时钟周期时,即不满足时序要求)
二、优化和改进速度指标的技术
- 高流量
“流水线设计”——使新数据在前面的数据完成之前就可以进行处理
“拆开迭代环路”——减少逻辑占用的时钟周期,但会增加面积
- 低时滞
“并行性”“去除流水线”“缩短逻辑”——采用“组合逻辑”取代“流水线”
- 时序优化
最 大 频 率 : F m a x = 1 T c l k − q + T l o g i c + T r o u t i n g + T s e t u p − T a k e w 最大频率:F_{max}=\frac{1}{T_{clk-q}+T_{logic}+T_{routing}+T_{setup}-T_{akew}} 最大频率:Fmax=Tclk−q+Tlogic+Trouting+Tsetup−Takew1
- 添加寄存器层次——添加中间的寄存器层次到关键路径,把关键路径分成两个延时更小的路径;
- 并行结构——把一个逻辑功能拆分成多个可以并行估值的更小的功能,较少路径延时;
- 展平逻辑结构(应用于特权编码)——去除不需要的特权编码,展平逻辑结构,减少路径延时;
- 寄存器平衡——平衡各级流水线之间的逻辑,缩短关键路径(因为时钟速度由最坏条件路径决定);
- 重新安排路径——在数据流中重新安排路径使关键路径最小化;
第2章 面积结构设计优化
- 通过选择正确的拓扑结构来减少面积,拓扑指的是设计的高层次组织而非器件的特性。
- 针对面积的拓扑即尽可能最大程度地复用逻辑。
2.1 折叠流水线
- 与“拆开迭代环路”相反的操作.
(比如:乘法器等本身具有非常长的逻辑链,可用移位和加操作将其折叠)
2.2 基于控制的逻辑复用
- 当共享逻辑比控制逻辑更大时,控制可以直接用来逻辑复用。
2.3 资源共享
- 指高层次的结构资源共享,不同的资源在横跨不同功能范围内共享。
(例如:采用系统计数器,可以将计数器集中到更高的层次,再分配到多个功能单元)
2.4 复位对面积的影响
- 不必要的复位策略可以产生不必要的大的设计和抑制一些面积优化。
2.4.1 无复位的资源
- 描述全局复位会对没有可用复位的FPGA资源产生不好的影响。
(如定义了复位之后综合工具将不能识别移位寄存器SRL16,并产生16个触发器代替其功能)
2.4.2 无置位的资源
- 大多乘法器有复位资源,但没有置位资源。
2.4.3 无同步复位的资源
- 高性能FPGA提供了广泛应用范围可利用的内置多功能模块,一般,这些资源有复位功能,但是限制于复位拓扑的类型。当利用与器件中可用的复位类型不同的复位时,将要产生大量的逻辑来实现异步复位。
2.4.4 复位RAM
- 内置的RAM资源中有复位的资源,但常常只有同步复位是有效的。企图用异步复位实现某个RAM时,可能被拆分成更小的RAM以满足异步复位的要求。
2.4.5 利用置位/复位触发器引脚
- 综合工具常常可以利用置位和复位引脚来实现逻辑形式,减少查找表的负荷。
- 利用置位/复位触发器引脚可能会阻止一些组合逻辑的优化。
- 考虑面积因素时,尽可能避免利用置位和复位。
第3章 功耗结构设计优化
-
FPGA是耗电器件,不适用于超低功耗设计技术;
-
CMOS中动态功耗与寄生电容有关(寄生电容大小与触发的门的数量及连接这些门的布线长度有关);
I 总 电 流 = V ∗ C ∗ f I_{总电流} = V * C * f I总电流=V∗C∗f
3.1 时钟控制
-
动态禁止在特定区域中的时钟,即在设计的非激活区域暂时中止时钟(有效而直接的方法);
例如:
- 利用触发器的时钟使能引脚代替‘’直接时钟选通‘’
- 利用全局时钟的多路选择器(mux)(即Xilinx器件中的BUFGMUX元件)代替“直接时钟选通”
-
但注意,选通时钟将会引入新的时钟区域,在实现和时序分析方面产生困难
-
时钟偏移:当同一时钟在不同路径中出现延迟时,将可能导致电路失效
-
例如多级触发器中某一级的组合逻辑延时低于时钟延时,在一个时钟周期内信号将通过两级触发器,导致错误
-
控制时钟偏移
第4章 设计实例:高级加密标准(AES)
4.1 AES结构
-
简介
- AES是对称的密钥密码;
- 密钥长度与轮数目:128位——11次轮,192位——12次轮,256位——14次轮;
- 每个轮的轮密钥都是唯一的;
-
加密过程(以128位、11次轮为例)
- 第一轮迭代前将明文和原始密钥进行一次异或加密操作;
- 迭代:字节变换(查表,S盒)→行移位(循环左移)→列混合(与固定矩阵相乘)→轮密钥加(与128位轮密钥同状态矩阵中的数据进行逐位异或操作)
- 最后一轮迭代不执行 列混合
-
密钥扩展
-
i不是4的倍数
W [ i ] = W [ i − 4 ] ⊕ W [ i − 1 ] W[i] = W[i-4] ⊕ W[i-1] W[i]=W[i−4]⊕W[i−1]
-
i是4的倍数
W [ i ] = W [ i − 4 ] ⊕ T ( W [ i − 1 ] ) W[i] = W[i-4] ⊕ T(W[i-1]) W[i]=W[i−4]⊕T(W[i−1])
-
T函数
字循环(循环左移1个字节)→字节代换(利用S盒字节代换)→轮常量异或(与轮常量Rcon[j]进行异或)
-
第8章 实现数学函数
8.1 硬件除法
8.1.1 乘法和移位
- 依靠二进制数的基本特性,向最低有效位移一位(大部分情况为右移),得到除2的结果。
- 特点:方便;只可以在除数按照规定的形式表示时利用。
- 例:被7除可以近似为用73相乘,再伴随用512相除(右移9位),结果近似于被7.013相除。
8.1.2 迭代除法
- 属于数字递归方法的算法例子,迭代的方法一般称为逐步逼近的方法。(类似于十进制数长除)
- P90页图8-3 图8-4
- 被除数归一化为一个小于两倍除数的定点数值,每次移位操作将产生一个新的必须小于两倍除数的“部分商”;如果除数小于等于当前迭代的“部分除数”,则将逻辑1移入商寄存器,否则,将逻辑0移入商寄存器,并将“部分除数”左移1。
- 高级综合工具(如Synplify Pro等)将自动地对定点操作实现这类结构。
8.1.3 Goldschmidt方法
- Goldschmidt方法属于逐步逼近算法,随着算法的每次递推得到更接近正确值的商。
- Goldschmidt实现的典型值: 2 10 2^{10} 210位
- 用近似 1 / D 1/D 1/D的数值与N相乘来计算 Q = N / D Q=N/D Q=N/D,再通过逐步逼近获得更接近正确值的商。
- 步骤:
- 归一化分子分母:通过移动定点,使得 N ≥ 1 N\geq 1 N≥1和 D < 2 D<2 D<2
- 从查找表查找一个初始的 1 / D 1/D 1/D近似值开始,命名为 L 1 L_1 L1(由应用决定精度,通常8到16位的精度是足够的)
- 计算第一个近似值 q 1 = L 1 N q_1=L_1N q1=L1N和误差项 e 1 = L 1 D e_1=L_1D e1=L1D(迭代趋近无限时, e 1 e_1 e1将接近1)
- 假设 L 2 = − e 1 L_2=-e_1 L2=−e1,开始迭代
- e 2 = e 1 L 2 e_2=e_1L_2 e2=e1L2和 q 2 = q 1 L 2 q_2=q_1L2 q2=q1L2
- 假设 L 3 = − e 2 L_3=-e_2 L3=−e2,再次迭代
- …
8.2 泰勒和Mactaurin级数展开
- 用于分解指数、三角函数、对数等,使其成为简单的乘和加的操作,更好地适合硬件实现
- 泰勒级数和麦克劳林公式
8.3 CORDIC算法
- Coordinate Rotation Digital Computer:利用一系列的矢量旋转逐步逼近来计算三角函数,对于正弦、余弦函数特别有效。
- 步骤
- 在x-y平面上画一个幅度为1,相位为0的矢量
- 逆时针旋转矢量,达到预期角度
- c o s = y / 1 cos=y/1 cos=y/1, s i n = x / 1 sin=x/1 sin=x/1
- 迭代方程数定义如下
- x i + 1 = K i [ X i − y i d i 2 − i ] x_{i+1}=K_i[X_i-y_id_i2^{-i}] xi+1=Ki[Xi−yidi2−i]
- y i + 1 = K i [ y i + x i d i 2 − i ] y_{i+1}=K_i[y_i+x_id_i2^{-i}] yi+1=Ki[yi+xidi2−i]
-
K
i
=
(
1
+
2
−
2
i
)
−
1
/
2
Ki=(1+2^{-2i})^{-1/2}
Ki=(1+2−2i)−1/2
- i → ∞ i→∞ i→∞时, K i → 0.60725...... K_i→0.60725...... Ki→0.60725......)
- 目标角度比累加角度大,则 d i = 1 d_i=1 di=1
- 目标角度比累加角度小,则 d i = − 1 d_i=-1 di=−1