- verilog代码规范:
一个模块内的变量统一使用小写,参数统一采用大写
低电平使能采用_n后缀,时钟最好加上时钟频率_50m后缀
模块函数的一些参数使用‘parameter’,顶层模块使用参数传递方式来改变参数定义
- FPGA基础知识:
寄存器类型的变量,缺省值为X,线网类型的变量,缺省值为Z
组合逻辑-阻塞赋值 , 时序逻辑-非阻塞赋值 , 一个always模块内不推荐同时使用两种赋值方式
latch锁存器:一种对脉冲电平敏感的存储单元电路,锁存器是电平触发的存储器,由组合逻辑产生。主要危害是产生毛刺glitch,毛刺对下一级电路是有风险的,且隐蔽性强,不容易查出。设计时应尽量避免使用锁存器。
Flip-flop寄存器:寄存器是边沿触发的存储器,寄存器在时序电路中使用,由时钟触发产生。
- 静态时序分析与时序约束:
系统时钟超过50MHz,或PLL时钟频率较高,需要考虑时序约束;
时钟抖动、时钟偏差、延时等会影响Launch Clock(触发时钟)和Capture Clock(采样时钟)。最终导致Setup Time和Hold Time不满足要求,出现亚稳态和错误;
时序约束的重点 :Setup Slack(建立时间裕量)、Hold Slack(保持时间裕量)、 Fmax(最高系统频率);
简单系统时钟约束步骤: 1、配置所有时钟; 2、运行时序分析; 3、配置外部I/O约束; 4、根据不同设计,设置‘false_path’,‘multicycle_path’等; 5、检查timing report,针对性解决问题;
Altera Timing Analyzer 理论和实践官方介绍:https://www.intel.com/content/www/us/en/programmable/documentation/psq1513989797346.html