购物网站建设所需软件,科技部网站公布首批创新型县(市)建设名单,国内高端大气的网站设计,网站建设平台市场一、现象
最近使用赛灵思的FPGA设计项目时#xff0c;出现时序约束失效问题。 点进去发现如下#xff1a; 一个始终约束没有生效#xff0c;有多处报错。 二、原因 出现这个问题的原因是#xff0c;建立时间不满足。 时序违例的主要原因是建立时间和保持时间不满足要求出现时序约束失效问题。 点进去发现如下 一个始终约束没有生效有多处报错。 二、原因 出现这个问题的原因是建立时间不满足。 时序违例的主要原因是建立时间和保持时间不满足要求那么什么情况下会出现建立时间和保持时间不满足要求呢
建立时间不满足要求通常是因为组合逻辑处理时间太长保持时间不满足要求通常是因为组合逻辑处理时间太短 建立时间和保持时间都不满足往往出现在异步时钟域中
三、解决办法
加强约束重新进行综合对违规的路径进行进一步的优化但是一般效果可能不是很明显降低时钟的频率但是这个一般是在项目最初的时候决定的这个时候很难再改变拆分组合逻辑插入寄存器增加流水线这个是常用的方法优化布局布线减小传输的延时更改Place and Route Effort Level,overall把Standard模式通过最少的布局布线努力给出最快的运行时间适用于不太复杂的设计更改为High模式有最好的布局布线结果运行实际也长适用于复杂设计默认设置 四、实际项目更改 更改前 reg [31:0]suma;wire [16:0]sumb;wire [15:0]sumc;
//将以太网报文数据部分长度参数寄存
always (posedge clk or negedge rst_n) beginif(!rst_n) suma 32d0;else if(cal_en)suma {IP_ver,IP_hdr_len,IP_tos}IP_total_lenIP_id{IP_rsv,IP_df,IP_mf,IP_frag_offset}{IP_ttl,IP_protocol}src_ip[31:16]src_ip[15:0]dst_ip[31:16]dst_ip[15:0];elsesuma suma;
endassign sumb suma[31:16]suma[15:0];assign sumc sumb[16]sumb[15:0];assign checksum ~sumc;
更改后
reg [31:0]suma;
reg [31:0]suma_1;
wire [16:0]sumb;
wire [15:0]sumc;//将以太网报文数据部分长度参数寄存
always (posedge clk or negedge rst_n) beginif(!rst_n) suma 32d0;else if(cal_en)beginsuma_1{IP_ver,IP_hdr_len,IP_tos}IP_total_lenIP_id{IP_rsv,IP_df,IP_mf,IP_frag_offset}{IP_ttl,IP_protocol};suma /*{IP_ver,IP_hdr_len,IP_tos} 16h4500*//*IP_total_len*//*IP_id 16h0000*//*{IP_rsv,IP_df,IP_mf,IP_frag_offset} 16h0000*//*{IP_ttl,IP_protocol} 16h4011*/suma_1src_ip[31:16]src_ip[15:0]dst_ip[31:16]dst_ip[15:0];endelsesuma suma;
endassign sumb suma[31:16]suma[15:0];
assign sumc sumb[16]sumb[15:0];
assign checksum ~sumc;
分析根据报错的路径找到对于的代码拆分组合逻辑插入寄存器增加流水线这个是常用的方法。