在verilog中,我使用$fgets(xxx,'h8000_0000)
,以便xxx
从stdin获取字符串。但它使用阻塞方式,如果我不按回车键,它将不会同时运行其他人。如何使用一种简单的方法从stdin获取字符串并且它是非阻塞的?
答案 0 :(得分:1)
我原以为如果下面的代码依赖于输入字符串,那么你会希望它被阻塞。
从问题的描述中我不认为它是阻塞的,非阻塞的分配问题,而不是并行代码执行的问题。
如果代码被分成单独的always或initial块,那么它们将并行执行。
// main test program
initial begin
// ...
end
// load from command line with out halting main program
initial begin
$fgets(xxx,'h8000_0000);
end
另一个解决方案是在fgets
附近设置超时,但提到的时间是verilog模拟时间而不是实际时间,可能必须使用相当大的值才能使用户明显延迟。
initial begin
//test program
// load from command line
fork : wait_or_timeout
begin
#10ms ;
disable wait_or_timeout;
end
begin
$fgets(xxx,'h8000_0000);
disable wait_or_timeout;
end
join