一、设计约束
1、物理约束
2、时序约束
二、时序约束的知识点
1、时序约束路径
2、vivado时序约束
一、设计约束
在FPGA项目开发流程中,整体过程包括:设计输入→设计综合→约束输入→设计实现→分析实现结果→板级调试,其中穿插着设计仿真和设计优化过程。设计仿真就是通过测试激励,尽可能地把bug在仿真中验证。设计优化伴随这个过程,代码修改,约束优化,甚至编译器的小技巧使用。
设计约束,从图中可以看出,综合后为了实现板级调试所需要达到的设计要求,也就是保证功能在单板上能稳定运行,在这个系统中FPGA的功能实现满足设计要求。通常上,两部分约束工作开发,一是物理约束;二是时序约束。
1、物理约束
物理约束,包括I/O接口约束,布局约束,布线约束和配置约束等。 I/O接口约束,引脚分配,电平标准约束,上拉下拉约束等。一个小技巧,如果管脚太多,电平约束一致可采用[*]来实现。
布局布线约束,这点很少用,举一个以前用过的示例吧,将位置锁定这种方式,个人见解可以理解为布局布线类约束,往极限来说,如果你讲所有底层位置约束确定,那是不是布局布线也就确定了,当然这种方式属于夸张说法了。巧妙利用carry进位链的位置约束可以实现TDC的测量。
配置约束,bit的压缩模式配置,SPI的模式配置,看门狗配置,自动采样配置等等。
2、时序约束
时序约束,FPGA内部的逻辑或者走线的延迟。开发中大部分逻辑功能以时序逻辑来实现,通过时钟的边沿触发,比如下述代码就是通过i_ddr4_user_clk的上升沿触发。时钟频率的高低其实能在一定程度上反映了FPGA开发者的水平,也就是FPGA能处理的指标。
二、时序约束的知识点
1、时序约束路径
FPGA时序约束路径,包括:
①FPGA内部寄存器之间的时序路径,reg2reg;
②输入引脚到FPGA内部寄存器之间的时序路径,pin2reg;
③FPGA内部寄存器到输出引脚之间的时序路径,reg2pin;
④输入引脚到输出引脚之间的时序路径,pin2pin。
上述中①②③都是由FPGA时钟边沿触发,保证建立时间和保持时间满足要求即可。④直接约束输入管脚到输出管脚的延时值范围即可。
2、vivado时序约束
vivado工具中,两种时序约束的方式,一种是通过界面GUI约束后保存至xdc文件;另一种是直接通过编辑xdc文件进行约束。个人倾向于后者,一个小技巧,对一些不熟悉的约束,可以采用GUI产生需要的约束语句,复制粘贴到xdc文件中。
一些常用的xdc约束语句,包括时钟约束(周期等)、输入输出约束、时钟分钟约束、跨时钟约束、时序例外约束等。后续系列文章会展开来逐个学习。