Многие из моих VHDL-конструкций основаны на циклах for for ___ generate, где я использую generate
для создания экземпляра компонента с обобщениями. Чаще всего ширина портов этих компонентов зависит от универсальных элементов, передаваемых им в цикле генерации.
В этих блоках компонентов мне часто приходится использовать атрибуты в назначениях сигналов и логике (например,my_sig'high
и my_sig'low
). Это означает, что, если мое имя сигнала очень длинное, эта техника становится очень громоздкой.
Кто-нибудь выполнял какую-либо функцию, перегружающую оператор '
? (NB я знаю, что это не оператор, я просто не могу вспомнить, что это за технический термин)
Допустим, у меня есть следующий код для регистра сдвига ...
signal my_shift_reg : std_logic_vector(my_generic_high_number downto my_generic_low_number);
...
my_shift_reg(my_shift_reg'high downto my_shift_reg'low + 1) <= my_shift_reg(my_shift_reg'hig -1 downto my_shift_reg'low);
Как вы можете надеяться, вы можете написать, что это довольно громоздко, и было бы еще сложнее, если бы мне пришлось иметь некоторую логику, чтобы вычислить, какие биты из my_shift_reg
нужно извлечь.
Это можно упростить, еслиимея функцию перегрузки для 'high
и 'low
(я знаю, что они не являются функциями, просто оставайтесь со мной ...), чтобы знать, что они эквивалентны my_shift_reg'high
и my_shift_reg'low
. Таким образом, операция присваивания может быть переписана как ...
my_shift_reg('high downto 'low + 1) <= my_shift_reg('high -1 downto 'low);
Если бы это можно было сделать, это было бы удивительно! И потенциально хорошая вещь QOL для будущих обновлений VHDL.