Я пишу обобщенный c множитель в VHDL, который должен быть способен создавать экземпляры для обработки любой комбинации факторов со знаком и без знака.
Насколько я понимаю, для того, чтобы сделать все 4 комбинаций умножения со знаком и без знака из единой сущности generi c, и поскольку нет типа / порта данных, который мог бы принимать значения как со знаком, так и без знака (без полиморфизма), мне нужно будет передать оба фактора как std_logic_vectors и преобразовать их как подписанный или неподписанный в зависимости от их подписи.
Чтобы скормить моему generic_multiplier подпись моих факторов, поскольку подпись является stati c, я решил передать в строках "подписанный" или "неподписанный" как обобщенные c аргументы. В зависимости от этих операторов, операторы Generate позаботятся о необходимом преобразовании типов и подпишут расширение от std_logi c до множителей.
Я бы хотел, чтобы мой модуль выдавал ошибку, если пользователь передает любую строку, другую чем "подписано" или "неподписано" в моем аргументе подписи во время создания шаблона шаблона generic c. Я могу придумать ad-ho c способ сделать это с помощью if-операторов, но есть ли какой-то способ для меня определить набор строк, универсальный для всех модулей умножения (а именно, {"Signed", "unsigned"} ), и выдает ошибку компилятора, если моя входная строка не достигает l ie в этом наборе?
Я знаю, что это возможно с контейнерами SystemVerilog или библиотеками метапрограммирования, но я не думаю, что смогу убедить моя команда использовала эти виды инструментов, и мне было интересно, существуют ли какие-либо подобные конструкции, помогающие метапрограммированию в базовом VHDL.