我正在尝试理解以下使用邮箱的FIFO代码。我能理解大部分,但void'(FIFO.tryput(write_data)); // nonblocking write
和void'(FIFO.tryget(read_data) ); // nonblocking read
-无效的目的是什么?我知道空隙是什么,但程序中的void
和void'
是一样的吗?
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
使用void'
而不是void
将避免来自生成警告的模拟器的警告;否则,2将表现相同。根据IEEE Std 1800-2012第13.4.1节"返回值和无效函数":
返回值的函数可以用于赋值或表示调用非虚拟函数,就好像它没有返回值一样应是合法的,但应发出警告。该函数可用作语句和返回值被丢弃而不发出警告将函数调用强制转换为void类型。
void'(some_function());
try_put
是一个邮箱方法,它是一个返回类型为int
的值的非oid函数。