打印

时序问题请教!!

[复制链接]
7612|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 cxh_boy 于 2013-4-9 09:58 编辑


系统时钟是5.7ns  ,两级reg之间延迟达到 3ns ,迷惑!!!请大家指教!!

//counter :                                                      
always@(posedge SYSCLK or negedge RST_B)
if(!RST_B)
COUNTER <= 4'h0 ;
else                                                                                    
COUNTER <= `UD COUNTER_N ;                                      
                                                               
assign COUNTER_N = (COUNTER == 4'd13)? 4'h0 : COUNTER + 1'h1 ;  
//Send Data :
always@(posedge SYSCLK or negedge RST_B)
if(!RST_B)
DATA_10BIT_OUT <= `UD 10'h0 ;
else
DATA_10BIT_OUT <= `UD DATA_10BIT_OUT_N ;
always@(*)
begin
case(COUNTER)
4'd0    :  DATA_10BIT_OUT_N = {1'h0,
                              VIDEO_7BIT_IN_REG_7[1] ,
                              VIDEO_7BIT_IN_REG_7[0] ,
                              
                              VIDEO_7BIT_IN_0[6] ,  
                              VIDEO_7BIT_IN_0[5] ,  
                              VIDEO_7BIT_IN_0[4] ,  
                              VIDEO_7BIT_IN_0[3] ,  
                              VIDEO_7BIT_IN_0[2] ,  
                              VIDEO_7BIT_IN_0[1] ,  
                              VIDEO_7BIT_IN_0[0]
                              };  
                                                                                                                                                                                                                                                                                                                                            
4'd1    :  DATA_10BIT_OUT_N = {1'h0,
                              VIDEO_7BIT_IN_REG_7[3] ,
                              VIDEO_7BIT_IN_REG_7[2] ,
                              
                              VIDEO_7BIT_IN_1[6] ,
                              VIDEO_7BIT_IN_1[5] ,   
                              VIDEO_7BIT_IN_1[4] ,   
                              VIDEO_7BIT_IN_1[3] ,   
                              VIDEO_7BIT_IN_1[2] ,   
                              VIDEO_7BIT_IN_1[1] ,   
                              VIDEO_7BIT_IN_1[0]      
                              };                     
   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
4'd2    :  DATA_10BIT_OUT_N = {1'h0,
                              VIDEO_7BIT_IN_REG_7[5] ,
                              VIDEO_7BIT_IN_REG_7[4] ,
                                             
                              VIDEO_7BIT_IN_2[6] ,                                
                              VIDEO_7BIT_IN_2[5] ,                                             
                              VIDEO_7BIT_IN_2[4] ,                                             
                              VIDEO_7BIT_IN_2[3] ,                                             
                              VIDEO_7BIT_IN_2[2] ,                                             
                              VIDEO_7BIT_IN_2[1] ,                                                            
                              VIDEO_7BIT_IN_2[0]        
                              };                                                                                      
                                                                                                                                                                                                  
4'd3    :  DATA_10BIT_OUT_N = {1'h0,
                              DATA_485_IN        ,
                              VIDEO_7BIT_IN_REG_7[6] ,
               
                              VIDEO_7BIT_IN_3[6] ,
                              VIDEO_7BIT_IN_3[5] ,  
                              VIDEO_7BIT_IN_3[4] ,  
                              VIDEO_7BIT_IN_3[3] ,  
                              VIDEO_7BIT_IN_3[2] ,  
                              VIDEO_7BIT_IN_3[1] ,               
                              VIDEO_7BIT_IN_3[0]   
                              };                                      
                                                                                 
4'd4    :  DATA_10BIT_OUT_N = {1'h0,
                              1'h1,
                              1'h0,                                                   
                              VIDEO_7BIT_IN_4[6] ,                                      
                              VIDEO_7BIT_IN_4[5] ,  
                              VIDEO_7BIT_IN_4[4] ,  
                              VIDEO_7BIT_IN_4[3] ,  
                              VIDEO_7BIT_IN_4[2] ,  
                              VIDEO_7BIT_IN_4[1] ,              
                              VIDEO_7BIT_IN_4[0]  
                              };                                                                  
                                                              
4'd5    :  DATA_10BIT_OUT_N = {1'h0,
                              1'h1,
                              1'h0,                                       
                              VIDEO_7BIT_IN_5[6] ,                          
                              VIDEO_7BIT_IN_5[5] ,                        
                              VIDEO_7BIT_IN_5[4] ,                        
                              VIDEO_7BIT_IN_5[3] ,                        
                              VIDEO_7BIT_IN_5[2] ,                        
                              VIDEO_7BIT_IN_5[1] ,                                 
                              VIDEO_7BIT_IN_5[0]  
                              };                                                                                                   
                                                                                                
4'd6    :  DATA_10BIT_OUT_N = {1'h0,
                              1'h1,
                              1'h0,                                          
                              VIDEO_7BIT_IN_6[6] ,                          
                              VIDEO_7BIT_IN_6[5] ,                          
                              VIDEO_7BIT_IN_6[4] ,                          
                              VIDEO_7BIT_IN_6[3] ,                          
                              VIDEO_7BIT_IN_6[2] ,                          
                              VIDEO_7BIT_IN_6[1] ,                                    
                              VIDEO_7BIT_IN_6[0]  
                              };                  
//-----------second 8v------------                                                                                                                                            
4'd7    :  DATA_10BIT_OUT_N = {1'h0,
                              VIDEO_7BIT_IN_REG_15[1],
                              VIDEO_7BIT_IN_REG_15[0],
                                             
                              VIDEO_7BIT_IN_8[6] ,
                              VIDEO_7BIT_IN_8[5] ,  
                              VIDEO_7BIT_IN_8[4] ,  
                              VIDEO_7BIT_IN_8[3] ,  
                              VIDEO_7BIT_IN_8[2] ,  
                              VIDEO_7BIT_IN_8[1] ,              
                              VIDEO_7BIT_IN_8[0]  
                              };  
4'd8    :  DATA_10BIT_OUT_N = {1'h0,                                             
                              VIDEO_7BIT_IN_REG_15[3],                                                
                              VIDEO_7BIT_IN_REG_15[2],
                                                                              
                              VIDEO_7BIT_IN_9[6] ,                                
                              VIDEO_7BIT_IN_9[5] ,                                
                              VIDEO_7BIT_IN_9[4] ,                                
                              VIDEO_7BIT_IN_9[3] ,                                
                              VIDEO_7BIT_IN_9[2] ,                                
                              VIDEO_7BIT_IN_9[1] ,                                
                              VIDEO_7BIT_IN_9[0]                                 
                              };                                                  
4'd9    :  DATA_10BIT_OUT_N = {1'h0,                                             
                              VIDEO_7BIT_IN_REG_15[5],                                                
                              VIDEO_7BIT_IN_REG_15[4],
                                                                              
                              VIDEO_7BIT_IN_10[6] ,                                
                              VIDEO_7BIT_IN_10[5] ,                                
                              VIDEO_7BIT_IN_10[4] ,                                
                              VIDEO_7BIT_IN_10[3] ,                                
                              VIDEO_7BIT_IN_10[2] ,                                
                              VIDEO_7BIT_IN_10[1] ,                                
                              VIDEO_7BIT_IN_10[0]                                 
                              };                                                  
                              
4'd10    :  DATA_10BIT_OUT_N ={1'h0,                                             
                              1'h1,                                             
                              VIDEO_7BIT_IN_REG_15[6] ,
                                                                              
                              VIDEO_7BIT_IN_11[6] ,                                
                              VIDEO_7BIT_IN_11[5] ,                                
                              VIDEO_7BIT_IN_11[4] ,                                
                              VIDEO_7BIT_IN_11[3] ,                                
                              VIDEO_7BIT_IN_11[2] ,                                
                              VIDEO_7BIT_IN_11[1] ,                                
                              VIDEO_7BIT_IN_11[0]                                 
                              };                                                  
4'd11    :  DATA_10BIT_OUT_N ={1'h0,                                             
                              1'h1,               
                              1'h0,               
                              VIDEO_7BIT_IN_12[6] ,
                              VIDEO_7BIT_IN_12[5] ,
                              VIDEO_7BIT_IN_12[4] ,
                              VIDEO_7BIT_IN_12[3] ,
                              VIDEO_7BIT_IN_12[2] ,
                              VIDEO_7BIT_IN_12[1] ,
                              VIDEO_7BIT_IN_12[0]  
                              };                  
4'd12    :  DATA_10BIT_OUT_N ={1'h0,               
                              1'h1,               
                              1'h0,               
                              VIDEO_7BIT_IN_13[6] ,
                              VIDEO_7BIT_IN_13[5] ,
                              VIDEO_7BIT_IN_13[4] ,
                              VIDEO_7BIT_IN_13[3] ,
                              VIDEO_7BIT_IN_13[2] ,
                              VIDEO_7BIT_IN_13[1] ,
                              VIDEO_7BIT_IN_13[0]  
                              };                  
4'd13    :  DATA_10BIT_OUT_N ={1'h1,               
                              1'h1,               
                              1'h0,               
                              VIDEO_7BIT_IN_14[6] ,
                              VIDEO_7BIT_IN_14[5] ,
                              VIDEO_7BIT_IN_14[4] ,
                              VIDEO_7BIT_IN_14[3] ,
                              VIDEO_7BIT_IN_14[2] ,
                              VIDEO_7BIT_IN_14[1] ,
                              VIDEO_7BIT_IN_14[0]  
                              };                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
default : DATA_10BIT_OUT_N = DATA_10BIT_OUT  ;
endcase
end
上面是代码,下面是timequest的时序分析报错:
Slack                      From Node                                                                    To Node                                                                              Lanuch  Clock        LatchClock
-3.503  DATA_CONNECT :DATA_CONNECT_MY|COUNTER[1]    DATA_CONNECT:DATA_CONNECT_MY|DATA_10BIT_OUT[3]          SYSCLK                  SYSCLK

相关帖子

沙发
resxpl| | 2013-4-8 21:03 | 只看该作者
分析一下超标的路径, 看看延时在各段分布情况. 就可以找到原因.

我大致看了下, DATA_10BIT_OUT_N的输入逻辑太复杂了.
可以把每个case分支都赋给一个reg, 采用寄存器方式. 然后延时一时钟, 直接赋给DATA_10BIT_OUT.

always@(posedge SYSCLK or negedge RST_B)
begin
if(!RST_B) begin
DATA_10BIT_OUT <= 0;
DATA_10BIT_OUT_LIST[0] <= 0;
DATA_10BIT_OUT_LIST[1] <= 0;
DATA_10BIT_OUT_LIST[2] <= 0;
DATA_10BIT_OUT_LIST[3] <= 0;
DATA_10BIT_OUT_LIST[4] <= 0;
DATA_10BIT_OUT_LIST[5] <= 0;
DATA_10BIT_OUT_LIST[6] <= 0;
DATA_10BIT_OUT_LIST[7] <= 0;
DATA_10BIT_OUT_LIST[8] <= 0;
DATA_10BIT_OUT_LIST[9] <= 0;
DATA_10BIT_OUT_LIST[10] <= 0;
DATA_10BIT_OUT_LIST[11] <= 0;
DATA_10BIT_OUT_LIST[12] <= 0;
DATA_10BIT_OUT_LIST[13] <= 0;
end
else begin

DATA_10BIT_OUT_LIST[0] <= {1'h0,
        VIDEO_7BIT_IN_REG_7[1] ,
        VIDEO_7BIT_IN_REG_7[0] ,

        VIDEO_7BIT_IN_0[6] ,  
        VIDEO_7BIT_IN_0[5] ,  
        VIDEO_7BIT_IN_0[4] ,  
        VIDEO_7BIT_IN_0[3] ,  
        VIDEO_7BIT_IN_0[2] ,  
        VIDEO_7BIT_IN_0[1] ,  
        VIDEO_7BIT_IN_0[0]
        };

DATA_10BIT_OUT_LIST[1] <= {1'h0,
        VIDEO_7BIT_IN_REG_7[3] ,
        VIDEO_7BIT_IN_REG_7[2] ,

        VIDEO_7BIT_IN_1[6] ,
        VIDEO_7BIT_IN_1[5] ,   
        VIDEO_7BIT_IN_1[4] ,   
        VIDEO_7BIT_IN_1[3] ,   
        VIDEO_7BIT_IN_1[2] ,   
        VIDEO_7BIT_IN_1[1] ,   
        VIDEO_7BIT_IN_1[0]      
        };  
       
DATA_10BIT_OUT_LIST[2] <= {1'h0,
        VIDEO_7BIT_IN_REG_7[5] ,
        VIDEO_7BIT_IN_REG_7[4] ,
                                  
        VIDEO_7BIT_IN_2[6] ,                                
        VIDEO_7BIT_IN_2[5] ,                                             
        VIDEO_7BIT_IN_2[4] ,                                             
        VIDEO_7BIT_IN_2[3] ,                                             
        VIDEO_7BIT_IN_2[2] ,                                             
        VIDEO_7BIT_IN_2[1] ,                                                            
        VIDEO_7BIT_IN_2[0]        
        };        
DATA_10BIT_OUT_LIST[3] <= {1'h0,
        DATA_485_IN        ,
        VIDEO_7BIT_IN_REG_7[6] ,

        VIDEO_7BIT_IN_3[6] ,
        VIDEO_7BIT_IN_3[5] ,  
        VIDEO_7BIT_IN_3[4] ,  
        VIDEO_7BIT_IN_3[3] ,  
        VIDEO_7BIT_IN_3[2] ,  
        VIDEO_7BIT_IN_3[1] ,               
        VIDEO_7BIT_IN_3[0]};   
DATA_10BIT_OUT_LIST[4] <= {1'h0,
        1'h1,
        1'h0,                                                   
        VIDEO_7BIT_IN_4[6] ,                                      
        VIDEO_7BIT_IN_4[5] ,  
        VIDEO_7BIT_IN_4[4] ,  
        VIDEO_7BIT_IN_4[3] ,  
        VIDEO_7BIT_IN_4[2] ,  
        VIDEO_7BIT_IN_4[1] ,              
        VIDEO_7BIT_IN_4[0]  
        };

DATA_10BIT_OUT_LIST[5] <= {1'h0,
        1'h1,
        1'h0,                                       
        VIDEO_7BIT_IN_5[6] ,                          
        VIDEO_7BIT_IN_5[5] ,                        
        VIDEO_7BIT_IN_5[4] ,                        
        VIDEO_7BIT_IN_5[3] ,                        
        VIDEO_7BIT_IN_5[2] ,                        
        VIDEO_7BIT_IN_5[1] ,                                 
        VIDEO_7BIT_IN_5[0]  
        };       

DATA_10BIT_OUT_LIST[6] <= {1'h0,
        1'h1,
        1'h0,                                          
        VIDEO_7BIT_IN_6[6] ,                          
        VIDEO_7BIT_IN_6[5] ,                          
        VIDEO_7BIT_IN_6[4] ,                          
        VIDEO_7BIT_IN_6[3] ,                          
        VIDEO_7BIT_IN_6[2] ,                          
        VIDEO_7BIT_IN_6[1] ,                                    
        VIDEO_7BIT_IN_6[0]  
        };        
DATA_10BIT_OUT_LIST[7] <= {1'h0,
        VIDEO_7BIT_IN_REG_15[1],
        VIDEO_7BIT_IN_REG_15[0],
                                  
        VIDEO_7BIT_IN_8[6] ,
        VIDEO_7BIT_IN_8[5] ,  
        VIDEO_7BIT_IN_8[4] ,  
        VIDEO_7BIT_IN_8[3] ,  
        VIDEO_7BIT_IN_8[2] ,  
        VIDEO_7BIT_IN_8[1] ,              
        VIDEO_7BIT_IN_8[0]  
        };

DATA_10BIT_OUT_LIST[8] <= {1'h0,                                             
        VIDEO_7BIT_IN_REG_15[3],                                                
        VIDEO_7BIT_IN_REG_15[2],

        VIDEO_7BIT_IN_9[6] ,                                
        VIDEO_7BIT_IN_9[5] ,                                
        VIDEO_7BIT_IN_9[4] ,                                
        VIDEO_7BIT_IN_9[3] ,                                
        VIDEO_7BIT_IN_9[2] ,                                
        VIDEO_7BIT_IN_9[1] ,                                
        VIDEO_7BIT_IN_9[0]                                 
        };       

DATA_10BIT_OUT_LIST[9] <= {1'h0,                                             
        VIDEO_7BIT_IN_REG_15[5],                                                
        VIDEO_7BIT_IN_REG_15[4],
                                                                                                  
        VIDEO_7BIT_IN_10[6] ,                                
        VIDEO_7BIT_IN_10[5] ,                                
        VIDEO_7BIT_IN_10[4] ,                                
        VIDEO_7BIT_IN_10[3] ,                                
        VIDEO_7BIT_IN_10[2] ,                                
        VIDEO_7BIT_IN_10[1] ,                                
        VIDEO_7BIT_IN_10[0]                                 
        };

DATA_10BIT_OUT_LIST[10] <={1'h0,                                             
        1'h1,                                             
        VIDEO_7BIT_IN_REG_15[6] ,
                                                                                                  
        VIDEO_7BIT_IN_11[6] ,                                
        VIDEO_7BIT_IN_11[5] ,                                
        VIDEO_7BIT_IN_11[4] ,                                
        VIDEO_7BIT_IN_11[3] ,                                
        VIDEO_7BIT_IN_11[2] ,                                
        VIDEO_7BIT_IN_11[1] ,                                
        VIDEO_7BIT_IN_11[0]                                 
        };
DATA_10BIT_OUT_LIST[11] <={1'h0,                                             
        1'h1,               
        1'h0,               
        VIDEO_7BIT_IN_12[6] ,
        VIDEO_7BIT_IN_12[5] ,
        VIDEO_7BIT_IN_12[4] ,
        VIDEO_7BIT_IN_12[3] ,
        VIDEO_7BIT_IN_12[2] ,
        VIDEO_7BIT_IN_12[1] ,
        VIDEO_7BIT_IN_12[0]  
        };       

DATA_10BIT_OUT_LIST[12] <={1'h0,               
        1'h1,               
        1'h0,               
        VIDEO_7BIT_IN_13[6] ,
        VIDEO_7BIT_IN_13[5] ,
        VIDEO_7BIT_IN_13[4] ,
        VIDEO_7BIT_IN_13[3] ,
        VIDEO_7BIT_IN_13[2] ,
        VIDEO_7BIT_IN_13[1] ,
        VIDEO_7BIT_IN_13[0]  
        };        
DATA_10BIT_OUT_LIST[13] <={1'h1,               
        1'h1,               
        1'h0,               
        VIDEO_7BIT_IN_14[6] ,
        VIDEO_7BIT_IN_14[5] ,
        VIDEO_7BIT_IN_14[4] ,
        VIDEO_7BIT_IN_14[3] ,
        VIDEO_7BIT_IN_14[2] ,
        VIDEO_7BIT_IN_14[1] ,
        VIDEO_7BIT_IN_14[0]  
        };                                                          
case(COUNTER)
4'd0    :    DATA_10BIT_OUT <= DATA_10BIT_OUT_LIST[0];
4'd1    :    DATA_10BIT_OUT <= DATA_10BIT_OUT_LIST[1];
4'd2    :    DATA_10BIT_OUT <= DATA_10BIT_OUT_LIST[2];
4'd3    :    DATA_10BIT_OUT <= DATA_10BIT_OUT_LIST[3];
4'd4    :    DATA_10BIT_OUT <= DATA_10BIT_OUT_LIST[4];
4'd5    :    DATA_10BIT_OUT <= DATA_10BIT_OUT_LIST[5];
4'd6    :    DATA_10BIT_OUT <= DATA_10BIT_OUT_LIST[6];
//-----------second 8v------------                                                                                                                                            
4'd7    :    DATA_10BIT_OUT <= DATA_10BIT_OUT_LIST[7];
4'd8    :    DATA_10BIT_OUT <= DATA_10BIT_OUT_LIST[8];                                                
4'd9    :    DATA_10BIT_OUT <= DATA_10BIT_OUT_LIST[9];                                               
4'd10   :    DATA_10BIT_OUT <= DATA_10BIT_OUT_LIST[10];                                                
4'd11   :    DATA_10BIT_OUT <= DATA_10BIT_OUT_LIST[11];                 
4'd12   :    DATA_10BIT_OUT <= DATA_10BIT_OUT_LIST[12];               
4'd13   :    DATA_10BIT_OUT <= DATA_10BIT_OUT_LIST[13];
endcase

使用特权

评论回复
板凳
ifpga| | 2013-4-9 09:10 | 只看该作者
延时长是肯定的
你可想像一下
这个MUX综合出来会多么复杂
建议从整个系统入手
把这一块算法简化一下

使用特权

评论回复
地板
cxh_boy|  楼主 | 2013-4-9 09:42 | 只看该作者
resxpl 发表于 2013-4-8 21:03
分析一下超标的路径, 看看延时在各段分布情况. 就可以找到原因.

我大致看了下, DATA_10BIT_OUT_N的输入逻 ...

谢谢 resxpl !按你的方法我试了下,延迟降低到了1个多纳秒,不过还是没能达到要求!!不过芯片资源耗费了更多. 你说的找超标的关键路径,能不能具体说说,就是找到了应该怎么处理之内!

使用特权

评论回复
5
cxh_boy|  楼主 | 2013-4-9 09:46 | 只看该作者
ifpga 发表于 2013-4-9 09:10
延时长是肯定的
你可想像一下
这个MUX综合出来会多么复杂

嗯,系统其它地方没有问题,上面这些代码,是一个发射module,数据必须汇总之后发出去,刚就respxl的方法试了下,改善不少!只是还是没达标!

使用特权

评论回复
6
resxpl| | 2013-4-9 21:04 | 只看该作者
改进方法在前面已经给出来了. 基本就是分解逻辑. 利用延迟几个周期达到提高定时性能的目的.
前面只是简单改进, 还可以使用OneHot序列.

always@(posedge SYSCLK or negedge RST_B)
if(!RST_B) begin
COUNTER_BUF <= 14'b0001 ;
COUNTER <= 0;
end
else begin                                                                                   
COUNTER_BUF <= `UD {COUNTER_BUF[12:0], COUNTER_BUF[13]} ;  
COUNTER <= COUNTER_BUF;
end                                    
                                                               
