关于specify的延迟
时间:10-02
整理:3721RD
点击:
一个简单的组合逻辑电路,用到延迟说明快;
module delay(out,a,b,c);
output out;
input a,b,c;
and a1(n1,a,b);
or o1(out,c,n1);//out=(a&b)|c
specify
(a=>out)=2;
(b=>out)=3;
(c=>out)=1;
endspecify
endmodule
下面是测试程序:
`timescale 1ns/100ps
module tp_delay;
reg a,b,c;
wire out;
parameter dely=10;
delay delay1(out,a,b,c);
initial begin
a=1'b1;b=1'b1;c=1'b0;
#dely a=1'b0;b=1'b0;
#dely c=1'b1;
end
initial $monitor($time,,,"a=%d b=%d c=%d out=%d",a,b,c,out);
endmodule
用MODELSIM仿真结果为:
t(ps) a b c out
0 1 1 0 x
100 1 1 0 1
10000 0 0 0 1
10200 0 0 0 0
20000 0 0 1 0
20100 0 0 1 1
问题是:在延迟中,究竟以哪个变量为主,定义中从a,b,c到out的延迟时间分别是2,3,1个时间单位.最初赋值a,b,c分别为1,1,0,但过了100ps,out的状态变为1,似乎以c的延迟时间.但第二个赋值开始后,a,b,c分别为0,0,0,out延迟了200,似乎又以着a的延迟时间,所以我很糊涂,请大侠指点一二.
module delay(out,a,b,c);
output out;
input a,b,c;
and a1(n1,a,b);
or o1(out,c,n1);//out=(a&b)|c
specify
(a=>out)=2;
(b=>out)=3;
(c=>out)=1;
endspecify
endmodule
下面是测试程序:
`timescale 1ns/100ps
module tp_delay;
reg a,b,c;
wire out;
parameter dely=10;
delay delay1(out,a,b,c);
initial begin
a=1'b1;b=1'b1;c=1'b0;
#dely a=1'b0;b=1'b0;
#dely c=1'b1;
end
initial $monitor($time,,,"a=%d b=%d c=%d out=%d",a,b,c,out);
endmodule
用MODELSIM仿真结果为:
t(ps) a b c out
0 1 1 0 x
100 1 1 0 1
10000 0 0 0 1
10200 0 0 0 0
20000 0 0 1 0
20100 0 0 1 1
问题是:在延迟中,究竟以哪个变量为主,定义中从a,b,c到out的延迟时间分别是2,3,1个时间单位.最初赋值a,b,c分别为1,1,0,但过了100ps,out的状态变为1,似乎以c的延迟时间.但第二个赋值开始后,a,b,c分别为0,0,0,out延迟了200,似乎又以着a的延迟时间,所以我很糊涂,请大侠指点一二.
关于specify的延迟
显示是对的;
你看,0ps时,三个信号变化,由于c是最快的,所以100ps就显示out变化;随后信号不再变化,不再输出;
10ns时,a,b变化,由于a比b快,所以200ps后,out变化。
关于specify的延迟
谢谢小编,但是我还是有些不明白.这里的延迟是什么意思.0ps时,a,b,c三个信号开始发生变化,由于,其中c变化最快,100ps后值为0,200ps后a变为1,300ps时b为1,但
由于out=(a&b)|c,应该再300ps时,out才能得到确定的值啊,这样out变化的时间不是依赖延迟最长的激励信号吗?还请小编讲解一下.
我也渴求答案阿
