第七章 让你的FPGA设计更可靠
时序收敛的艺术
什么是时序收敛
- 设计中的所有时序路径都满足时序要求
 - 包括建立时间和保持时间的要求
 
基本时序约束
1  |  | 
常见时序问题解决方法
- 减少组合逻辑层数
 - 使用流水线技术
 - 合理布局关键路径
 
跨时钟域处理技巧
为什么要关注跨时钟域
- 防止亚稳态
 - 确保数据正确传输
 - 避免功能错误
 
基本的跨时钟域处理方法
- 双触发器同步
    
1
2
3
4
5
6// 双触发器同步器 reg sync_ff1, sync_ff2; always @(posedge clk_dest) begin sync_ff1 <= data_src; sync_ff2 <= sync_ff1; end - 异步FIFO
    
1
2
3
4
5
6
7
8// 异步FIFO的基本结构 module async_fifo ( input wr_clk, input rd_clk, input [7:0] data_in, output [7:0] data_out // ... 其他端口 ); 
复位设计的注意事项
复位类型选择
- 同步复位:时序可控,但占用资源多
 - 异步复位:资源少,但需要特别注意去除毛刺
 
复位使用建议
- 统一使用一种复位方式
 - 关键模块考虑使用同步复位
 - 复位信号要经过去抖动处理
 
1  |  | 
常见设计陷阱与解决方案
锁存器的避免
- 在组合逻辑中确保所有条件都被覆盖
 - 使用默认赋值避免锁存器
 
1  |  | 
时钟选择器的使用
- 避免用组合逻辑生成时钟
 - 使用BUFGMUX等专用时钟切换资源
 
关键信号的处理
- 重要控制信号要考虑冗余
 - 状态机要考虑异常状态处理
 - 关键数据路径要加校验
 
小结
可靠的FPGA设计需要注意很多细节,本章介绍的这些要点都是实际工作中经常遇到的。建议初学者在开始设计时就养成良好的习惯,这样能避免很多不必要的问题。