|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 camp 于 2013-9-4 16:29 编辑
在设计中碰到了这么三个错误:
三个相似,其中slack最大的如下:
Timing constraint: TS_u_clk_gen_gclk2_bufg = PERIOD TIMEGRP "u_clk_gen_gclk2_bufg" TS_CLK_200MHz_p * 0.625 HIGH 50%;
For more information, see Period Analysis in the Timing Closure User Guide (UG612).
13506306 paths analyzed, 1974 endpoints analyzed, 31 failing endpoints
31 timing errors detected. (31 setup errors, 0 hold errors, 0 component switching limit errors)
Minimum period is 8.816ns.
--------------------------------------------------------------------------------
Paths for end point u_ethernet/u_frame_gen/ip_head_data_77 (SLICE_X11Y30.C3), 297000 paths
--------------------------------------------------------------------------------
Slack (setup path): -0.816ns (requirement - (data path - clock path skew + uncertainty))
Source: u_ethernet/u_frame_gen/ipIdentifier_r_3 (FF)
Destination: u_ethernet/u_frame_gen/ip_head_data_77 (FF)
Requirement: 8.000ns
Data Path Delay: 8.682ns (Levels of Logic = 13)
Clock Path Skew: -0.002ns (0.243 - 0.245)
Source Clock: clk_125MHz rising at 0.000ns
Destination Clock: clk_125MHz rising at 8.000ns
Clock Uncertainty: 0.132ns
Clock Uncertainty: 0.132ns ((TSJ^2 + DJ^2)^1/2) / 2 + PE
Total System Jitter (TSJ): 0.070ns
Discrete Jitter (DJ): 0.254ns
Phase Error (PE): 0.000ns
通过我的分析,我认为,源寄存器ipIdentifiter_r[3]--> 目的寄存器ip_head_data[77],路径延迟为8.682ns,加上建立时间等,总共8.816ns,这都超过了系统时钟8.00ns的要求。 以至于报错!
情况如下:仿真如下图:
仿真图
tframe_end是在每发送一帧后使能标志帧结束。部分代码如下:
reg [15:0] rxIpTotalLen_r;
always @(posedge clkin)
if(reset_n==1'b0)
ipIdentifier_r <= `UD 16'd1;
else if(tframe_end==1'b1)
ipIdentifier_r <= `UD ipIdentifier_r + 1;
assign Identifier = ipIdentifier_r;
wire [159:0] ip_head_data_w1;
assign ip_head_data_w1 = {Version[3:0],HeadLen[3:0],ServiceType[7:0],TotalLen[15:0],
Identifier[15:0],Flags[2:0],FragOffset[12:0],
TimeToLive[7:0],Protocol[7:0],IpHeadChecksum[15:0],
cap_ip[31:0],pc_ip[31:0]};
always @(posedge clkin)
if(head_flag==1'b1) begin
if(cnt_base[3]==1)
ip_head_data[159:0] <= `UD ip_head_data_w1;
end
else begin
ip_head_data[159:8] <=`UD ip_head_data[151:0];
ip_head_data[7:0] <= `UD 8'h00;
end
ipIdentifiter_r 是在每发一帧结束后,自己累加1.而到达目的寄存器ip_head_data是在帧格式打包的中部组帧, 以至于相当于中间应该有很多节点,而这段时间远远超过1个时钟的周期,为什么这里还报错呢?请教各位,有什么建议,可以说一下,先谢谢了, |
|