目录

时序和延时

目录

时序和延时

1、延迟模型的类型

verilog有三种类型的延迟模型:分布延迟 、 集总延迟 、 路径延迟(pin to pin)

1.1、        分布延迟

分布延迟是在每个独立元件的基础上进行定义的。

module    M
    (
        output    wire    out    ,
        
        input     wire    a      ,
        input     wire    b      ,
        input     wire    c      ,
        input     wire    d
    );

    wire    e,f    ;
    
    and #5     a1(e,a,b)    ;
    and #7     a2(f,c,d)    ;
    and #4     a3(out,e,f)  ;

endmodule


//.............................................
module    M
    (
        output    wire    out    ,
        
        input     wire    a      ,
        input     wire    b      ,
        input     wire    c      ,
        input     wire    d
    );

    wire    e,f    ;
    
    assign #5    e = a & b    ;
    assign #7    f = c & d    ;

    assign #4    out = e & f    ;            

endmodule

1.2、        集总延迟

集总延迟是在每个独立模块的基础上定义的。

module    M
    (
        output    wire    out    ,
        
        input     wire    a      ,
        input     wire    b      ,
        input     wire    c      ,
        input     wire    d
    );

    wire    e,f    ;
    
    and        a1(e,a,b)    ;
    and        a2(f,c,d)    ;
    and #11    a3(out,e,f)  ; //延迟只在输出门外

endmodule

1.3、        路径延迟

可以查阅数据手册直接获得标准组件的引脚到引脚的延迟(路径延迟)。

2、路径延迟建模

2.1、        specify块

连接方式:

并行连接:=>

全连接   :*> ( in 和 out 两两连接 )

module    M
    (
        output    wire    out    ,
        
        input     wire    a      ,
        input     wire    b      ,
        input     wire    c      ,
        input     wire    d
    );

    wire    e,f    ;

    specify
    
        (a => out)    =    9    ;    
        (b => out)    =    9    ;   
        (c => out)    =    11   ;   
        (d => out)    =    11   ;   

    endspecify
    
    and        a1(e,a,b)    ;
    and        a2(f,c,d)    ;
    and        a3(out,e,f)  ; 

endmodule

specparam

specify

    specparam    d_to_q      =    9     ;
    specparam    clk_to_q    =    11    ;

    (d   => q) = d_to_q      ;
    (clk => q) = clk_to_q    ;

endspecify

条件路径延迟

module    M
    (
        output    wire    out    ,
        
        input     wire    a      ,
        input     wire    b      ,
        input     wire    c      ,
        input     wire    d
    );

    wire    e,f    ;

    specify
    
        if( a == 1'b1 )
            (a => out) = 9 ;
        if( ~a == 1'b1 )
            (a => out) = 11 ;
        if( b & c )
            (b => out) = 9    ;
        if( ~(b & c) )
            (b => out) = 13    ;

        if( {c,d} == 2'b01 )
            (c,d *> out) = 11    ;
        if( {c,d} != 2'b01 )
            (c,d *> out) = 13    ;

    endspecify
    
    and        a1(e,a,b)    ;
    and        a2(f,c,d)    ;
    and        a3(out,e,f)  ; 

endmodule

3、时序检查

3.1、setup 和 hold检查

建立时间检查

specify
    
     $setup(data,posedge clk,3)    ;     //3是需要的最小建立时间  

endspecify

保持时间检查

specify
    
    $hold(posedge clk ,data,5)    ;//5是最小保持时间

endspecify

3.2、width检查

脉冲宽度检查

specify

    $width(posedge clk , 6 )    ;

endspecify

4、延迟反标注