打印

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

[复制链接]
2308|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
wmsk| | 2012-9-24 23:24 | 只看该作者
应该是有问题的。

使用特权

评论回复
板凳
wmsk| | 2012-9-24 23:24 | 只看该作者
但是功能有时候能对。

使用特权

评论回复
地板
GoldSunMonkey| | 2012-9-24 23:26 | 只看该作者
查时许吧。或者板级验证,不一定板卡上就错,但是可能有隐患。

使用特权

评论回复
5
Backkom80| | 2012-9-25 08:21 | 只看该作者
截个图看看呢

使用特权

评论回复
6
magic323|  楼主 | 2012-9-25 09:23 | 只看该作者
5# Backkom80
呶,附件是截图。第一张是ISE中的Analyze Post-Place & Route Static Timing报告,没有错误。第二张是在PlanAhead中点击RunTimeAhead,然后不做任何修改点击OK。第三张就是点击OK后在Timing Results状态栏中产生的时序结果,就截了几个,后来我尝试着显示更多的结果,发现竟然有1000多个Slack为负的。心哇凉哇凉的。

QQ截图20120925091455.png (8.13 KB )

QQ截图20120925091455.png

QQ截图20120925091716.png (21.1 KB )

QQ截图20120925091716.png

QQ截图20120925091757.png (16.97 KB )

QQ截图20120925091757.png

使用特权

评论回复
7
Backkom80| | 2012-9-25 09:41 | 只看该作者
你这logic delay很大啊?
做了什么大的逻辑?

使用特权

评论回复
8
magic323|  楼主 | 2012-9-25 09:50 | 只看该作者
7# Backkom80
计数器啊,我看了下好多delay都是出在计数器上,你有QQ吗?帮我看看啊,现在问题很棘手啊,不知怎么解决。我的是45380781

使用特权

评论回复
9
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,没有思路。请大家指教!

QQ截图20120925095350.png (27.2 KB )

QQ截图20120925095350.png

使用特权

评论回复
10
gaochy1126| | 2012-9-26 07:54 | 只看该作者
现在板子上跑跑看看,是不是容易跑飞什么的?

使用特权

评论回复
11
magic323|  楼主 | 2012-9-26 12:49 | 只看该作者
暂时还没有发现跑飞了什么东西,但是这么大的延迟让人很纠结啊!有什么方法可以解决这个问题吗?计数器位宽太大导致建立时间不满足的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

22

帖子

0

粉丝