我有一些由另一个人(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];
如果这不可能,我该怎么办?
答案 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访问路径来访问它们的内部。