Не уверен, как отключить это предупреждение в симуляторе GHDL ...
Это потому, что при 0 нс я выполняю to_integer на недопустимом значении (вероятно, "UUUU"). Ожидается несколько из этих предупреждений, пока вы не сбросите свой дизайн и не укажете что-то не так. Но если вы получаете их после сброса, у вас есть проблема.
"Предупреждения могут быть подавлены. IEEE Std 1076-2008 16.8.5.2 Допустимые изменения, пункт 2 (частично) Тела пакета для пакетов NUMERIC_BIT и NUMERIC_STD объявляют константу с именем NO_WARNING, которая имеет значение FALSE. Пользователь может установить NO_WARNING для ИСТИНЫ и повторного анализа тела пакета для подавления предупреждающих сообщений, генерируемых вызовами функций в этих пакетах, или в uncomment modelsim.ini, или в качестве значения NumericStdNoWarnings = 1. Они вызваны мета-значениями, присутствующими в знаке или без знака, причем их двоичное значение равно оценивается, как правило, при инициализации. Посмотрите на ваш компонент. "
Package numeric_std is
...
end numeric_std;
Package body numeric_std is
...
constant NO_WARNING : boolean := FALSE; -- default to emit warnings
...
end numeric_std;
На самом деле я могу исправить это предупреждающее сообщение в коде, изменив значения по умолчанию с нуля на: (DEPTH_WIDTH: integer: = 2; DATA_WIDTH: integer: = 2), а затем проверяя, что неподписанные сигналы не являются неопределенными "x", с помощью функции «is_X (…)»… я просто не знаю, является ли следующий код синтезируемым:
process(write_pointer, read_pointer)
begin
if (is_X(write_pointer) or is_X(read_pointer)) then
empty_int <= 'U';
elsif (write_pointer(AW) = read_pointer(AW)) then
empty_int <= '1';
else
empty_int <= '0';
end if;
end process;
process(write_pointer, read_pointer)
begin
if (is_X(write_pointer) or is_X(read_pointer) then
full_or_empty <= 'U';
elsif (write_pointer(AW-1 downto 0) = read_pointer(AW-1 downto 0)) then
full_or_empty <= '1';
else
full_or_empty <= '0';
end if;
end process;