(四)关于STA时序违例方案解决

 

二、查看时序报告

1.ILA相关约束可以忽略

2.Report timing summary可以打印所有路径报告,方便查看哪些违例了。

 

三、解决跨时钟域违例

1、set false path

(1)复位信号,选择point到point,否则所有信号都 false了

(2)跨时钟域信号,可以选择clock到clock。

2、Set multicycle

  两级寄存器之间有复杂的组合逻辑,导致延迟可能超过1个时钟周期。

(1)修改建立时间:set_multicycle_path -from $from_list -to $to_list <N>,建立时间采样沿在N处,建立时间OK了

(2)保持时间采样沿在N-1处,要求上一个数据的结束位置要在这,太难了,很可能报告时序违例,因此要把保持时间推回原先的采样沿0时刻位置:set_multicycle_path -from $from_list -to $to_list-hold <N-1>,还不行就<N-2>、<N-3>

 

 

四、解决同时钟域违例

1、synthesis策略

2、Implementation策略

3、布局布线物理优化(div_timing)

①扇出优化(设置post_place phy_opt)

  和左侧相比,右边的白线被分割为多个起点扇出,减少了扇出延时。蓝线为优化前的效果。

②布局优化

  如果一些较长的关键路径存在,布局工具会自动的进行从新规划布局方案使得路径变短,从而优化时序。

 ③布线优化

 

④HOLD FIX优化

⑤Retiming优化

 4、插入流水线寄存器

(1)除法器IP核里增大latency,会给第一个计算结果带来延迟,但是增加了时序余量,改善了时序。

(2)组合逻辑带来延时,采用流水线打拍来改变代码,增大了latency,改善了时序。

