关于verilog硬件实现延时的问题,急求高手解答!!!!!
用verilog在实现硬件上实现零点几秒的延时,如实现0.3秒或0.5秒,应该怎样写出一个延时的程序块?...
用verilog在实现硬件上实现零点几秒的延时,如实现0.3秒或0.5秒,应该怎样写出一个延时的程序块?
展开
3个回答
展开全部
你说的这个我懂,我意思是可不可以写一段延时的代码,不用always块来实现,要是能够嵌套在always块里面,比如:
always @(posedge clk)
begin
a <= b;
一段延时程序
a <= c;
end
always @(posedge clk)
begin
if(count == xxxxxxxxxx)
a <= c;
else
a <= b;
end
always @(posedge clk)
begin
a <= b;
一段延时程序
a <= c;
end
always @(posedge clk)
begin
if(count == xxxxxxxxxx)
a <= c;
else
a <= b;
end
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用计数器:
首先要知道芯片晶振是多少。在这里我假如是 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
首先要知道芯片晶振是多少。在这里我假如是 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模块里写延时,在另外一个模块你作为触发就是了。
当然我也是菜鸟,可能有不准确,建议你问下老师吧。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询