VHDL: определение / отчет о битовой ширине / длине целого числа (по сравнению с std_logic_vector)?

Допустим, мне нужен сигнал для представления чисел от 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: )

5
задан sdaau 4 March 2011 в 16:22
поделиться