always@(posedge SYSCLK or negedge RST_B)
begin
if(!RST_B) begin
DATA_10BIT_OUT <= 0;
DATA_10BIT_OUT_BUF[0] <= 0;
DATA_10BIT_OUT_BUF[1] <= 0;
DATA_10BIT_OUT_BUF[2] <= 0;
DATA_10BIT_OUT_BUF[3] <= 0;
DATA_10BIT_OUT_LIST[0] <= 0;
DATA_10BIT_OUT_LIST[1] <= 0;
DATA_10BIT_OUT_LIST[2] <= 0;
DATA_10BIT_OUT_LIST[3] <= 0;
DATA_10BIT_OUT_LIST[4] <= 0;
DATA_10BIT_OUT_LIST[5] <= 0;
DATA_10BIT_OUT_LIST[6] <= 0;
DATA_10BIT_OUT_LIST[7] <= 0;
DATA_10BIT_OUT_LIST[8] <= 0;
DATA_10BIT_OUT_LIST[9] <= 0;
DATA_10BIT_OUT_LIST[10] <= 0;
DATA_10BIT_OUT_LIST[11] <= 0;
DATA_10BIT_OUT_LIST[12] <= 0;
DATA_10BIT_OUT_LIST[13] <= 0;
end
else begin

DATA_10BIT_OUT_LIST[0] <= 0;
DATA_10BIT_OUT_LIST[1] <= 0;
DATA_10BIT_OUT_LIST[2] <= 0;
DATA_10BIT_OUT_LIST[3] <= 0;
DATA_10BIT_OUT_LIST[4] <= 0;
DATA_10BIT_OUT_LIST[5] <= 0;
DATA_10BIT_OUT_LIST[6] <= 0;
DATA_10BIT_OUT_LIST[7] <= 0;
DATA_10BIT_OUT_LIST[8] <= 0;
DATA_10BIT_OUT_LIST[9] <= 0;
DATA_10BIT_OUT_LIST[10] <= 0;
DATA_10BIT_OUT_LIST[11] <= 0;
DATA_10BIT_OUT_LIST[12] <= 0;
DATA_10BIT_OUT_LIST[13] <= 0;

