2013-08-28 35 views
1

我想了解使用郵箱的FIFO的以下代碼。我可以理解它的大部分,但void'(FIFO.tryput(write_data)); // nonblocking writevoid'(FIFO.tryget(read_data)); // nonblocking read - void'的目的是什麼?我知道什麼是無效的,但在程序中是voidvoid'使用郵箱進行FIFO建模

interface fifo_channel_1 #(parameter FifoSize = 8, PtrSize = 4, 
parameter type DataType = uniType); 
DataType write_data; // packet coming from sending module 
DataType read_data; // packet going to receiving module 
bit fifo_empty, fifo_full; // FIFO status flags 

mailbox #(DataType) FIFO = new(FifoSize); // FIFO is bounded mailbox 

function automatic void Write (input DataType write_data); 
void'(FIFO.tryput(write_data)); // nonblocking write 
fifo_full = ~(FIFO.num < FifoSize); 
endfunction 

function automatic void Read (output DataType read_data); 
fifo_empty = (FIFO.num == 0); 
void'(FIFO.tryget(read_data)); // nonblocking read 
endfunction 

modport sender (input write_data, // sending module's connections 
output fifo_full, 
import Write); 
modport reader (output read_data, // reading module's connections 
output fifo_empty, 
import Read); 
endinterface: fifo_channel_1 
+0

不應該'tryput'是'try_put'嗎? – toolic

回答

2

使用的void'代替void將避免從生成它們的模擬器警告;否則,2將表現相同。 按照IEEE Std 1800-2012,13.4.1節,「返回值和無效函數」:

函數返回一個值可以在分配中使用或 表達。調用一個非空函數,就好像它沒有返回值 應是合法的,但應發出警告。該函數可以用作 的一條語句,並且丟棄的返回值不會被 將函數調用轉換爲void類型。 ('some_function());}'

try_put是一個郵箱方法,它是一個非空函數,它返回一個int類型的值。