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会根据设计自动选择是否使用寄存器的使能管脚。当默认表现没有按设计意图进行时,可以使用该属性。比如设计中一个信号没有被视作使能信号,使用该属性可以强制将信号接入到触发器的CE管脚。该属性仅可用于RTL中,示例如下: (* extract_enable = “yes” *) reg my_reg; //Verilog示例
另外还有EXTRACT_RESET属性用来设置对复位信号的管理方式,作用与使用方法与EXTRACT_ENABLE相同。 9.FSM_ENCODING该属性用于设置状态机寄存器,控制状态机的编码方式,可选参数有独热码(one_hot)、顺序编码(sequential)、johnson编码(johnson)、格雷码(gray)、自动(auto)和无(none)。默认为auto,Vivado会自动选择最佳的编码方式。可以在RTL或XDC中设置,示例如下: (* fsm_encoding = “one_hot” *) reg [7:0] my_state; //Verilog示例
10.FSM_SAFE_STATE该属性指示Vivado综合向状态机中插入逻辑来检测是否存在非法状态,如果存在则将其修复为正常状态并放在下一个时钟周期。比如对于独热码,0101状态就是一个非法状态。可设置的值有: - auto:使用Hamming-3编码进行单bit级自动纠正;
- reset_state:使用Hamming-2编码进行单bit级检测,强制状态机进入复位状态;
- power_on_state:使用Hamming-2编码进行单bit级检测,强制状态机进入上电状态;
- default_state:使用Hamming-2编码进行单bit级检测,强制状态机进入default状态。Default状态即为case语句中设定的状态。
该属性用于设置状态机寄存器,可以在RTL或XDC中设置,示例如下: (* fsm_safe_state = “reset_state” *) reg [7:0] my_state; //Verilog示例
11.FULL_CASE该属性仅用于Verilog中,可以自动设定case、casex、casez语句中所有未创建的值。该属性只能在RTL中设置,示例如下: (* full_case *) case select 3’b100 : sig = val1; 3’b010 : sig = val2; 3’b001 : sig = val3;endcase
12.GATED_CLOCK该属性用于控制门控时钟的转换,与综合设置中的-gated_clock_conversion配合使用,设置为off禁止门控时钟转换;设置为on遇到RTL代码中的GATED_CLOCK设置会进行门控时钟转换;设置为auto工具会自动判断。示例如下: (* gated_clock = “true” *) input clk; //Verilog示例,申明clk为门控时钟
13.IOBIOB不是一个综合属性,它用于实现过程中。该属性指示一个寄存器是否接入到I/O缓存器。可以在RTL或XDC中设置,示例如下: (* IOB = “true” *) reg sig1; //sig1将接到I/O buffer
14.IO_BUFFER_TYPE该属性用于任何顶层模块的端口,指示工具如何使用缓冲器。Vivado综合默认会自动推断使用输入缓冲器或输出缓冲器,IO_BUFFER_TYPE设置为none会禁用自动推断。可以在RTL或XDC中设置,示例如下: (* IO_BUFFER_TYPE = “none” *) input in1; //Verilog示例
15.KEEP使用该属性阻止对信号的优化。综合时带有该属性的信号会保留在网表中,不会被优化掉或者纳入其它逻辑块中。如下面的例子,假设信号A是一个两位与门,该信号又送入另一个与门,默认情况下Vivado会把两个与门合共为一个LUT来实现相应功能,但设置KEEP属性即可保留下信号A。 但是KEEP不能用于模块的端口上,相应功能应该通过将-flatten_hierarchy设置为none或为模块设置DONT_TOUCH属性来实现。假设为信号B设置了KEEP,但是该信号在后面的RTL设计中并没有使用,综合会保留信号B(尽管它没有任何驱动),但是在后面的流程中还是会引发问题。另外,当KEEP属性和其它属性冲突时,KEEP有更高的优先级。 任何信号、reg、wire都可设置KEEP属性,只能在RTL中设置,示例如下: (* keep = “true” *) wire sig1; //wire示例assign sig1 = in1 & in2;assign out = sig1 & in2; //sig1不会被优化掉
16.KEEP_HIERARCHYVivado综合工具可以展开层级结构进行优化,为模块设置KEEP_HIERARCHY属性,可以保留该模块在RTL中的输入输出端口,即保留一个完整的边界。只能在RTL中设置,示例如下: (* keep_hierarchy = “yes” *) module bottom (in1… //模块示例 (* keep_hierarchy = “yes” *)bottom u0 (.in1(in1), … //实例化示例
17.MARK_DEBUG该属性可将任何网络对象(net)设置为debug状态,以便在Vivado硬件管理器中调试,同时还会阻止对该信号的优化。可以在RTL或XDC中设置,示例如下: (* MARK_DEBUG = “TRUE” *) wire debug_wire; //Verilog示例set_property MARK_DEBUG TRUE [get_nets debug_wire] #XDC示例
18.MAX_FANOUT设置寄存器和组合逻辑信号的最大扇出限制(即最大驱动数量)。超出该设置时,会复制一个完全相同的寄存器或组合逻辑。综合设置中的-fanout_limit是对工程整体的设置(详情见第22篇),对某一信号或寄存器单独设置MAX_FANOUT属性会忽视-fanout_limit的限制。 另一点区别是-fanout_limit不会对控制信号产生作用,如置位信号set、复位信号reset、时钟使能信号clock enable,但可以用MAX_FANOUT对这些信号的扇出进行限制。可以在RTL或XDC中设置,示例如下: (* max_fanout = 50 *) reg sig1; //Verilog示例
19.PARALLEL_CASE该属性仅用于Verilog中,可以将case语句强制用并行结构来实现,而不会被优化为if -elsif的结构。该属性只能在RTL中设置,示例如下: (* parallel_case *) case select 3’b100 : sig = val1; 3’b010 : sig = val2; 3’b001 : sig = val3;endcase
20.RAM_DECOMP该属性用于指示综合工具如何用块RAM来实现一个较大的RAM。比如需要一个2K*36的RAM,通常会用两个2K18的BRAM组合实现(为了提高设计速度)。如果将该属性设置为power,则会用两个1K36的BRAM来组合实现,这样在读写过程中,使用地址使只需要一个BRAM处于活跃状态,因此可以降低功耗。 该属性只有一个可配置值即power,虽然可以降低功耗,但是会增加地址解码的时间。可以在RTL或XDC中设置,示例如下: (* ram_decomp = “power” *) reg [size-1:0] myram [2**addr-1:0]; //Verilog示例set_property ram_decomp power [get_cells myram] #XDC示例
21.RAM_STYLE指示综合工具如何实现一个RAM存储器,可设置为block(使用BRAM即块RAM来实现)、distributed(使用LUT搭建分布式RAM)、registers(使用寄存器组来替代RAM)或ultra(使用UltraScale中的URAM)。 默认情况下工具会为了得到最好的设计效果而自动选择。如果该属性在定义RAM的信号处申明,则仅作用于该信号;如果在某一层次结构处申明,将作用于该层次中的所有RAM(但不会影响到该层次的子层次)。可以在RTL或XDC中设置,示例如下:: (* ram_style = “distributed” *) reg [size-1:0] myram [2**addr-1:0]; //Verilog示例
22.ROM_STYLE指示综合工具如何实现一个ROM存储器,可设置为block(使用BRAM即块RAM来实现)或distributed(使用LUT搭建分布式ROM),默认情况下工具会为了得到最好的设计效果而自动选择。可以在RTL或XDC中设置,示例如下: (* rom_style = “distributed” *) reg [size-1:0] rom [2**addr-1:0]; //Verilog示例
23.SHREG_EXTRACT指示综合工具是否推断SRL结构(一种移位寄存器的实现结构)。设置为NO时不会推断SRL,设计中的移位寄存器会用寄存器组的形式实现。可以在RTL或XDC中设置,示例如下: (* SHREG_EXTRACT = “no” *) reg [16:0] my_srl; //Verilog示例
24.SRL_STYLE指示寄存器如何推断设计中的SRL(仅支持静态移位寄存器),可设置的值有: - register:仅使用寄存器资源实现移位寄存器;
- srl:使用SRL结构实现移位寄存器;
- srl_reg:SRL尾部保留一个寄存器;
- reg_srl:SRL头部保留一个寄存器;
- reg_srl_reg:SRL的首尾各保留一个寄存器;
- block:使用块RAM实现移位寄存器。
注意当SRL_STYLE和SHREG_EXTRACT同时使用时,后者优先级更高。该属性仅可用于RTL设置,示例如下: (* SRL_STYLE = “register” *) reg [16:0] my_srl; //Verilog示例
25.TRANSLATE_ON/OFF这两个属性用于指示综合工具忽略一段代码。该属性通过放在注释行中来实现,且注释必须以synthesis、synopsys、pragma中的一个关键词为开头。但注意:如果需要忽视的代码块会影响到设计功能表现,仿真器会试图调用这段代码,因此会出现“mismatch”的情况。该属性只能在RTL中设置,Verilog示例如下: // synthesis translate_offCode…// synthesis translate on
26.USE_DSP老版本中为USE_DSP48,后来FPGA中增加了其它大小的新DSP块,更改为USE_DSP。虽然USE_DSP48仍然有效,但推荐使用USE_DSP命令。 该属性用于指示综合工具如何处理算术结构,默认情况下乘法器、乘加、乘减、乘累加类型的结构都会用DSP单元实现。虽然加法器、减法器、累加器也可以用DSP单元实现,但默认会使用逻辑单元实现,可以使用该属性将其设置为在DSP单元中实现。 参数值可选择logic(专门指示异或结构用DSP单元来实现)、yes或no(指示是否将逻辑用DSP单元实现),前者必须在module/architecture处申明,后者可以在信号、architecture、component、entity、module处申明。示例如下: (* use_dsp = “yes” *) module test(in1, in2, clk. out); //Verilog示例
|