if(COUNTER[0])
DATA_10BIT_OUT_LIST[0] <= {1'h0,
        VIDEO_7BIT_IN_REG_7[1] ,
        VIDEO_7BIT_IN_REG_7[0] ,

        VIDEO_7BIT_IN_0[6] ,  
        VIDEO_7BIT_IN_0[5] ,  
        VIDEO_7BIT_IN_0[4] ,  
        VIDEO_7BIT_IN_0[3] ,  
        VIDEO_7BIT_IN_0[2] ,  
        VIDEO_7BIT_IN_0[1] ,  
        VIDEO_7BIT_IN_0[0]
        };

if(COUNTER[1])
DATA_10BIT_OUT_LIST[1] <= {1'h0,
        VIDEO_7BIT_IN_REG_7[3] ,
        VIDEO_7BIT_IN_REG_7[2] ,

        VIDEO_7BIT_IN_1[6] ,
        VIDEO_7BIT_IN_1[5] ,   
        VIDEO_7BIT_IN_1[4] ,   
        VIDEO_7BIT_IN_1[3] ,   
        VIDEO_7BIT_IN_1[2] ,   
        VIDEO_7BIT_IN_1[1] ,   
        VIDEO_7BIT_IN_1[0]      
        };  

if(COUNTER[2])       
DATA_10BIT_OUT_LIST[2] <= {1'h0,
        VIDEO_7BIT_IN_REG_7[5] ,
        VIDEO_7BIT_IN_REG_7[4] ,
                                  
        VIDEO_7BIT_IN_2[6] ,                                
        VIDEO_7BIT_IN_2[5] ,                                             
        VIDEO_7BIT_IN_2[4] ,                                             
        VIDEO_7BIT_IN_2[3] ,                                             
        VIDEO_7BIT_IN_2[2] ,                                             
        VIDEO_7BIT_IN_2[1] ,                                                            
        VIDEO_7BIT_IN_2[0]        
        };        
       
