|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
请教各位时序优化问题,是这样,我用xilinx的Spartan3 400 -5速度的FPGA进行设计,有个模块是这样的。
clk2x,为260Mhz,驱动后面设计,这个时钟下有个输入输出的查找表,这个表非常大,所以用了ROM,用block ram生成的,但是时序报告如下,现在slack为负值,还很大。
说白了,就是ROM 读取速度不满足。
输入的地址我寄存了2级,输出也寄存了2级,而ROM我的设计中也有两个周期的延迟供流水用,但是时序还是不满足,其中
RAMB16_X0Y2.DOA0 Tbcko 2.082
SLICE_X48Y18.BY net (fanout=1) 2.797
SLICE_X48Y18.CLK Tdick 0.227
(45.2% logic, 54.8% route)
这个路径延迟占得也比较多,但是输入输出端这么多级寄存,我又选择了针对speed进行优化,所以应该能够用retiming等特性,使得设计性能得以提升的。
但是,不满足,还请各位高手指教,
报告和代码附上,代码为了时序,现在改的比较乱。
Timing constraint: TS_clk_div_inst_CLK2X_BUF = PERIOD TIMEGRP "clk_div_inst_CLK2X_BUF" TS_clk130 / 2 HIGH 50%;
779 paths analyzed, 741 endpoints analyzed, 18 failing endpoints
18 timing errors detected. (18 setup errors, 0 hold errors, 0 component switching limit errors)
Minimum period is 5.107ns.
--------------------------------------------------------------------------------
Paths for end point color_conversion_inst/CLUT_R_inst/BU2/U0/blk_mem_generator/valid.cstr/ramloop[0].ram.r/s3_init.ram/douta_n_0 (SLICE_X48Y18.BY), 1 path
--------------------------------------------------------------------------------
Slack (setup path): -1.407ns (requirement - (data path - clock path skew + uncertainty))
Source: color_conversion_inst/CLUT_R_inst/BU2/U0/blk_mem_generator/valid.cstr/ramloop[0].ram.r/s3_init.ram/dpram.dp9x9.ram.A (RAM)
Destination: color_conversion_inst/CLUT_R_inst/BU2/U0/blk_mem_generator/valid.cstr/ramloop[0].ram.r/s3_init.ram/douta_n_0 (FF)
Requirement: 3.700ns
Data Path Delay: 5.106ns (Levels of Logic = 0)
Clock Path Skew: -0.001ns (0.379 - 0.380)
Source Clock: CLK2X_OUT rising at 0.000ns
Destination Clock: CLK2X_OUT rising at 3.700ns
Clock Uncertainty: 0.000ns
Maximum Data Path: color_conversion_inst/CLUT_R_inst/BU2/U0/blk_mem_generator/valid.cstr/ramloop[0].ram.r/s3_init.ram/dpram.dp9x9.ram.A to color_conversion_inst/CLUT_R_inst/BU2/U0/blk_mem_generator/valid.cstr/ramloop[0].ram.r/s3_init.ram/douta_n_0
Location Delay type Delay(ns) Physical Resource
Logical Resource(s)
------------------------------------------------- -------------------
RAMB16_X0Y2.DOA0 Tbcko 2.082 color_conversion_inst/CLUT_R_inst/BU2/U0/blk_mem_generator/valid.cstr/ramloop[0].ram.r/s3_init.ram/dpram.dp9x9.ram
color_conversion_inst/CLUT_R_inst/BU2/U0/blk_mem_generator/valid.cstr/ramloop[0].ram.r/s3_init.ram/dpram.dp9x9.ram.A
SLICE_X48Y18.BY net (fanout=1) 2.797 color_conversion_inst/CLUT_R_inst/BU2/U0/blk_mem_generator/valid.cstr/ramloop[0].ram.r/s3_init.ram/pad_dout_a<0>
SLICE_X48Y18.CLK Tdick 0.227 color_conversion_inst/r_int<1>
color_conversion_inst/CLUT_R_inst/BU2/U0/blk_mem_generator/valid.cstr/ramloop[0].ram.r/s3_init.ram/douta_n_0
------------------------------------------------- ---------------------------
Total 5.106ns (2.309ns logic, 2.797ns route)
(45.2% logic, 54.8% route)
--------------------------------------------------------------------------------
Paths for end point color_conversion_inst/CLUT_R_inst/BU2/U0/blk_mem_generator/valid.cstr/ramloop[0].ram.r/s3_init.ram/dpram.dp9x9.ram.A (RAMB16_X0Y2.ADDRA7), 1 path
--------------------------------------------------------------------------------
Slack (setup path): -0.987ns (requirement - (data path - clock path skew + uncertainty))
Source: color_conversion_inst/addr_r_4 (FF)
Destination: color_conversion_inst/CLUT_R_inst/BU2/U0/blk_mem_generator/valid.cstr/ramloop[0].ram.r/s3_init.ram/dpram.dp9x9.ram.A (RAM)
Requirement: 3.700ns
Data Path Delay: 4.686ns (Levels of Logic = 0)
Clock Path Skew: -0.001ns (0.380 - 0.381)
Source Clock: CLK2X_OUT rising at 0.000ns
Destination Clock: CLK2X_OUT rising at 3.700ns
Clock Uncertainty: 0.000ns
Maximum Data Path: color_conversion_inst/addr_r_4 to color_conversion_inst/CLUT_R_inst/BU2/U0/blk_mem_generator/valid.cstr/ramloop[0].ram.r/s3_init.ram/dpram.dp9x9.ram.A
Location Delay type Delay(ns) Physical Resource
Logical Resource(s)
------------------------------------------------- -------------------
SLICE_X43Y16.YQ Tcko 0.626 color_conversion_inst/addr_r<5>
color_conversion_inst/addr_r_4
RAMB16_X0Y2.ADDRA7 net (fanout=2) 3.756 color_conversion_inst/addr_r<4>
RAMB16_X0Y2.CLKA Tback 0.304 color_conversion_inst/CLUT_R_inst/BU2/U0/blk_mem_generator/valid.cstr/ramloop[0].ram.r/s3_init.ram/dpram.dp9x9.ram
color_conversion_inst/CLUT_R_inst/BU2/U0/blk_mem_generator/valid.cstr/ramloop[0].ram.r/s3_init.ram/dpram.dp9x9.ram.A
------------------------------------------------- ---------------------------
Total 4.686ns (0.930ns logic, 3.756ns route)
(19.8% logic, 80.2% route)
// input registering
always@(posedge clk or negedge rst_n)
if (!rst_n) begin
r1 <= 0;
g1 <= 0;
b1 <= 0;
hsync <=1'b0;
vsync <=1'b0;
de <=1'b0;
end
else begin
r1 <= iR;
g1 <= iG;
b1 <= iB;
hsync <= iHSYNC;
vsync <= iVSYNC;
de <= iDE;
end
reg [PIX_WIDTH +4 -1 : 0 ] addr_r;
reg [PIX_WIDTH +4 -1 : 0 ] addr_g;
reg [PIX_WIDTH +4 -1 : 0 ] addr_b;
always@(posedge clk or negedge rst_n)
if (!rst_n) begin
r2 <= 0;
g2 <= 0;
b2 <= 0;
addr_r <= 0;
addr_g <= 0;
addr_b <= 0;
hsync_1d <=1'b0;
vsync_1d <=1'b0;
de_1d <=1'b0;
hsync_2d <=1'b0;
vsync_2d <=1'b0;
de_2d <=1'b0;
hsync_3d <=1'b0;
vsync_3d <=1'b0;
de_3d <=1'b0;
hsync_4d <=1'b0;
vsync_4d <=1'b0;
de_4d <=1'b0;
hsync_5d <=1'b0;
vsync_5d <=1'b0;
de_5d <=1'b0;
end
else begin
r2 <= r1 ;
g2 <= g1 ;
b2 <= b1 ;
addr_r <= {item,r2} ;
addr_g <= {item,g2} ;
addr_b <= {item,b2} ;
hsync_1d <= hsync ;
vsync_1d <= vsync ;
de_1d <= de ;
hsync_2d <= hsync_1d ;
vsync_2d <= vsync_1d ;
de_2d <= de_1d ;
hsync_3d <= hsync_2d ;
vsync_3d <= vsync_2d ;
de_3d <= de_2d ;
hsync_4d <= hsync_3d ;
vsync_4d <= vsync_3d ;
de_4d <= de_3d ;
hsync_5d <= hsync_4d ;
vsync_5d <= vsync_4d ;
de_5d <= de_4d ;
end
// instance of the LUT
wire [PIX_WIDTH-1 : 0 ]r_int;
wire [PIX_WIDTH-1 : 0 ]g_int;
wire [PIX_WIDTH-1 : 0 ]b_int;
// 2 clks latency
CLUT_R CLUT_R_inst (
.addra ( addr_r),
.clka ( clk ),
.douta ( r_int )
);
CLUT_G CLUT_G_inst (
.addra ( addr_g),
.clka ( clk ),
.douta ( g_int )
);
CLUT_B CLUT_B_inst (
.addra ( addr_b),
.clka ( clk ),
.douta ( b_int )
);
reg [PIX_WIDTH-1:0] oRr,oGr,oBr;
// y_counter_dl2: check boundaries
always@(posedge clk or negedge rst_n)
if (!rst_n) begin
oRr <= {PIX_WIDTH{1'b0}};
oGr <= {PIX_WIDTH{1'b0}};
oBr <= {PIX_WIDTH{1'b0}};
oRed <= {PIX_WIDTH{1'b0}};
oGrn <= {PIX_WIDTH{1'b0}};
oBlu <= {PIX_WIDTH{1'b0}};
oHSYNC <= 1'b0;
oVSYNC <= 1'b0;
oDE <= 1'b0;
end
else begin
oRr <= r_int ;
oGr <= g_int ;
oBr <= b_int ;
oRed <= oRr ;
oGrn <= oGr ;
oBlu <= oBr ;
oHSYNC <= hsync_5d;
oVSYNC <= vsync_5d;
oDE <= de_5d ;
end |
|