`timescale 1ns / 1ps
//**************************************************************************
// *** 名称 : top_encode.v
// *** 作者 : xianyu_FPGA
// *** 博客 : https://www.cnblogs.com/xianyufpga/
// *** 日期 : 2020-04-12
// *** 描述 : 流水线案例,流水线优化后
//**************************************************************************
module top_encode
//========================< 端口 >==========================================
(
//input -----------------------------------------
input   wire                sysclk_in           ,
input   wire                pkg_valid           ,
input   wire    [15:0]      in_data0            ,
input   wire    [15:0]      in_data1            ,
input   wire    [15:0]      in_data2            ,
input   wire    [15:0]      in_data3            ,
input   wire    [15:0]      in_data4            ,
input   wire    [15:0]      in_data5            ,
input   wire    [15:0]      in_data6            ,
input   wire    [15:0]      in_data7            ,
//output ----------------------------------------
output  reg                 o_encode_valid      ,
output  reg     [31:0]      o_encode
);
//========================< 信号 >==========================================
//reg -------------------------------------------
reg                         pkg_valid_r         ;
reg     [15:0]              in_data0_r          ;
reg     [15:0]              in_data1_r          ;
reg     [15:0]              in_data2_r          ;
reg     [15:0]              in_data3_r          ;
reg     [15:0]              in_data4_r          ;
reg     [15:0]              in_data5_r          ;
reg     [15:0]              in_data6_r          ;
reg     [15:0]              in_data7_r          ;
//pll -------------------------------------------
wire                        sclk                ;
wire                        clk150              ;
wire                        clk300              ;
//no pipelined ----------------------------------
wire    [15:0]              code_0              ;
wire    [15:0]              code_1              ;
wire    [15:0]              code_2              ;
wire    [15:0]              code_3              ;
wire    [15:0]              code_4              ;
wire    [15:0]              code_5              ;
wire    [15:0]              code_6              ;
wire    [15:0]              code_7              ;
wire    [31:0]              code_sum            ;
//pipelined -------------------------------------
reg     [15:0]              code_0_r            ;
reg     [15:0]              code_1_r            ;
reg     [15:0]              code_2_r            ;
reg     [15:0]              code_3_r            ;
reg     [15:0]              code_4_r            ;
reg     [15:0]              code_5_r            ;
reg     [15:0]              code_6_r            ;
reg     [15:0]              code_7_r            ;
reg     [31:0]              code_sum_r          ;
reg                         pkg_valid_rr        ;
reg                         pkg_valid_rrr       ;
//==========================================================================
//==    pll
//==========================================================================
clk_gen clk_gen
(
    .clk_out1               (clk150             ),
    .clk_out2               (clk300             ),
    .clk_in1                (sysclk_in          )
);
assign sclk = clk150;
//==========================================================================
//==    no pipelined
//==========================================================================
always @(posedge sclk) begin
    pkg_valid_r <=  pkg_valid;
    in_data0_r  <=  in_data0;
    in_data1_r  <=  in_data1;
    in_data2_r  <=  in_data2;
    in_data3_r  <=  in_data3;
    in_data4_r  <=  in_data4;
    in_data5_r  <=  in_data5;
    in_data6_r  <=  in_data6;
    in_data7_r  <=  in_data7;
end

assign code_0 = in_data0_r | in_data7_r;
assign code_1 = in_data1_r | in_data6_r;
assign code_2 = in_data2_r | in_data5_r;
assign code_3 = in_data3_r | in_data4_r;
assign code_4 = in_data0_r + in_data1_r + in_data2_r + in_data3_r;
assign code_5 = in_data1_r + in_data2_r + in_data3_r + in_data4_r;
assign code_6 = in_data2_r + in_data3_r + in_data4_r + in_data5_r;
assign code_7 = in_data3_r + in_data4_r + in_data5_r + in_data6_r;

assign code_sum = code_0 + code_1 + code_2 + code_3 + code_4 + code_5 + code_6 + code_7;

always @(posedge sclk) begin
    o_encode_valid <= pkg_valid_r;
    o_encode <= code_sum;
end
/*
//==========================================================================
//==    pipelined
//==========================================================================
//一级寄存器
always @(posedge sclk) begin
    code_0_r <= code_0;
    code_1_r <= code_1;
    code_2_r <= code_2;
    code_3_r <= code_3;
    code_4_r <= code_4;
    code_5_r <= code_5;
    code_6_r <= code_6;
    code_7_r <= code_7;
end

//二级寄存器
always @(posedge sclk ) begin
    code_sum_r <= code_0_r + code_1_r + code_2_r + code_3_r + code_4_r + code_5_r + code_6_r + code_7_r;
end
//==========================================================================
//==    信号对齐
//==========================================================================
always @(posedge sclk ) begin
    pkg_valid_rr <= pkg_valid_r;
    pkg_valid_rrr <= pkg_valid_rr;
end
//==========================================================================
//==    输出端口
//==========================================================================

always @(posedge sclk) begin
    o_encode_valid <= pkg_valid_rrr;
    o_encode <= code_sum_r;
end
*/


endmodule

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STA时序分析相关书籍有很多,以下介绍几本比较常用的: 1.《ASIC和FPGA设计的时序分析和优化》 该书由加州大学圣地亚哥分校教授Edward A. Lee所著,详细介绍了ASIC和FPGA设计的时序分析和优化技术。书中介绍了从时钟分析到时序优化的整个设计过程,内容丰富、通俗易懂,适合初学者和从事ASIC和FPGA设计的工程师阅读。 2.《时序分析与优化:原理、工具与方法》 该书由美国东北大学教授Steven M. Rubin所著,介绍了时序分析和优化技术的原理、工具和方法,涵盖了电子设计自动化(EDA)工具、时钟与时序分析、信号完整性分析、时序优化等方面。深入浅出地讲解了时序分析与优化的基本概念和技术,是一本较为综合的时序分析与优化参考书。 3.《高速数字系统的时序设计》 该书由美国约翰·霍普金斯大学教授Timothy J. Schultz所著,主要介绍了高速数字系统的时序设计技术。书中涉及了数字系统的时序分析、时钟布局、时序优化、稳定性分析等方面的内容,并附有大量的实例,使读者更好地理解和掌握高速数字系统的时序设计。 以上是一些比较常用的STA时序分析相关书籍,读者可以根据自己的需求选择适合自己的参考书。 ### 回答2: STA (Static Timing Analysis)时序分析是集成电路设计中必不可少的一道工序,其主要任务是计算设计的最坏时延、时序路径、安全裕量等信息来保证芯片的工作速度和正确性。在STA时序分析这个领域中,有许多值得关注的书籍,以下是其中的几本: 1.《STA和相关的时序分析方法》:本书全面介绍了STA和相关的时序分析方法,从基本概念到实际应用都有详细的阐述,非常适合初学者。 2.《ASIC和FPGA的时序分析:基础和实践》:本书首先介绍了时序分析的基础知识,然后介绍了ASIC和FPGA平台的不同点,分别从不同平台的角度讲解了时序分析的相关内容。 3.《高速信号传输与信噪比分析》:本书主要介绍了高速信号传输技术及其相关问题。其中,有一部分内容是关于时序分析的,非常值得一看。 4.《时序分析:原理与实践》:本书从初级到高级的层次分别介绍了时序分析的原理和实践。书中还给出了大量的实例,有利于巩固理论知识并提高实践能力。 以上是我对STA时序分析相关书籍的一些看法,望能对大家有所帮助。 ### 回答3: STA时序分析是硬件设计中非常重要的工具。它可以评估电路中的信号传输速度和准确度,从而确保电路的可靠性和稳定性。在学习STA时序分析时,需要找一些相关的书籍来帮助自己掌握理论和实践技巧。 以下是一些推荐的STA时序分析相关书籍: 1. 《时序分析与优化:基于IR的方法》(Timing Analysis and Optimization:Based on IR Method)。 这本书是由美国加州大学伯克利分校的教授Jin Hu和理查德·欧文斯(Richard Owens)合作编写的。它主要介绍了基于IR的时序分析和优化技术,从而为读者提供了一个深入了解STA的框架。书中包含了各种不同的技术,包括时序图、时序检查、时序优化等。读者可以通过阅读这本书来掌握STA的核心概念和技术。 2. 《高速数字信号传输:理论与STA应用》(High-Speed Digital System Design: A Handbook of Interconnect Theory and Design Practices with Emphasis on ISI Mitigation and Signal Integrity)。 这本书是由美国加州理工学院教授埃里克·韦斯特曼(Eric Westerman)编写的。它主要介绍了高速数字信号传输方面的理论和技术,并强调了如何减轻ISI和保持信号完整性。这本书不仅提供了读者理解高速数字信号传输的关键概念,还包含了实践中常见的STA技术。 3. 《数字IC时序与分析》(Digital IC Timing and Analysis)。 这本书是由美国加州大学圣塔芭芭拉分校的教授Christophe Basso编写的。它主要介绍了数字IC时序STA的理论和实践技能。这本书具有清晰的结构和易读的写作风格,涉及了时序设计基础原理、设计验证方法和常见问题的排查等内容。它为读者提供了全面理解数字IC设计的核心知识。 通过阅读以上任何一本书籍,你可以深入了解STA时序分析的基础概念、技术和实践技巧,从而更好地应用这一工具来提高电路设计的可靠性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值