Неограниченные записи VHDL в системных тестовых стендах verilog

#vhdl #system-verilog #modelsim #questasim

#vhdl #система-verilog #modelsim #questasim

Вопрос:

Тестируемый проект написан на языке VHDL и использует неограниченные записи, подобные этой, для своих портов:

 type forward_stream is record
    data     : std_ulogic_vector;
    -- further members
    ...
end record;
  

Теперь эти порты должны управляться с тестового стенда systemverilog. Есть ли какой-либо способ использовать тип записи vhdl для сигналов тестового стенда? Если да, то как мне ограничить запись в systemverilog?

Или я должен создать пакет VHDL, который ограничивает запись и предоставляет ее в качестве типа для использования в тестовом стенде?

Поскольку поддержка HDL в значительной степени варьируется в зависимости от инструментов, я спрашиваю, в частности, о questasim (старший брат modelsim, тот же поставщик, поэтому предположительно несколько нисходящая совместимость).

Обновить

Я собрал следующее из руководства пользователя Questa SIM для версии 10.4:

  • Запись сопоставляется со структурой / упакованной структурой (таблица 9-5)
  • Подтипы не указаны в таблице 9-5

Я пытался:

  1. использование подтипа в system verilog для подключения к порту неограниченного типа
  2. использование подтипа в system verilog для подключения к порту неограниченного типа с ограничениями
  3. использование подтипа в system verilog для подключения к порту подтипа
  4. использование неограниченного типа (без ограничений) в system verilog для подключения к порту неограниченного типа с ограничениями.

Пример кода:

VHDL:

 library IEEE;
use IEEE.std_logic_1164.all;

package module_crosslanguage_pkg is
    type t is record
        s : std_ulogic_vector(2 downto 0);
        c : std_logic_vector;
    end record;

    subtype t_s is t(c(1 downto 0));
end package;

use work.module_crosslanguage_pkg.all;

entity dummy_test is
    port(a : in t);                -- 1.
    port(a : in t(c(1 downto 0))); -- 2.
    port(a : in t_s);              -- 3.
    port(a : in t(c(1 downto 0))); -- 4.
end entity;

architecture a of dummy_test is
begin
end;
  

Системный журнал проверки подлинности

 module modulebay_testbench();

import module_crosslanguage_pkg::*;

    t_s testsignal;
    t testsignal2;

    dummy_test u(.a(testsignal)); -- 1., 2., 3.
    dummy_test u(.a(testsignal2)); -- 4.
endmodule;
  

Ошибка всегда Fatal: (vsim-3362) The type of VHDL port 'a' is invalid for Verilog connection (1st connection).

Комментарии:

1. Это полностью вопрос Questasim. Смотрите Стандарт IEEE Std 1076-2008 14.2 Разработка иерархии проектирования, цитируемые пункты 7 и 8): * Аналогичным образом, средства, с помощью которых объекты интерфейса верхнего уровня связаны с внешней средой иерархии, также определяются реализацией, поддерживающей объекты интерфейса верхнего уровня.

Ответ №1:

Да, смотрите раздел Общий доступ к пользовательским типам в руководстве пользователя Questa. Здесь показано, как импортировать пакеты, определенные на одном языке, и использовать / импортировать их на другом.

Комментарии:

1. Как получить «да» на три вопроса? Также есть два подраздела для совместного использования пользовательских типов , с использованием общего пакета VHDL и с использованием общего пакета System Verilog . Что означает «Да»?

2. Да, это был основной смысл вашего вопроса. Вы можете использовать пакет VHDL в вашем тестовом стенде SystemVerilog. И да, на вопрос с практическими рекомендациями, указав вам на руководство. И да, возможно, вам придется создать отдельный пакет VHDL, чтобы соответствовать требованиям для импорта в SystemVerilog.

3. Не мой вопрос, и в чем был основной смысл трех вопросов OP?

4. Привет, Дэйв, я надеялся получить от тебя ответ, поскольку у тебя, похоже, есть некоторые идеи. Что касается руководства: я просмотрел его перед публикацией, и оно не помогает с неограниченными векторами. Я обновил то, что пробовал, если у вас есть какие-либо другие идеи о том, как заставить это работать (кроме написания оболочки на VHDL, которая содержит полностью ограниченную запись в качестве интерфейса), любые идеи были бы высоко оценены. К сожалению, examples / mixedlang также не помогли.

5. Похоже, Questa может не поддерживать комбинацию записи с неограниченным массивом на границе языка. Возможно, вам придется создать отдельный ограниченный тип. Извините, я недостаточно хорошо знаю VHDL, чтобы предложить вам обходной путь.