Мой инструмент синтеза не поддерживает VHDL2008 полностью, и я хотел бы использовать кодовую строку типа: «a < = и bit_vector;» что в основном означает, что a = '1', если все биты в bit_vector равны '1' и '0' в противном случае. (a - std_logic, а bit_vector - std_logic_vector).Оператор vhdl «и» является однозначным
Так что я создал небольшой пакет с моим собственным "и" функции, чтобы добавить это на мой VHDL:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
package common_pkg is
function "and" (L: std_logic_vector) return std_logic; -- And all bits in a vector
end package common_pkg;
package body common_pkg is
function "and" (L: std_logic_vector) return std_logic is
variable result : std_logic := '1';
begin
for i in 0 to L'length - 1 loop
result := result and L(i);
end loop;
return result;
end function;
end package body;
Однако при составлении этого я получаю следующие ошибки:
** Error: c:\Repo\src\My_test.vhd(127): Operator "and" is ambiguous.
Feasible operators are:
(explicit) std_logic_1164."and"[STD_ULOGIC_VECTOR return STD_ULOGIC] at vhdl_src/ieee/stdlogic.vhd(140)
(explicit) common_pkg."and"[STD_LOGIC_VECTOR return STD_LOGIC] at c:\Repo\src\common_pkg.vhd(23)
** Error: c:\Repo\src\My_test.vhd(127): Type error resolving prefix expression "and" as type ieee.std_logic_1164.STD_ULOGIC.
I не может понять, как обойти это. Я могу переименовать свою функцию в «my_and», но это не совсем то, что я хочу ... Есть ли кто-нибудь, кто сделал что-то подобное этому раньше и сможет объяснить проблему и предположительно указать мне в правильном направлении?
Если я что-то отсутствует, первый выполнимо оператор (в std_logic_1164), как представляется, 2008-совместимый один вы пытаетесь переписать. – fru1tbat
Инструмент синтеза, вероятно, поддерживает унарные 'и' уже, таким образом, ошибку. Кроме того, выполнение функций, которые могут столкнуться с существующими функциями, может привести к проблемам, если один и тот же код используется в инструментах с различными уровнями поддержки VHDL-2008, таких как симулятор и инструмент синтеза. Btw. рассмотрите запись цикла как 'for i в цикле L'диапазона 'для поддержки L с любым диапазоном. –
Если вы не можете заставить унарные 'и' работать, подумайте о возврате к функции VHDL-2002 'and_reduce()' из 'ieee.reduce_pack', которая делает то же самое. –