微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 综合报告 时序报告的时序不满足

综合报告 时序报告的时序不满足

时间:10-02 整理:3721RD 点击:
[attach]530199[/attach]
[attach]530200[/attach]                                    
  上面的是我的综合报告,-0.018显然是时序违规了,但是违规是保持时间违规  还是建立时间违规呢?
如果是保持时间违规,为什么我将 FDP  这个输入加上buf,综合后依然违规呢,还是-0.018,那位大神给指点一下啊,多谢啊,非常感激啊。
    always @(posedge rd_clk)
      begin
     if(!rst_n || empty == 1'b1)
    begin
      rd_en <= 1'b0 ;
    end
  else if(valid_temp == 1'b1)
    begin
      rd_en <= 1'b1 ;  
    end
  else
    begin
      rd_en <= 1'b0 ;
    end
      end
这个是我的rd_en处的代码



    不好意思 图片没有显示:下面是我的综合报告一处违规:
Timing constraint: Default OFFSET IN BEFORE for Clock 'pll_2clk_inst/CLKOUT1_BUF'
  Total number of paths / destination ports: 2 / 2
-------------------------------------------------------------------------
Offset:              0.803ns (Levels of Logic = 3)
  Source:            pll_inst/PLL_ADV_INSTOCKED (PAD)
  Destination:       framedeinterleave_matcher_blockdeintrleave_inst/prachblockdeinterleave_inst/rd_en (FF)
  Destination Clock: pll_2clk_inst/CLKOUT1_BUF falling
  Data Path: pll_inst/PLL_ADV_INSTOCKED to framedeinterleave_matcher_blockdeintrleave_inst/prachblockdeinterleave_inst/rd_en
                                Gate     Net
    Cell:in->out      fanout   Delay   Delay  Logical Name (Net Name)
    ----------------------------------------  ------------
    PLL_ADVOCKED        62   0.000   0.000  PLL_ADV_INST (LOCKED_OUT)
     end scope: 'pll_inst'
     begin scope: 'framedeinterleave_matcher_blockdeintrleave_inst'
     begin scope: 'prachblockdeinterleave_inst'
     LUT3:I1->O            1   0.094   0.000  rd_en_rstpot1 (rd_en_rstpot)
     FD                     -0.018          rd_en
    ----------------------------------------
    Total                      0.803ns (0.803ns logic, 0.000ns route)
                                       (100.0% logic, 0.0% route)

: L都变成了   D都变成了

你的buf是怎么加的?是不是优化掉了?



    我直接使用assign rd_en = signal_name ; 做延时
  没有使用D触发器

这样做肯定不行的。你要加入综合干预命令让综合器不对这个信号进行优化加入buff,定义信号的时候像这样写:module buffer(din,
              dout
                                                                                                                );
parameter SIGNAL_WIDTH = 1;
input[SIGNAL_WIDTH-1:0]  din;
output[SIGNAL_WIDTH-1:0] dout/*synopsys keep=1*/;
assign dout = din;
endmodule
例化该模块,就会成功加入buf,当然,你也可以不另加一个模块,直接定义信号的时候加入/*synopsys keep=1*/这个东东就行了!



    多谢小编啊!
    直接定义信号的时候加入/*synopsys keep=1*/这个东东就行了!  恕我新手啊,有点不懂,怎么直接定义啊?
   是这样定义  wire dout/*synopsys keep=1*/ ;  ?
  然后赋值;
  assign dout = din;
  再请小编答疑啊  多谢

是的,这样定义就可以,
module buffer(a,
                     b);
input a;
output b;
wire b1/*synopsys keep=1*/;
assign b1=a;
assign b = b1;
endmodule
这样综合器就会加上一个cell进行延时。



    多谢小编啊 可以加你的QQ嘛 便于直接向你请教啊?

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

网站地图

Top