#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
Я пытался:
- использование подтипа в system verilog для подключения к порту неограниченного типа
- использование подтипа в system verilog для подключения к порту неограниченного типа с ограничениями
- использование подтипа в system verilog для подключения к порту подтипа
- использование неограниченного типа (без ограничений) в 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, чтобы предложить вам обходной путь.