Использовать сигнал уже установленного модуля

У меня есть несколько блоков, разработанных другим человеком (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];

Если это невозможно, как мне это сделать?

В чем конкретно проблема с этим кодом? Обычно вы должны иметь возможность создавать столько экземпляров, сколько хотите.

mkrieger1 28.03.2019 18:39

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

dave_59 28.03.2019 18:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
2
53
2

Ответы 2

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

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

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

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

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

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

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

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

Другие вопросы по теме