关于verilog硬件实现延时的问题,急求高手解答!!!!!

用verilog在实现硬件上实现零点几秒的延时,如实现0.3秒或0.5秒,应该怎样写出一个延时的程序块?

硬件上是不支持延时多少时间这种行为的。即使你在高级软件中使用delay/sleep这一类延时函数也只是对用户屏蔽了细节而已。
硬件中与延时相关的只用两种情况:1.物理延时包括布线或走线延迟门延迟2.逻辑延时即通过时钟进行延迟。用verilog能够在硬件上实现的只有通过时钟延迟
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-18
你说的这个我懂,我意思是可不可以写一段延时的代码,不用always块来实现,要是能够嵌套在always块里面,比如:
always @(posedge clk)
begin
a <= b;
一段延时程序
a <= c;
end

always @(posedge clk)
begin
if(count == xxxxxxxxxx)
a <= c;
else
a <= b;
end
第2个回答  推荐于2017-11-25
使用计数器:
首先要知道芯片晶振是多少。在这里我假如是 30M;如果要延时0.3秒,则应该用0.3*30000000=9_000_000;例如b延时0.3秒等于a;
reg [23:0] count;
always @(posedge clk )
begin
if(count=24'd9_000_000)
count<=24'b0;
else
count<=count+1'b1;
end
always @(posedge clk )
begin
if(count==24'd9_000_000)
b<=a;
end追问

你说的这个我懂,我意思是可不可以写一段延时的代码,不用always块来实现,要是能够嵌套在always块里面,比如:
always @(posedge clk)
begin
a <= b;
一段延时程序
a <= c;
end

追答

这样的话我感觉像单片机了,就体现不出fpga的并行优势了;
而且在fpga是不赞成这样写 delay函数的,我觉得你还是在另外一个always模块里写延时,在另外一个模块你作为触发就是了。
当然我也是菜鸟,可能有不准确,建议你问下老师吧。

本回答被提问者采纳
相似回答