Допустим, мне нужен сигнал для представления чисел от 0 до 5; очевидно, для этого требуется 3 бита std_logic ( т.е. если MAXVAL = 5, то битовая ширина = { wcalc "floor (logtwo ($ MAXVAL)) + 1"
} ).
Я знаю, что могу сделать:
SIGNAL myLogicVector : STD_LOGIC_VECTOR(2 downto 0) := 5;
, в котором я бы явно указал массив из трех «битов» std_logic и установил начальное значение; тогда я мог бы использовать REPORT, чтобы распечатать длину (в данном случае 3):
report("Bit width of myLogicVector is "& integer'image(myLogicVector'length));
Пока все хорошо. Но, допустим, вместо этого я использую целочисленный (числовой) тип:
SIGNAL myInteger : NATURAL range 0 to 5 := 5;
Я предполагаю, что здесь 'компилятор' ('синтезатор') автоматически сделает вывод, что ему требуется 3 бита длины хранения, поскольку это целое число имеет значения от 0 до 5. Если это так, мой вопрос : можно ли каким-то образом распечатать эту битовую ширину / длину / размер в ОТЧЕТЕ?
Уловка, конечно же, в том, что что-то вроде этого:
report("Bit width of myInteger is "& integer'image(myInteger'length));
... не удастся (скажем, с " HDLParsers: 3389 - Префикс длины атрибута должен быть объектом массива ") , поскольку, насколько я понимаю, все эти атрибуты вроде 'length
и '
Ура!
РЕДАКТИРОВАТЬ: немного контекста: я использую ISE Webpack 9.2; Я пытаюсь использовать «общие» переменные / константы в качестве параметров, а затем использовать уравнения для вычисления максимальных значений счетчиков. Этот расчет, я полагаю, происходит во время «компиляции» (который в ISE будет «синтезировать», а не «реализовать дизайн»), и поэтому именно здесь я хочу, чтобы сообщения отчета появлялись ( и я фактически получил их так, для собственно std_logic_vector, в журнале синтеза - однако те же сообщения отчета для меня появляются и при запуске поведенческой симуляции, и это нормально ).
И цель этих сообщений отчета - убедиться, что и мои уравнения в порядке, и что синтезатор не будет пытаться вывести 32-битный счетчик - даже если я хочу считать только от 0 до 5: )