使用邮箱进行FIFO建模

时间:2013-08-28 05:07:28

标签: system-verilog

我正在尝试了解使用邮箱的FIFO的以下代码。我可以理解其中的大部分内容,但void'(FIFO.tryput(write_data)); // nonblocking writevoid'(FIFO.tryget(read_data) ); // nonblocking read   - 无效的目的是什么?我知道什么是空白,但程序中的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

1 个答案:

答案 0 :(得分:2)

使用void'代替void将避免产生它们的模拟器发出警告;否则,2将表现相同。 根据{{​​3}},第13.4.1节,“返回值和无效函数”:

  

返回值的函数可用于赋值或   表达。调用非空函数,就好像它没有返回值一样   是合法的,但应发出警告。该功能可以用作   一个语句和返回值在没有警告的情况下被丢弃   将函数调用转换为void类型。

     

空隙'(some_function());

try_put是一个邮箱方法,它是一个非空函数,返回类型为int的值。