1、保持约束
keep:当编译器在对FPGA设计进行映射时,一些线网将会被吸收到逻辑块中。
(* KEEP = "{TRUE | FALSE}" *)
keep_hierarchy:vivado默认会把设计变成一级一级模块化的调用转换为一个没有子模块的超大模块。这个约束会保留部分层级关系。
(* KEEP_HIERARCHY = " { TRUE | FALSE | SOFT } " *)
TRUE:保留层级关系并保留到实现(可以实现三模冗余)
FALSE:不保留层级关系
SOFT:保留层级关系不保留到后续
2、乘法器相关约束
use_dsp48:
(* use_dsp48 = " { auto | yes | no } " *)
mult_style:
3、存储器相关约束
ram_extract:检测code中是否有RAM等效功能并转换为RAM
(* ram_extract = " { yes | no } " *)
ram_style :
(* ram_style = " { auto | block | distributed | pipe_distributed } " *)
distributed:lut实现
pipe_distributed:消耗大量寄存器
rom_extract:检测code中是否有RAM等效功能并转换为RAM
(* rom_extract = " { yes | no } " *)
rom_style :
(* rom_style = " { auto | block | distributed | pipe_distributed } " *)
4、寄存器相关约束
IOB:
(* IOB = " { TRUE | FALSE | AUTO } " *)
5、状态机相关约束
fsm_extract:他会决定状态机的存在
(* fsm_extract = " { yes | no } " *)
fsm_style:决定是基于 LUT 还是 BRAM 实现有限状态机
(* fsm_style = " { lut | bram } " *)
fsm_encoding:决定状态机的编码方式
(* fsm_encoding = " { auto | one-hot | compact | sequential | gray | johnsin | speed1 | user } " *)
safe_implementation:编译器是否采用安全模式来实现状态机
(* safe_implementation = " { yes | no } " *)
safe_recovery_state :非法时默认状态名
(* safe_recovery_state = " <value> " *)