Я программирую CPLD Coolrunner2 (XC2C64A) с помощью программного обеспечения ISE Project Navigator. На данный момент он должен действовать только как логический вентиль (выход = o_buzzer) между контактом PIC32 (вход = i_pic) и RPi CM3 (вход = i_cm).
o_buzzer <= i_pic or i_cm;
Проблема в том, что при подключении источника питания контакты PIC32 настраиваются как входы, поэтому CPLD воспринимает его как высокое сопротивление (Z) и выводит 1 до тех пор, пока контакты не будут настроены. Поэтому я пытаюсь позволить CPLD подождать, пока i_pic больше не будет Z
.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity or_gate is
Port ( i_pic : in STD_LOGIC;
i_cm : in STD_LOGIC;
o_buzzer : out STD_LOGIC);
end or_gate;
architecture Behavioral of or_gate is
begin
process_or : process(i_pic,i_cm)
begin
while (i_pic = 'Z') loop
end loop;
o_buzzer <= i_pic or i_cm;
end process process_or;
end Behavioral;
Это дает мне предупреждение:
строка 46: Тело цикла будет повторяться ноль раз.
А при реализации не работает. Зуммер подает звуковой сигнал до тех пор, пока контакты не будут инициализированы.
Использование цикла while:
while (i_pic = 'Z') loop
o_buzzer <= '0';
end loop;
Дает мне:
Цикл повторился 64 раза. Используйте «set -loop_iteration_limit XX», чтобы повторить больше».
Как я могу позволить процессу ждать, пока i_pic
не станет логически низким, а не Z
больше?