if(COUNTER[3])       
DATA_10BIT_OUT_LIST[3] <= {1'h0,
        DATA_485_IN        ,
        VIDEO_7BIT_IN_REG_7[6] ,

        VIDEO_7BIT_IN_3[6] ,
        VIDEO_7BIT_IN_3[5] ,  
        VIDEO_7BIT_IN_3[4] ,  
        VIDEO_7BIT_IN_3[3] ,  
        VIDEO_7BIT_IN_3[2] ,  
        VIDEO_7BIT_IN_3[1] ,               
        VIDEO_7BIT_IN_3[0]};   
       
if(COUNTER[4])       
DATA_10BIT_OUT_LIST[4] <= {1'h0,
        1'h1,
        1'h0,                                                   
        VIDEO_7BIT_IN_4[6] ,                                      
        VIDEO_7BIT_IN_4[5] ,  
        VIDEO_7BIT_IN_4[4] ,  
        VIDEO_7BIT_IN_4[3] ,  
        VIDEO_7BIT_IN_4[2] ,  
        VIDEO_7BIT_IN_4[1] ,              
        VIDEO_7BIT_IN_4[0]  
        };

if(COUNTER[5])
DATA_10BIT_OUT_LIST[5] <= {1'h0,
        1'h1,
        1'h0,                                       
        VIDEO_7BIT_IN_5[6] ,                          
        VIDEO_7BIT_IN_5[5] ,                        
        VIDEO_7BIT_IN_5[4] ,                        
        VIDEO_7BIT_IN_5[3] ,                        
        VIDEO_7BIT_IN_5[2] ,                        
        VIDEO_7BIT_IN_5[1] ,                                 
        VIDEO_7BIT_IN_5[0]  
        };       

