2

我正在尝试使用邮箱了解以下 FIFO 代码。我可以理解其中的大部分内容,但是 void'(FIFO.tryput(write_data)); // nonblocking write- void'(FIFO.tryget(read_data) ); // nonblocking read void 的目的是什么?我知道 void 是什么,但 程序中的voidvoid'是否相同?

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
4

1 回答 1

2

使用void'而不是void将避免来自生成它们的模拟器的警告;否则, 2 的行为将相同。根据IEEE Std 1800-2012第 13.4.1 节“返回值和无效函数”:

可以在赋值或表达式中使用返回值的函数。调用一个 nonvoid 函数,就好像它没有返回值一样是合法的,但会发出警告。通过将函数调用强制转换为 void 类型,该函数可以用作语句,并且在没有警告的情况下丢弃返回值。

无效'(some_function());

try_put是一个邮箱方法,它是一个返回 type 值的非空函数int

于 2013-08-28T13:06:53.787 回答