verilog always语句中怎么实现延时一定时间100ns左右?

 我来答
淋漓尽致的love
推荐于2019-11-09 · TA获得超过1.2万个赞
知道小有建树答主
回答量:292
采纳率:100%
帮助的人:22.6万
展开全部

在模块中,源管脚(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,最大,最小和常规的路径延迟
主要定义在不同环境下的最大,最小和常规的路径延迟。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式