Я делаю проект DIY с роботами с разными датчиками. Поэтому я пытаюсь получить максимальный общий код для всех них, и здесь я перехожу к вопросу:
можно сделать что-то вроде if..generate в пакетах? следующий код неверен, но он для иллюстрации того, что было бы лучшим способом сделать это:
constant robo_type : integer := 1;
-- 6 legs, motors with encoders
6_legs_2_parts : if robo_type = 0 generate
type leg_sens is record
angle1 is array (5 downto 0) of integer range 0 to 1000;
angle2 is array (5 downto 0) of integer range 0 to 1000;
end record;
end generate;
-- 6 legs, motors with encoders
6_legs_3_parts : if robo_type = 1 generate
type leg_sens is record
angle1 is array (5 downto 0) of integer range 0 to 1000;
angle2 is array (5 downto 0) of integer range 0 to 1000;
angle3 is array (5 downto 0) of integer range 0 to 1000;
end record;
end generate;
-- 4 legs motors, encoders & current
4_legs_2_parts : if robo_type = 2 generate
type leg_sens is record
angle1 is array (3 downto 0) of integer range 0 to 1000;
angle2 is array (3 downto 0) of integer range 0 to 1000;
amp1 is array (3 downto 0) of integer range 0 to 100;
amp2 is array (3 downto 0) of integer range 0 to 1000;
end record;
end generate;
Теперь я использую что-то вроде этого, и ретранслирую, что компилятор оптимизирует то, что я не использую
-- generic leg_sens for all robots
constant numAngles : integer := 4;
type leg_sens is record
angle1 is array (numAngles -1 downto 0) of integer range 0 to 1000;
angle2 is array (numAngles -1 downto 0) of integer range 0 to 1000;
angle3 is array (numAngles -1 downto 0) of integer range 0 to 1000;
amp1 is array (numAngles -1 downto 0) of integer range 0 to 100;
amp2 is array (numAngles -1 downto 0) of integer range 0 to 100;
amp3 is array (numAngles -1 downto 0) of integer range 0 to 100;
end record;
Я нашел это: https://electronics.stackexchange.com/questions/237770/vhdl-if-generate-in-the-preamble-is-it-possible но это не то, что я ищу.
Итак, я смотрю, возможно ли это сделать условий внутри пакетов, я ничего не нашел в Справочном руководстве по языку VHDL стандарта IEEE (IEEE Std 1076 ™ -2008)
Спасибо