2014-06-14 35 views
0

在Verilog中,我使用$fgets(xxx,'h8000_0000),以便xxx從stdin獲取字符串。但它使用阻止方式,如果我不按Enter鍵,它不會同時運行其他人。如何使用簡單的方法從stdin獲取字符串並且它是非阻塞的?來自stdin但不阻塞的Verilog fgets

回答

1

我會想如果下面的代碼依賴於輸入字符串,那麼你會希望它被阻止。

從問題的描述我不認爲這是一個阻塞,非阻塞分配問題,而不是並行代碼執行。

如果代碼被拆分成單獨的總是或初始塊,那麼它們將並行執行。

// 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