微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 时序约束的问题

时序约束的问题

时间:10-02 整理:3721RD 点击:
我的系统中,输入时钟为ddr_ck/ddr_ckn,经过dcm产生270度的相移,输出为clk1X。
clk1X作为整个系统的工作时钟。要求ddr_ck/ddr_ckn在400~667MHz之间。
在不做时序约束的条件下,系统的最高工作频率为365.658MHz,不满足要求。下面是综合报告的相关结果:
=========================================================================
Timing constraint: Default period analysis for Clock 'ddr_ck'
  Clock period: 2.735ns (frequency: 365.658MHz)
  Total number of paths / destination ports: 8426 / 1193
-------------------------------------------------------------------------
Delay:               2.735ns (Levels of Logic = 3)
  Source:            ddr_ana/phy_addr_19 (FF)
  Destination:       ddr_ana/dout_31 (FF)
  Source Clock:      ddr_ck rising +270
  Destination Clock: ddr_ck rising +270
  Data Path: ddr_ana/phy_addr_19 to ddr_ana/dout_31
                                Gate     Net
    Cell:in->out      fanout   Delay   Delay  Logical Name (Net Name)
    ----------------------------------------  ------------
     FDC:C->Q              2   0.317   0.701  ddr_ana/phy_addr_19 (ddr_ana/phy_addr_19)
     LUT6:I0->O            1   0.061   0.512  ddr_ana/_n0091_inv4 (ddr_ana/_n0091_inv4)
     LUT4:I1->O            1   0.061   0.357  ddr_ana/_n0091_inv5 (ddr_ana/_n0091_inv5)
     LUT5:I4->O           29   0.061   0.468  ddr_ana/_n0091_inv7 (ddr_ana/_n0091_inv)
     FDE:CE                    0.196          ddr_ana/dout_0
    ----------------------------------------
    Total                      2.735ns (0.696ns logic, 2.039ns route)
                                       (25.4% logic, 74.6% route)
=========================================================================
可以看到74.6%都是由于布线造成的
因此我就希望通过时序约束,来提高系统工作频率。
但是不知道该怎么加时序约束?我想约束的是clk1X,可是工具默认的时钟是ddr_ck。
请高手指教^_^

1# cuizehan

加入如下约束后:
NET "ddr_ck" TNM_NET = ddr_ck;
TIMESPEC TS_ddr_ck = PERIOD "ddr_ck" 1.5 ns HIGH 50%;
NET "ddr_ckn" TNM_NET = ddr_ckn;
TIMESPEC TS_ddr_ckn = PERIOD "ddr_ckn" 1.5 ns LOW 50%;
静态时序分析给出的报告显示,最高频率为424.809MHz,关键路径的延时为2.354ns,比综合报告给出的延时稍小,但布线延时仍然占70%以上。
关键路径实现的逻辑如下,
         always@(posedge clk1X or posedge reset ) begin
              if(reset) begin
                    phy_addr    <= 0;
                    rw          <= 0;
              end
              else begin
                       phy_addr <= (phy_addr_cs0 | phy_addr_cs1);
                       rw       <= rw_cs0 | rw_cs1;
                       if(phy_addr != 0 )
                            dout <= { 1'b0, cs_d8, cmd_d8, rw, phy_addr[31:6]};
              end
          end
不知道该怎么优化?

把数据再打一拍看看,
如果扇出大,手动或自动复制逻辑减小扇出

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top