Этот код не является VHDL в первую очередь, поэтому вам нужно беспокоиться о других вещах. (Это немного больше VHDL-подобных после редактирования)
К счастью, VHDL не имеет ничего общего с #define. Вместо этого у него есть инструменты для правильных абстракций, таких как пакеты (очень грубо говоря, пространства имен C++, но сделанные правильно), функции и процедуры.
Это позволяет писать
done <= test_zero(m);
предполагая done
сигнал (или done := test_zero(m);
, если это переменная)
test_zero является функцией, что-то вроде
function test_zero (word : in std_logic_vector) return std_logic is
begin
if word = (word'range => '0') then
return '1';
else
return '0';
end if;
end test_zero;
который (потому что он использует атрибут «range») будет работать с разными размерами «m».
В итоге вы получите набор полезных функций: храните их в пакете и используйте их во всем проекте.
пакет обычно появляется в виде двух частей: спецификации пакета (немного как заголовочный файл C сделано правильно)
package my_tools is
function test_zero (word : in std_logic_vector) return std_logic;
end my_tools;
и тела пакета, содержащего Реализации
package body my_tools is
function test_zero (word : in std_logic_vector) return std_logic is
...
end test_zero;
end my_tools;
Чтобы использовать его , он скомпилирован в библиотеку (мы будем использовать библиотеку по умолчанию «work», которая уже объявлена неявным library work;
в каждом файле VHDL). Затем вы можете выбрать либо сделать все, что в пакете, видимой в вашем коде:
use work.my_tools.all;
Или сделать только одна функция видна:
use work.my_tools.test_zero;
Или сделать это очевидным для тех, кто читает код, где таинственный " test_zero ":
done <= my_tools.test_zero(m);
Если вы использовали пространства имен C++, вы узнаете эти различные стратегии.
Что делает эквивалентные пространства имен VHDL выполненными правильно, заключается в том, что компилятор VHDL использует эти объявления для автоматического отслеживания зависимостей и компиляции правильных битов вместо необходимости использования дополнительных #includes и внешних инструментов, таких как make-файлы, которые необходимо синхронизировать с фактический код вручную.