编辑: gracecats | 2019-07-11 |
16 块Block RAM, 每个 Block RAM 的容量都是
18 kB, 它属于 Spartan
3 系列的芯片. 1.2 开发流程简介 FPGA 开发流程主要包括电路设计与输入 (硬件描述语言编程 ) 、 逻辑综合、 实现、 编程与配置等主要步 骤, 每一步骤都有相应的开发工具. FPGA 的开发流程如图
1 所示[4] . 第28 卷第8期河南科学河南科学2PID 控制器的 FPGA 实现 2.1 PID 算法原理 PID 增量型控制算法: u (k ) =u (k-1 ) +kp [e (k ) -e (k-1 ) ] + ki e (k ) +kd [e (k ) -2e (k-1 ) +e (k-2 ) ] , 其中: kp 为比例增益;
Ti 为积分时间常数;
Td 为微分时间常数;
u (k ) 为控制量;
e (k ) 为偏差. 整理后得 u (k ) =u (k-1 ) +k0 e (k ) +k1 e (k-1 ) +k2 e (k-2 ) , (2 ) 其中: k0 =kp+ki+kd , k1 =-kp-2kd, k2 =kd . 式(2 ) 是本文所用的表达方式. 2.2 数字 PID 的硬件实现方法描述 2.2.1 串行实现方法 串行实现的基本思想是基于 ALAP (AS Last As Possible ) 的结构, 以速度换取资源, 只需要两个逻辑算 子: 一个乘法器和一个加法器, 通过设计有限状态机 (FSM ) 在不 同的阶段采用该乘法器与加法器进行不同的逻辑计算. 这种方 法需要的资源最少但速度也最慢. 2.2.2 并行实现方法 并行实现方法是基于ASAP (As Soon As Possible ) 的结构. 这种实现方法的基本思想是以面积换取速度, 其特点是拥有较快的运算速度, 但所需要的 资源比较多 . 一共要用
3 个减法器,
4 个加法器,
3 个乘法器 . 结构示意图如图
2 所示[5] . 2.2.3 基于并行结构改进型实现 在本文 PID 的FPGA 的设计中. 利用如图
2 所示的并行结构实现方法基 础上, 发挥并行结构延时小、 计算速度快的特点. 进一步将公式 (4 ) 分解, 得: e (k ) =r (k ) +[-y (k ) ], p0 =k0 ・ e (k ) , p1 =k1 ・ e (k-1 ) , p2 =k2 ・ e (k-2 ) ;
s1=p0 +p1 , s2=p2 +u (k-1 ) , u (k ) =s1+s2, 其中: r (k ) 为设定值;
y (k ) 为实际值;
p0, p1, p2, s1, s2 为中间变量. 尽管并行结构运算速度快, 但其结构设计复杂, 需要在设计结构上进行改进. 并行结构的改进方法如下: ①用减数二进制补码的加法代替减法, 即A-B=A+ (B 补),将负数用补码表示, 且对系数进行扩展, 即将系数 增加一个符号位,
1 代表负数,
0 代表正数. 这样可以重复利用加法器 IP, 从而降低设计难度. ②扩展加法运 算位数, 当两个相同符号的数相加时, 可能运算会溢出, 导致结果出错, 当数据结果扩展一位或多位时, 可以 防止数据出错. ③当要进行小数运算时, 由于 FPGA 只能进行正数运算, 要获得较高的精度, 必须对实数进行 整数转换. 可以通过将其扩大 N 倍, 即左移 N 位实现, 对最终的结果再右移 N 位或者直接舍弃最低 N 位数据 作为输出信号. 改进后的并行结构如图
3 所示. 改进后的并行结构需要
4 个加法器、
3 个乘法器, 比改进前相比要少用
3 个减法器, 各个运算器之间的联线也少了很多, 并且可以重复使用所设计的 IP 核, 降低了设计的难度. 2.3 PID 模块的 Verilog 编程实现 在这次的设计编程过程中直接采用运算符运算, 由ISE 综合工具对其综合时转化为 IP 核. 为了保证运算的准确性, 所有的数据采用补码的 方式运算, 并且保证所有数据都是作为有符号数参与 运算. 当遇到减法时, 将减数取反加一, 转化为补码 进行加法运算 . 而在进行加法与乘法运算时要进行 扩位操作, 以保证所得到的结果不会溢出. 而这些扩 位操作必须进行有符号的扩展, 保证符号的不变以及 图1FPGA 开发流程图 Fig.1 Development flowchart of FPGA (1 ) 图2并行结构实现示意图 Fig.2 Diagram of parallel structure 图3改进型并行结构示意图 Fig.3 Diagram of improved parallel structure (4 ) 硬件描述语言 综合 实现 编程与配置 板级验证 时序仿真 功能仿真 行为级仿真 y (k ) REG REG REG 限幅 r (k ) e (k ) e (k-1 ) e (k-2 ) K0 K1 K2 u (k-1 ) u (k ) y (k ) REG REG REG 限幅 r (k ) e (k ) e (k-1 ) e (k-2 ) K0 K1 K2 u (k-1 ) u (k ) S2 P2 P1 S1