planAhead 中的时序违规怎么处理?

[复制链接]
3414|10
 楼主| magic323 发表于 2012-9-24 23:12 | 显示全部楼层 |阅读模式
如题,在ISE中,布局布线后的静态时序分析没有出错,但是在planAhead中执行RUN timeAhead却出现了好多错误,slack全是负的。这种情况写,需要处理吗还是忽略不计?谢谢大家!
wmsk 发表于 2012-9-24 23:24 | 显示全部楼层
应该是有问题的。
wmsk 发表于 2012-9-24 23:24 | 显示全部楼层
但是功能有时候能对。
GoldSunMonkey 发表于 2012-9-24 23:26 | 显示全部楼层
查时许吧。或者板级验证,不一定板卡上就错,但是可能有隐患。
Backkom80 发表于 2012-9-25 08:21 | 显示全部楼层
截个图看看呢
 楼主| magic323 发表于 2012-9-25 09:23 | 显示全部楼层
5# Backkom80
呶,附件是截图。第一张是ISE中的Analyze Post-Place & Route Static Timing报告,没有错误。第二张是在PlanAhead中点击RunTimeAhead,然后不做任何修改点击OK。第三张就是点击OK后在Timing Results状态栏中产生的时序结果,就截了几个,后来我尝试着显示更多的结果,发现竟然有1000多个Slack为负的。心哇凉哇凉的。

本帖子中包含更多资源

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

×
Backkom80 发表于 2012-9-25 09:41 | 显示全部楼层
你这logic delay很大啊?
做了什么大的逻辑?
 楼主| magic323 发表于 2012-9-25 09:50 | 显示全部楼层
7# Backkom80
计数器啊,我看了下好多delay都是出在计数器上,你有QQ吗?帮我看看啊,现在问题很棘手啊,不知怎么解决。我的是45380781
 楼主| magic323 发表于 2012-9-25 10:04 | 显示全部楼层
7# Backkom80
以这个为例,是Vsync_pos_cnt到Vsync_edge_tmp的delay,代码如下:
always @(posedge iClk_flag)
if((~reset_mode1) || dvi_break_notice1)
  begin
   iVsync_delay1 <= 1'b1;
   iVsync_delay2 <= 1'b1;
   iVsync_delay3 <= 1'b1;
   iVsync_delay4 <= 1'b1;
  end
else
  begin
   iVsync_delay1 <= iTFP403_VSYNC;
   iVsync_delay2 <= iVsync_delay1;
   iVsync_delay3 <= iVsync_delay2;
   iVsync_delay4 <= iVsync_delay3;
  end
  
assign iVsync_posedge = (~iVsync_delay4) && iVsync_delay3;
assign iVsync_negedge = iVsync_delay4 && (~iVsync_delay3);
always @(posedge iClk_flag)
if((~reset_mode1) || dvi_break_notice1)
  Vsync_edge_state <= 4'b0000;
else
  case(Vsync_edge_state)
    4'b0000 : begin
        if(iVsync_posedge)
         Vsync_edge_state <= 4'b0001;
        else
         Vsync_edge_state <= 4'b0000;
        end
    4'b0001 : begin
        if(iVsync_negedge)
         Vsync_edge_state <= 4'b0010;
        else
         Vsync_edge_state <= 4'b0001;
        end
    4'b0010 : begin
        if(iVsync_posedge)
         Vsync_edge_state <= 4'b0100;
        else
         Vsync_edge_state <= 4'b0010;
        end
    4'b0100 : begin
        if(iVsync_negedge)
         Vsync_edge_state <= 4'b0000;
        else
         Vsync_edge_state <= 4'b0100;
        end
   default  : begin
        Vsync_edge_state <= 4'b0000;
        end
  endcase
always @(posedge iClk_flag)
if((~reset_mode1) || dvi_break_notice1)
  begin
   Vsync_pos_cnt <= 32'd0;
  end
else
  if(Vsync_edge_state == 4'b0001)
   Vsync_pos_cnt <= Vsync_pos_cnt + 1;
  else if(Vsync_edge_state == 4'b0010)
   Vsync_pos_cnt <= Vsync_pos_cnt;
  else
   Vsync_pos_cnt <= 32'd0;
   
always @(posedge iClk_flag)
if((~reset_mode1) || dvi_break_notice1)
  begin
   Vsync_neg_cnt <= 32'd0;
  end
else
  if(Vsync_edge_state == 4'b0010)
   Vsync_neg_cnt <= Vsync_neg_cnt + 1;
  else
   Vsync_neg_cnt <= 32'd0;
   
reg Vsync_edge_tmp;
  
always @(posedge iClk_flag)
if((~reset_mode1) || dvi_break_notice1)
  Vsync_edge_tmp <= 1'b0;
else
  if((Vsync_edge_state == 4'b0010) && iVsync_posedge)
   if(Vsync_neg_cnt > Vsync_pos_cnt)
    Vsync_edge_tmp <= 1'b1;
   else
    Vsync_edge_tmp <= 1'b0;
  else
   Vsync_edge_tmp <= Vsync_edge_tmp;


从报告中我知道是0到31阶的进位链造成了这么大的delay,但是采用何种措施来降低这些delay,没有思路。请大家指教!

本帖子中包含更多资源

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

×
gaochy1126 发表于 2012-9-26 07:54 | 显示全部楼层
现在板子上跑跑看看,是不是容易跑飞什么的?
 楼主| magic323 发表于 2012-9-26 12:49 | 显示全部楼层
暂时还没有发现跑飞了什么东西,但是这么大的延迟让人很纠结啊!有什么方法可以解决这个问题吗?计数器位宽太大导致建立时间不满足的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

22

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部