Vivado综合工具支持直接在RTL文件或XDC文件中设置综合属性。如果Vivado识别出设置的属性,会创建与之相关的逻辑电路;如果不能识别设置的属性,会将该属性和值存放在生成的网表中。因为某些属性,比如LOC约束适用于布线过程,因此必须保留该属性配置情况。
本文将介绍Vivado综合工具支持的所有属性设置,并给出Verilog示例。
1.ASYNC_REG
该属性将reg类型配置为可以在D输入管脚接受异步数据的寄存器,或者带同步链的同步寄存器。该属性默认为FALSE,可设置为TRUE。可在RTL或XDC中设置。示例如下:
(* ASYNC_REG = “TRUE”) reg [2:0] sync_regs; //Verilog示例
2.BLACK_BOX
当设置了该属性时,Vivado综合工具会为该模块创建一个黑盒子,模块内部的所有层次结构对外都不可见,该功能多用于调试过程。该属性可以设置在module、entity或component上,只能在RTL中设置。示例如下:
(* black_box *) module test(in1, in2, clk, out); //Verilog示例,不需要设置值
3.CASCADE_HEIGHT
该属性只适用于UltraScale架构的FPGA,用于设置将块RAM级联为大型RAM的最大长度。通常工具会根据创建的RAM选择如何级联块RAM,该属性可以用于缩短级联链的长度。需要在RTL中设置,值为0或1时表示禁止任何块RAM的级联。示例如下:
(* cascade_height *) reg [31:0] ram [(2**15)-1:0]; //Verilog示例
4.CLOCK_BUFFER_TYPE
该属性应用于顶层模块的输入时钟端口上,设置使用哪种时钟缓冲器。默认使用BUFG,可以设置为BUFG、BUFH、BUFIO、BUFMR、BUFR或none。该设置只能在RTL设计中,示例如下:
(* clock_buffer_type = “none” *) input clk1; //Verilog示例
5.DIRECT_ENABLE
如果希望一个输入或信号直接作为触发器的使能信号(连接到flop的使能线上),可以使用该属性。可以在RTL或XDC中设置,示例如下:
(* direct_enable = “yes” *) input ena1; //Verilog示例
set_property direct_enable yes [get_nets -of [get_ports ena1]] #XDC示例
6.DIRECT_RESET
如果希望一个输入或信号直接作为触发器的复位信号(连接到flop的复位线上),可以使用该属性。可以在RTL或XDC中设置,示例与上一属性类似。注意在XDC中,这两个属性只对网络(net)类型有效,必须使用get_nets命令来获取网络对象。
7.DONT_TOUCH
该属性与KEEP和KEEP_HIERARCHY属性作用相同,区别在于DONT_TOUCH 在布局布线过程中仍会保持作用。当其他属性与DONT_TOUCH属性发生冲突时,DONT_TOUCH属性有更高的优先级。该属性可用于配置任意信号、module、entity或component。该属性仅可用于RTL中,示例如下:
(* DONT_TOUCH = “yes” *) wire sig1; //wire示例
assign sig1 = in1 & in2;
assign out = sig1 & in2; //sig1不会被优化掉
(* DONT_TOUCH = “yes” *) module test (clk… //该层次与接口不会被优化掉
8.EXTRACT_ENABLE
设置综合工具对使能信号的管理方式。默认情况下,Vivado会根据设计自动选择是否使用寄存器的使能管脚。当默认表现没有按设计意图进行时,可以使用该属性。比如设计中一个信号没有被视作使能信号,使用该属性可以强制将信号接入到触发器的C