Параметризованный блок Specman

Мне нужно проверить параметризованный модуль в verilog, например:

module A #(PAR1, PAR2, PAR3) (/*input, outputs*/);

Этот модуль создается несколько раз с разными значениями параметров.

Мне нужно сгенерировать модуль SPECMAN, который может получать ПАРАМЕТРЫ как константы для объявления переменной/порта. Эти параметры также используются для логических вычислений.

Я не смог найти способ передать ПАРАМЕТРЫ в модуль specman, как это можно сделать в verilog.

Является ли это возможным?

Если нет - есть ли альтернативное решение?


person Lior Bekerman    schedule 13.01.2015    source источник


Ответы (3)


Невозможно передать параметры единицам измерения в e. Однако в вашем случае вы можете использовать шаблон:

template unit some_unit of (<len'type>) {
  some_sig : in simple_port of <len'type> is instance;
    keep soft some_sig.hdl_path() == "some_sig";
};

Приведенный выше код определяет шаблон для модуля, содержащего порт, длина которого указывается при объявлении экземпляра модуля. Вот как вы можете создать экземпляр двух единиц разной длины:

extend sys {
  unit1 : some_unit of (uint(bits : 2)) is instance;
  unit2 : some_unit of (uint(bits : 4)) is instance;
};

Рабочий пример можно найти на EDAPlayground.

person Tudor Timi    schedule 13.01.2015

Да, в e вы можете определить структуру или единицы template. Однако обратите внимание, что параметры будут типами, а не значениями. Например, у вас может быть такое объявление:

template unit my_unit of (<first'type>, <second'type>) like base_unit {
    ......
};

а затем вы можете создать его следующим образом:

extend sys {
    foo: my_unit of (int(bits: 16), uint) is instance;
};
person Yuri Tsoglin    schedule 13.01.2015

Вы можете получить доступ к параметрам Verilog через simple_ports из электронного кода, просто привяжите их как обычные сигналы. Но в данном случае это не поможет, потому что значения нельзя использовать в других объявлениях порта. Я предлагаю использовать предлагаемые здесь решения или сделать порты достаточно широкими, чтобы охватить все требования (MSB будут заполнены Specman 1'b0 по умолчанию).

person Thorsten    schedule 14.01.2015
comment
Делать порты достаточно широкими — не стабильное решение. Пробовали, но возникают проблемы при сравнении случайных значений. Решение параметрического типа в единице шаблона было точным. - person Lior Bekerman; 14.01.2015