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

用verilog在实现硬件上实现零点几秒的延时,如实现0.3秒或0.5秒,应该怎样写出一个延时的程序块?... 用verilog在实现硬件上实现零点几秒的延时,如实现0.3秒或0.5秒,应该怎样写出一个延时的程序块? 展开
 我来答
cjswolf
2012-04-16 · 超过35用户采纳过TA的回答
知道答主
回答量:91
采纳率:0%
帮助的人:33.3万
展开全部
硬件上是不支持延时多少时间这种行为的。即使你在高级软件中使用delay/sleep这一类延时函数也只是对用户屏蔽了细节而已。
硬件中与延时相关的只用两种情况:1.物理延时包括布线或走线延迟门延迟2.逻辑延时即通过时钟进行延迟。用verilog能够在硬件上实现的只有通过时钟延迟
mtk40625
2012-04-18
知道答主
回答量:19
采纳率:0%
帮助的人:12.8万
展开全部
你说的这个我懂,我意思是可不可以写一段延时的代码,不用always块来实现,要是能够嵌套在always块里面,比如:
always @(posedge clk)
begin
a <= b;
一段延时程序
a <= c;
end

always @(posedge clk)
begin
if(count == xxxxxxxxxx)
a <= c;
else
a <= b;
end
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
弄月了无痕
推荐于2017-11-25 · 超过16用户采纳过TA的回答
知道答主
回答量:126
采纳率:0%
帮助的人:63.7万
展开全部
使用计数器:
首先要知道芯片晶振是多少。在这里我假如是 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模块里写延时,在另外一个模块你作为触发就是了。
当然我也是菜鸟,可能有不准确,建议你问下老师吧。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式