在HDU的上课笔记——FPGA应用与实践

教材是机械工业出版社那本绿绿的《高级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=Tclkq+Tlogic+Trouting+TsetupTakew1

  1. ​ 添加寄存器层次——添加中间的寄存器层次到关键路径,把关键路径分成两个延时更小的路径;
  2. ​ 并行结构——把一个逻辑功能拆分成多个可以并行估值的更小的功能,较少路径延时;
  3. ​ 展平逻辑结构(应用于特权编码)——去除不需要的特权编码,展平逻辑结构,减少路径延时;
  4. ​ 寄存器平衡——平衡各级流水线之间的逻辑,缩短关键路径(因为时钟速度由最坏条件路径决定);
  5. ​ 重新安排路径——在数据流中重新安排路径使关键路径最小化;

第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=VCf

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[i4]W[i1]

    • i是4的倍数

      W [ i ] = W [ i − 4 ] ⊕ T ( W [ i − 1 ] ) W[i] = W[i-4] ⊕ T(W[i-1]) W[i]=W[i4]T(W[i1])

    • 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 N1 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[Xiyidi2i]
      • 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+xidi2i]
      • K i = ( 1 + 2 − 2 i ) − 1 / 2 Ki=(1+2^{-2i})^{-1/2} Ki=(1+22i)1/2
        • i → ∞ i→∞ i时, K i → 0.60725...... K_i→0.60725...... Ki0.60725......)
        • 目标角度比累加角度大,则 d i = 1 d_i=1 di=1
        • 目标角度比累加角度小,则 d i = − 1 d_i=-1 di=1
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值