FPGA(现场可编程门阵列)是一种可以通过编程来配置的半导体器件,其内部集成了大量可编程逻辑单元、存储器和输入输出接口。FPGA因其灵活性和高速性能,在通信、计算、存储和嵌入式系统等领域得到了广泛应用。时序优化是FPGA逻辑设计中的重要环节,因为随着FPGA器件规模的增大,逻辑设计工程师在FPGA上实现的电路功能越来越复杂,工作频率也越来越高,因此时序优化问题成为电路设计的一大挑战。
在通信系统中,为了确保数据传输的正确性,经常采用循环冗余校验(CRC,Cyclic Redundancy Check)方法。CRC校验是一种根据数据内容计算出短固定位数校验值的校验码,它通过将数据除以特定的生成多项式,得到余数作为校验码,并在传输过程中附加于数据后,接收方使用相同的生成多项式对数据进行校验,以检测数据在传输过程中是否出现错误。
并行CRC校验比传统的串行CRC校验具有更高的速度,尤其适合于高速数据传输环境。在FPGA实现并行CRC校验时,电路的逻辑规模非常巨大,很容易成为系统时序的关键路径。由于并行CRC校验通常需要处理大量数据位,因此在FPGA中实现并行CRC校验需要考虑如何优化设计以满足时序要求。
本文介绍了一种在FPGA中实现高速并行CRC计算电路的方法。以32位并行CRC-16(CRC16D32)为例,详细说明了如何通过优化电路结构和综合约束来提高CRC校验电路的工作频率,使其能够满足高速数据传输的要求。
具体实现时,本文采用了Altera公司生产的StratixIV系列FPGA芯片。由于逻辑资源占用率非常高,最初的设计在软件优化后最高时钟频率仅达到目标值的73%。分析后发现关键路径位于CRC16D32模块中,该模块的实现中每级CRC16被综合成了四级LUT级联的结构,形成了八级LUT电路,成为关键路径。为了解决这一问题,作者采用了直接进行异或计算的方法来实现CRC计算电路。
在Stratix5系列FPGA器件中,每级LUT最多支持6个逻辑输入,由于异或运算符合分配律和交换律,且任意变量与0电平异或结果等于该变量本身,因此使用两级LUT就能实现36输入的XOR运算。本文介绍的CRC16D32中的最大计算项的输入逻辑个数没有超过36个,理论上可以通过两级LUT实现。
为了确保综合工具综合出符合上述思路的电路,本文总结了以下步骤:
1. 计算CRC16D32的每个输出CRC_OUT[i](0<=i<16)的逻辑函数:crc_out[i]=f(crc_in, data)。
2. 使用底层LUT搭建实现CRC_out的每个bit的计算电路。
3. 使用真值表查表的形式描述最底层的输入异或逻辑,确保综合工具不会对设计的电路进行任何“优化”。
4. 添加底层综合约束:对输出信号添加约束,限制综合将CRC_OUT信号直接反馈到输入端;在各级LUT之间添加约束,以保持电路结构的完整性。
通过这些步骤,本文所提出的并行CRC校验电路设计方法能够有效地简化电路结构,减少关键路径的数量,从而达到提高时钟频率,优化时序的目的。这样的设计方法对于FPGA上实现高速数据处理电路具有重要的参考价值。