使用已经实例化的模块的信号

时间:2019-03-28 17:33:22

标签: verilog system-verilog

我有一些由另一个人(core.sv和其他人)设计的块,我无法修改,并且需要两个不同文件的值。

我可以同时在“ riscv_top_tb.sv和tracelog.sv”中实例化“ core.sv”吗?

这是我的TestBench文件:riscv_top_tb.sv

genvar r;
generate
  for (r = 1; r < 32; r++) begin : gen_mprf_assign   
    assign rv_vip_rf_if.x[r] = RISK_V.bancoDeRegistros.bancoReg[r];
  end : gen_mprf_assign
endgenerate


//------------------------------------------------------------------------------
// Core instance
//------------------------------------------------------------------------------
core #(.RamSize(RamSize)) RISK_V 
    (
        .CLK(CLK),
        .RESET_N(RESET_N),
        .IMEM_DIR(dir_rom),
        .IMEM_DATA(data_rom),
        .DMEM_DIR(dir_ram),
        .DMEM_DATA_R(dataR_ram),
        .DMEM_DATA_W(dataW_ram),
        .I_READ(I_READ),
        .D_READ(D_READ),
        .D_WRITE(D_WRITE)
    );

这是我的跟踪日志文件:tracelog.sv

core #(.RamSize(RamSize)) RISK_V 
    (
        .CLK(CLK),
        .RESET_N(RESET_N),
        .IMEM_DIR(dir_rom),
        .IMEM_DATA(data_rom),
        .DMEM_DIR(dir_ram),
        .DMEM_DATA_R(dataR_ram),
        .DMEM_DATA_W(dataW_ram),
        .I_READ(I_READ),
        .D_READ(D_READ),
        .D_WRITE(D_WRITE)
    );

assign mprf_int_alias.INT_00_ZERO   = '0;
assign mprf_int_alias.INT_01_RA     = RISK_V.bancoDeRegistros.bancoReg[1];
assign mprf_int_alias.INT_02_SP     = RISK_V.bancoDeRegistros.bancoReg[2];

如果这不可能,我该怎么办?

2 个答案:

答案 0 :(得分:0)

我不确定您要做什么,但是听起来很像您正在尝试将文件复制到TB和tracelog中。在这种情况下,您只需完成

`include "risk_v_instantiation.sv"

“ risk_v_instantiation.sv”文件包含以下文本:

core #(.RamSize(RamSize)) RISK_V 
    (
        .CLK(CLK),
        .RESET_N(RESET_N),
        .IMEM_DIR(dir_rom),
        .IMEM_DATA(data_rom),
        .DMEM_DIR(dir_ram),
        .DMEM_DATA_R(dataR_ram),
        .DMEM_DATA_W(dataW_ram),
        .I_READ(I_READ),
        .D_READ(D_READ),
        .D_WRITE(D_WRITE)
    );

您仍然必须处理信号声明,您可以将其添加到此文件中。

答案 1 :(得分:0)

您不能在任何地方实例化文件。您可以实例化模块。可以在另一个 module 中实例化一个模块。通过这种方式,您可以构建模块实例层次结构

总有一个顶层模块,没有其他任何实例化或通过其他方式定义。您的层次结构从此模块开始,然后向下分支到其他实例。

Testbench通常被实例化为该层次结构的一部分(尽管它可能有其自己的顶部)。

您可以在不同的层次结构中实例化同一模块,也可以在同一层次结构中实例化多个实例(实例名称不同)。

在测试台上,您可以使用跨模块引用(xmr)访问层次结构中任何部分的变量。您只需要提供您感兴趣的实例的层次结构路径即可。

因此,回答您的问题:是的,您可以在不同的层次结构中实例化相同的core 模块。但是,将有2个不同的实例,它们具有不同的层次结构,并具有各自的输入,输出,变量和参数。它们将具有不同的实例路径(尽管您为本地实例命名的名称相同),并且将需要不同的xmr访问路径来访问它们的内部。