if(COUNTER[6])
DATA_10BIT_OUT_LIST[6] <= {1'h0,
        1'h1,
        1'h0,                                          
        VIDEO_7BIT_IN_6[6] ,                          
        VIDEO_7BIT_IN_6[5] ,                          
        VIDEO_7BIT_IN_6[4] ,                          
        VIDEO_7BIT_IN_6[3] ,                          
        VIDEO_7BIT_IN_6[2] ,                          
        VIDEO_7BIT_IN_6[1] ,                                    
        VIDEO_7BIT_IN_6[0]  
        };        
       
if(COUNTER[7])       
DATA_10BIT_OUT_LIST[7] <= {1'h0,
        VIDEO_7BIT_IN_REG_15[1],
        VIDEO_7BIT_IN_REG_15[0],
                                  
        VIDEO_7BIT_IN_8[6] ,
        VIDEO_7BIT_IN_8[5] ,  
        VIDEO_7BIT_IN_8[4] ,  
        VIDEO_7BIT_IN_8[3] ,  
        VIDEO_7BIT_IN_8[2] ,  
        VIDEO_7BIT_IN_8[1] ,              
        VIDEO_7BIT_IN_8[0]  
        };

if(COUNTER[8])
DATA_10BIT_OUT_LIST[8] <= {1'h0,                                             
        VIDEO_7BIT_IN_REG_15[3],                                                
        VIDEO_7BIT_IN_REG_15[2],

        VIDEO_7BIT_IN_9[6] ,                                
        VIDEO_7BIT_IN_9[5] ,                                
        VIDEO_7BIT_IN_9[4] ,                                
        VIDEO_7BIT_IN_9[3] ,                                
        VIDEO_7BIT_IN_9[2] ,                                
        VIDEO_7BIT_IN_9[1] ,                                
        VIDEO_7BIT_IN_9[0]                                 
        };       

