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、延迟反标注