Попробуйте выполнить приведенный ниже код, чтобы исправить проблему:
import warnings
warnings.filterwarnings(action="ignore", module="scipy", message="^internal gelsd")
Да, вы можете, и я считаю это лучшей практикой - это наименьшая работа, лучшее понимание, простота в обслуживании и самый чистый дизайн.
Трюк состоит в том, чтобы объявить типы, общие для всего вашего проекта, в пакет (я обычно называю его «Common» :-) и добавляю use work.Common.all
до объявления объекта AND у каждого клиента этого объекта.
Например:
package Common is -- untested...
type my_enum_type is (r1, r2, r3);
-- (optional) useful tools
function to_slv (e : my_enum_type) return std_logic_vector;
function to_enum (s : std_logic_vector(my_enum'length downto 0))
return my_enum_type;
end Common;
package body Common is
-- subprogram bodies here
end Common;
Теперь, когда вы добавляете значение в перечисление, вы ТОЛЬКО изменяете «Common» и перестраиваете дизайн, в то время как те, кто придерживается общепринятых правил, все еще пытаются идентифицировать каждый порт и сигнал, где им приходится увеличивать диапазон своего «std_logic_vector» на 1.
Хорошо работает и для интерфейсов шины, где запись в каждом направлении скрывает все сигналы индивидуальной шины и подтверждения.
Вам придется сражаться с мозговыми инструментами, такими как генератор автоматических тестовых стендов Xilinx, который будет успешно переводить ВСЕ ваши типы портов - целые или булевы, а также custom - в std_logic (_vector), а затем не скомпилировать. Просто переведите их снова.
Вы все же можете сделать случай, когда на самом верхнем уровне все внешние выводы FPGA все равно должны быть основаны на std_logic. И если вам когда-нибудь понадобится смоделировать постсинтезную версию вашего дизайна, вам либо нужно будет жить с портами std_logic_vector, либо добавить простую оболочку для преобразования из одной формы в другую.
slv_enum <= to_slv(my_enum);
– Brian Drummond 1 June 2013 в 17:16'pos'
и'val'
и numeric_std.unsigned, поэтому телоto_enum
может быть простоreturn my_enum_type'val(unsigned(s));
– Brian Drummond 1 June 2013 в 17:35