在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2852|回复: 0

[求助] 求解时序问题

[复制链接]
发表于 2010-11-13 19:12:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-30 19:07 , Processed in 0.014375 second(s), 11 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表