前言
FPGA设计过程中, 会遇到大量的串行转并行或者并行转串行的问题;
这些问题主要体现在FPGA对于速度和面积的均衡上;
一般而言, FPGA使用并行的设计可以提高处理的速度, 消耗更多的资源;
FPGA使用串行设计, 可以节约资源, 处理速度有所下降;
而在实际的使用过程中, 串行的设计往往贯穿于整个项目, 用于控制整个工程的执行逻辑;
并行的设计往往体现在局部需要加速的部分;
内容
串行设计
串行设计的方法比较多, 常见的有状态机/流水线/乒乓操作等, 其主要的作用是控制数据在不同阶段的处理;
用状态机可以将设计流程图直接转化为具体的代码, 实现对应的操作;
配合条件控制和状态驱动, 状态机可以将整个模块大部分的功能整合到一个整体,从而实现代码效率及可读性的跨越;
流水线操作的流程是串行的,处理的数据却是同步进行的; 通过控制每个模块的刷新节奏, 实现数据的逐级独立处理;
乒乓操作针对的主要是串行设计中数据从高速到低速或者从一个不稳定速度到稳定速度的操作, 基本思路是用类似的逻辑实现操作时序的缓冲;
并行设计
并行设计一般体现为一个模块的多次调用,构成一个重复模块的并行处理同一个数据的特性;
当然也可以是不同的模块处理同一个数据, 主要的特点在于一份数据被多个模块同时调用;
并行设计的前提是数据操作可以被分别执行且消耗的资源可以接受;
简单的例子是求A的4次方,在资源充足的条件下, 可以由两个乘法器并行执行后在将结果并行执行;
如果乘法器的性能足够好的话, 也可以直接用四个乘法器在一个周期内完成计算;
更加复杂的并行则是使用参数化的模块, 通过修改少量的参数并行执行不同的任务, 从而实现数据的大幅提升;
并行设计是模块化设计提高效率的基本原理;
总结
早期FPGA设计训练一般以串行设计为主, 但是在串行设计熟练后, 应该穿插并行设计, 以实现更高性能的设计;