verilog always中如何延时

急!!!用verilog写的程序烧进fpga后,希望在always进程中执行一段程序后延时100ns(无需太精确)左右后再执行后续程序。各位大虾帮帮忙。... 急!!!用verilog写的程序烧进fpga后,希望在always进程中执行一段程序后延时100ns(无需太精确)左右后
再执行后续程序。各位大虾帮帮忙。
展开
 我来答
du瓶邪
推荐于2016-05-20 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1.7万
采纳率:100%
帮助的人:2937万
展开全部
在模块中,源管脚(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,最大,最小和常规的路径延迟
主要定义在不同环境下的最大,最小和常规的路径延迟。
windthunder09
推荐于2016-04-17
知道答主
回答量:10
采纳率:0%
帮助的人:0
展开全部
你的时钟如果是50M的话,在5个周期后再继续主体程序就可以了
如果是其他频率时钟,执行f/10个空周期就行

always@(posedge clk50)begin
...
case()
4'd0: ..//主体
...
4'd3:state<=4'd4; //空语句延时
4'd4:state<=4'd5;
4'd5:state<=4'd6;
4'd6:state<=4'd7;
4'd7:state<=4'd8;
4'd8:...//主体
...
...

如果你不是用case的话,就简单的再写个计数延时模块,用两个使能信号连接主体也可以
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Omiliang
2009-11-01 · TA获得超过111个赞
知道答主
回答量:25
采纳率:0%
帮助的人:17万
展开全部
没有办法,没有空程序这样的东西的,只好自己设置多几个频率,或者用多几个case语句来分开,比如要延时100ns的,就
case(a)
00:if(cont==5d'100)
begin
a<=2'b01;
cont<=0;
end
else
cont<=cont+5'b1;
01:........
这样的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cxdao
2009-11-07 · 超过10用户采纳过TA的回答
知道答主
回答量:23
采纳率:0%
帮助的人:30.2万
展开全部
做一个counter
always@(posedge clk)begin
counter <= counter + 1;
end
always@(posedge clk)begin
if (counter == 5'b11111)begin
flag <= 3'b111;
end
end
always@(posedge clk)begin
if(flag == 3'b111)
your main
end
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式