if(COUNTER[9])
DATA_10BIT_OUT_LIST[9] <= {1'h0,                                             
        VIDEO_7BIT_IN_REG_15[5],                                                
        VIDEO_7BIT_IN_REG_15[4],
                                                                                                  
        VIDEO_7BIT_IN_10[6] ,                                
        VIDEO_7BIT_IN_10[5] ,                                
        VIDEO_7BIT_IN_10[4] ,                                
        VIDEO_7BIT_IN_10[3] ,                                
        VIDEO_7BIT_IN_10[2] ,                                
        VIDEO_7BIT_IN_10[1] ,                                
        VIDEO_7BIT_IN_10[0]                                 
        };

if(COUNTER[10])
DATA_10BIT_OUT_LIST[10] <={1'h0,                                             
        1'h1,                                             
        VIDEO_7BIT_IN_REG_15[6] ,
                                                                                                  
        VIDEO_7BIT_IN_11[6] ,                                
        VIDEO_7BIT_IN_11[5] ,                                
        VIDEO_7BIT_IN_11[4] ,                                
        VIDEO_7BIT_IN_11[3] ,                                
        VIDEO_7BIT_IN_11[2] ,                                
        VIDEO_7BIT_IN_11[1] ,                                
        VIDEO_7BIT_IN_11[0]                                 
        };
       
