模块即时模拟

时间:2014-09-26 16:56:30

标签: verilog

我想模拟一个具有简单Addr / Data接口的模块。我想创建一个单独的模块,作为该模块的交易者。因此,例如,我可以简单地在transactor模块中调用一个任务来执行addr和数据的写入。 e.g。

Transactor.Write_Task(0, 123); //Writes 123 to Addr 0.

我的问题是,我应该include将transactor模块包含在测试平台的顶部吗?或者,它是一种更好的方法来单独编译交易器并实例化它并将其连接起来,就像它是另一个被测单元一样? e.g:

\lib_Local_Bus.Local_Bus_Transactor Transactor
   (
    .i_LB_Clk(w_LB_Clk),
    .o_LB_CS(w_LB_CS),
    .o_LB_Wr_Rd_n(w_LB_Wr_Rd_n),
    .o_LB_Addr8(w_LB_Addr8),
    .o_LB_Wr_Data(w_LB_Wr_Data),
    .i_LB_Rd_Data(w_LB_Rd_Data),
    .i_LB_Rd_DV(w_LB_Rd_DV)
    );

我觉得简单地用include包含它更容易,但是我需要正确指出它,这可能是一个问题。通过预编译,像UUT一样对它进行实例化,并将其连接起来,代码更多,但对于发生的事情它更为直接。

1 个答案:

答案 0 :(得分:0)

经典方法是将其视为任何其他模块,这意味着它作为自己的文件存在,并且您在顶级测试平台中实例化交易器和DUT。这就是我所研究的大多数香草Verilog环境的编码方式。

模块可以提供基于队列的接口以将事务排入队列,也可以基于任务的接口,然后可以从测试中调用,例如

  initial
    begin : test_block
      Transactor.Send(data1);
      ->stimulus_complete;
    end