verilog always语句中怎么实现延时一定时间100ns左右?
reg[2:0] cnt;
always@(posedge clk or nengedge reset)
if(!reset)
cnt <= 0;
else if(cnt == 5 \\(或)!reverve)这里两个竖线打出来是斜的
cnt <= 0;
else
cnt <= cnt + 1'b1;
always@(posedge clk or nengedge reset)
if(!reveive)
send <= 0;
else if(cnt == 5)
send <= 1;
else
send <= send;
在模块中,源管脚(input or inout)到目的管脚(output or inout)之间的延迟叫做模块路径延迟(module path delay)。在verilog中,路径延迟用关键字specify和endspecify表示。在这两个关键字之间的部分构成一个specify块。
specify块包含以下内容:
在模块交叉路径上定义管脚与管脚之间的延迟
在电路中进行set up time的检查
定义specparam 常量
例如:
//Pin-to-pin delays
module M (out,a,b,c,d);
output out;
input a,b,c,d;
wire e,f;
//specify block with path delay statements
specify
(a => out) = 9;
(b => out) = 9;
(c => out) = 11;
(d => out) = 11;
endspecify
//gate instantiations
and a1(e,a,b);
and a2(f,c,d);
and a3(out,e,f);
endmodule
specify块是module的一个组成部分,不能被其他的块所包含,比如说initial和always。
在specify块中,可以采用下面的几种方式来描述路径延迟:
1,并行连接,如果源和输出有相同的位数,采用并行连接的方式,例如,
a[3:0]为源,out[3:0]为输出,则可以描述为(a => out) = 9;
这与 (a[0] => out[0]) =9;
(a[1] => out[1]) =9;
(a[2] => out[2]) =9;
(a[3] => out[3]) =9;
的功能是相同的。
2,全部连接,如果源到输出之间都有相同的路径延迟,采用全部连接的方式,即
(<source_field> *> <destination_field>) = <delay_value>;
例如
(a,b *> out) =9;
(c,d *> out) = 11;
3,边沿触发条件下的路径延迟,例如
(posedge clock => (out +: in)) = (10:8)
这里,在clock的上升沿,当out从低到高变化时,延迟为10,当out从高到低变化时,延迟为8
4,有条件的路径延迟,路径延迟与输入信号的状态有关,例如
if (a) (a => out) = 9;
if (~a) (a => out) = 10;
5,上升沿,下降沿和高阻态的路径延迟
源到输出之间的延迟特性可以细分为上升沿,下降沿和高组态变化时的延迟。可以选择1,2,3,6或12个延迟参数。
6,最大,最小和常规的路径延迟
主要定义在不同环境下的最大,最小和常规的路径延迟。