if(COUNTER[11])       
DATA_10BIT_OUT_LIST[11] <={1'h0,                                             
        1'h1,               
        1'h0,               
        VIDEO_7BIT_IN_12[6] ,
        VIDEO_7BIT_IN_12[5] ,
        VIDEO_7BIT_IN_12[4] ,
        VIDEO_7BIT_IN_12[3] ,
        VIDEO_7BIT_IN_12[2] ,
        VIDEO_7BIT_IN_12[1] ,
        VIDEO_7BIT_IN_12[0]  
        };       

if(COUNTER[12])
DATA_10BIT_OUT_LIST[12] <={1'h0,               
        1'h1,               
        1'h0,               
        VIDEO_7BIT_IN_13[6] ,
        VIDEO_7BIT_IN_13[5] ,
        VIDEO_7BIT_IN_13[4] ,
        VIDEO_7BIT_IN_13[3] ,
        VIDEO_7BIT_IN_13[2] ,
        VIDEO_7BIT_IN_13[1] ,
        VIDEO_7BIT_IN_13[0]  
        };

if(COUNTER[13])        
DATA_10BIT_OUT_LIST[13] <={1'h1,               
        1'h1,               
        1'h0,               
        VIDEO_7BIT_IN_14[6] ,
        VIDEO_7BIT_IN_14[5] ,
        VIDEO_7BIT_IN_14[4] ,
        VIDEO_7BIT_IN_14[3] ,
        VIDEO_7BIT_IN_14[2] ,
        VIDEO_7BIT_IN_14[1] ,
        VIDEO_7BIT_IN_14[0]  
        };       

DATA_10BIT_OUT_BUF[0] <= DATA_10BIT_OUT_LIST[0] |
        DATA_10BIT_OUT_LIST[1] |
        DATA_10BIT_OUT_LIST[2] |
        DATA_10BIT_OUT_LIST[3];
       
DATA_10BIT_OUT_BUF[1] <= DATA_10BIT_OUT_LIST[4] |
        DATA_10BIT_OUT_LIST[5] |
        DATA_10BIT_OUT_LIST[6] |
        DATA_10BIT_OUT_LIST[7];
       
