Используйте сигнал уже установленного модуля - PullRequest
0 голосов
/ 28 марта 2019

У меня есть несколько блоков, разработанных другим человеком (core.sv и другие), которые я не могу изменить, и мне нужно значение для двух разных файлов.

Могу ли я создать экземпляр "core.sv" воба (riscv_top_tb.sv и tracelog.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 голосов
/ 28 марта 2019

Вы не можете создать экземпляр файла в любом месте.Вы можете создать экземпляр модуля .Модуль может быть создан внутри другого модуля .Таким образом, вы строите иерархию из модуля экземпляров .

Всегда есть модуль (ы) верхнего уровня, который не был создан чем-либо еще или определен другими средствами.Ваша иерархия начинается с этого модуля и распространяется на другие экземпляры.

Testbench обычно создается как часть этой иерархии (хотя он может иметь свою собственную вершину).

Вы можете создавать экземпляры одного и того же модуля в разных иерархиях или несколько раз в одной и той же иерархии (варьируяимена экземпляров).

Из тестового стенда вы можете получить доступ к переменным в любой части иерархии, используя перекрестные ссылки на модули (xmr).Вам просто нужно указать иерархический путь к интересующему вас экземпляру int.

Итак, отвечая на ваш вопрос: да, вы можете создавать экземпляры одного и того же core модуля в разных иерархиях.Однако будет два разных экземпляра с разными уровнями иерархии с их собственными входами, выходами, переменными и параметрами.У них будут разные пути к экземплярам (несмотря на то, что вы называете локальные экземпляры одинаковыми), и им потребуются разные пути доступа xmr к их внутренним компонентам.

0 голосов
/ 28 марта 2019

Я не уверен, что вы пытаетесь сделать, но очень похоже, что вы пытаетесь скопировать файл как в 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)
    );

Вам по-прежнему приходится обрабатывать объявления сигналов, которые вы можете добавить в этот файл.

...