Скажем, мне нужен сигнал для представления чисел от 0 до 5; очевидно, для этого требуется 3 бита std_logic (т.е. если MAXVAL = 5, то битовая ширина = {wcalc "floor(logtwo($MAXVAL))+1"
}).
Я знаю, что могу:
SIGNAL myLogicVector : STD_LOGIC_VECTOR(2 downto 0) := 5;
в котором я бы явно указал массив из трех «битов» std_logic и установил начальное значение; тогда я мог бы использовать ОТЧЕТ, чтобы распечатать длину (в данном случае 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
и 'range
только для массивов (понимание атрибутов VHDL), тогда как целое число (натуральное) не является массивом - это число :) (вопрос о векторном целочисленном преобразовании VHDL)
Опять же, я знаю, что мог бы использовать log2 (Вычисление ширины беззнаковой переменной из максимального значения?) - но мне бы хотелось просто быстро увидеть (во время синтеза), сколько« битов » 'синтезатор', выделенный для окончательного синтезируемого проекта, и, следовательно, примерное количество, которое будет использовано с точки зрения конечных ресурсов ПЛИС (, особенно если бы я использовал 'generics', чтобы каким-то образом вычислить конкретное максимальное значение для целого числа em >).
Что ж, заранее спасибо за любые отзывы, Ура!
РЕДАКТИРОВАТЬ: немного контекста: я использую ISE Webpack 9.2; Я пытаюсь использовать «общие» переменные / константы в качестве параметров, а затем использовать уравнения для вычисления максимальных значений счетчиков. Этот расчет, я полагаю, происходит во время «компиляции» (который в ISE будет «синтезировать», а не «реализовать дизайн»), поэтому именно здесь я хочу, чтобы сообщения отчета появлялись (и я фактически получил их так, для собственно std_logic_vector, в журнале синтеза - однако те же сообщения отчета для меня появляются и при запуске поведенческой симуляции, и это нормально).
И цель этих сообщений отчета - убедиться, что мои уравнения в порядке, и что синтезатор не будет пытаться вывести 32-битный счетчик - даже если я хочу считать только от 0 до 5 :)
std_logic_vector(to_unsigned(5, x'length)
» - но тогда вам нужно указать ширину в битах вручную; В противном случае я искал способ, чтобы синтезатор сообщал мне автоматически необходимую разрядность :) Ура! - person sdaau   schedule 04.03.2011