目录
一、前言
二、MAX_FANOUT
2.1 工程代码
2.2 工程结果
一、前言
在时序违例的工程中,有一个很常见的原因:高扇出,此时就需要降低信号的扇出,可通过属性MAX_FANOUT来控制信号的扇出值,当扇出大于设置值时,会进行寄存器复制来降低单个寄存器的扇出值。
二、MAX_FANOUT
MAX_FANOUT使用格式:(*MAX_FANOUT=VALUE*) reg reg_test;
该属性只能用于RTL中,不能用于XDC中,并且输入端口,black boxes,EDIF,NGC文件不支持。
2.1 工程代码
设计一个寄存器reg_driver的输出连接到30个寄存器,同时MAX_FANOUT设置为10,
module MAX_FANOUT( d,d0,clk,ce,c,rs,out );
input [29:0] d,ce;
input d0,clk,c,rs;
output [29:0] out;
(*MAX_FANOUT=10*) reg reg_driver;
// Design Name:
always@(posedge clk)
begin
if(ce)
reg_driver<=0;
else
reg_driver<=d0;
end
genvar i;
generate
for(i=0;i<30;i=i+1)
begin
FDRE FDRE_inst1 (.Q(out[i]), .C(c),.CE(ce[i]), .R(rs), .D(reg_driver) );
end
endgenerate
endmodule
2.2 工程结果
左侧的网表中reg_driver_reg_rep,reg_driver_reg_rep_0为自动复制出来的两个寄存器,右侧网表连接中可看出此时由3个寄存器来共同驱动30个寄存器