DATA_10BIT_OUT_BUF[2] <= DATA_10BIT_OUT_LIST[8] |
        DATA_10BIT_OUT_LIST[9] |
        DATA_10BIT_OUT_LIST[10] |
        DATA_10BIT_OUT_LIST[11];       

DATA_10BIT_OUT_BUF[3] <= DATA_10BIT_OUT_LIST[12] |
        DATA_10BIT_OUT_LIST[13];
       
DATA_10BIT_OUT <= DATA_10BIT_OUT_BUF[0] |
        DATA_10BIT_OUT_BUF[1] |
        DATA_10BIT_OUT_BUF[2] |
        DATA_10BIT_OUT_BUF[3];

使用特权

评论回复
7
Backkom80| | 2013-4-10 08:58 | 只看该作者
:lol

使用特权

评论回复
8
cxh_boy|  楼主 | 2013-4-10 16:02 | 只看该作者
本帖最后由 cxh_boy 于 2013-4-10 16:10 编辑
resxpl 发表于 2013-4-9 21:04
改进方法在前面已经给出来了. 基本就是分解逻辑. 利用延迟几个周期达到提高定时性能的目的.
前面只是简单改 ...


试了下,这样子没有之前效果好!可能主要是我的资源太少了,已经到90%了!你的分解逻辑的方法,受教了,很有用,谢过!
另外:
Slack                      From Node                                                                    To Node                                                                              Lanuch  Clock        LatchClock
-3.503  DATA_CONNECT :DATA_CONNECT_MY|COUNTER[1]    DATA_CONNECT:DATA_CONNECT_MY|DATA_10BIT_OUT[3]          SYSCLK                  SYSCLK

这句话的意思是说: COUNTER[1]   DATA_10BIT_OUT[3] 的余量是-3.503ns吗?照常理说,内部reg 到reg应该很快才对, 怎么会这么大的延迟呢?感觉有点说不过去?

使用特权

评论回复
9
cxh_boy|  楼主 | 2013-4-10 16:14 | 只看该作者
Backkom80 发表于 2013-4-10 08:58


熊哥,求指点下!

使用特权

评论回复
10
lwq030736| | 2013-4-10 16:50 | 只看该作者
cxh_boy 发表于 2013-4-10 16:02
试了下,这样子没有之前效果好!可能主要是我的资源太少了,已经到90%了!你的分解逻辑的方法,受教了,很有 ...

你这条路径又不是两个寄存器之间直接连的,中间还有很多组合逻辑部分
从时序分析来看IC延迟占了很大一部分,就是说是走线造成的延迟较搞,说明资源不太够用了
解决的办法有两个,一个是把过长的组合逻辑分解成多级流水线
第二个是换用逻辑规模更大,时序等级更高的器件

使用特权

评论回复
11
lwq030736| | 2013-4-10 17:05 | 只看该作者
或者通过资源换速度,采用乒乓操作,可以将这一段组合逻辑的处理速度降低一半

使用特权

评论回复
12
resxpl| | 2013-4-10 21:39 | 只看该作者
reg到reg, 这里包含的细节可很多. 不是一根线连接连个触发器这么简单.
中间有LUT延时, 布线延迟.
可以根据综合软件的提示来分析延时分布情况.

去看看芯片手册, 熟悉芯片的硬件原理是很重要的.

使用特权

评论回复
13
cxh_boy|  楼主 | 2013-4-11 14:20 | 只看该作者
lwq030736 发表于 2013-4-10 17:05
或者通过资源换速度,采用乒乓操作,可以将这一段组合逻辑的处理速度降低一半 ...

lwq,怎么降低一半,求详解!!

使用特权

评论回复
14
cxh_boy|  楼主 | 2013-4-11 14:22 | 只看该作者
resxpl 发表于 2013-4-10 21:39
reg到reg, 这里包含的细节可很多. 不是一根线连接连个触发器这么简单.
中间有LUT延时, 布线延迟.
可以根 ...

嗯,最近就是在捣鼓这些东西,之前一直没在意!!

使用特权

评论回复
15
lwq030736| | 2013-4-11 18:44 | 只看该作者
cxh_boy 发表于 2013-4-11 14:20
lwq,怎么降低一半,求详解!!

自己百度乒乓操作

使用特权

评论回复
16
yghanwuji| | 2013-5-8 14:57 | 只看该作者
学习下

使用特权

评论回复
17
GoldSunMonkey| | 2013-5-8 21:17 | 只看该作者
感谢大家啊啊

使用特权

评论回复
18
Tianya283| | 2013-5-8 21:21 | 只看该作者
讨论的很激烈啊

使用特权

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

本版积分规则

个人签名:人生就像旅途,重要的不是目的地,而是沿途的风景和看风景的心情!

3

主题

53

帖子

0

粉丝