等待输入状态改变以启动进程

Wait for input state change to start process

我正在使用 ISE Project Navigator 软件对 Coolrunner2 (XC2C64A) CPLD 进行编程。目前,它应该仅充当 PIC32(输入 = i_pic)和 RPi CM3(输入 = i_cm)的引脚之间的逻辑或门(输出 = o_buzzer)。

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;

这给了我一个警告:

line 46: Loop body will iterate zero times.

并且在实施时不起作用。蜂鸣器仍会发出蜂鸣声,直到引脚被初始化。

使用 while 循环:

while (i_pic = 'Z') loop
    o_buzzer <= '0';
end loop;

给我:

Loop has iterated 64 times. Use "set -loop_iteration_limit XX" to iterate more."

我怎样才能让进程等到 i_pic 逻辑低而不是 Z 了?

您无法在可综合代码中测试 'Z'。您可以测试 '1'(或 'H')或 '0'(或 'L')。您无法测试 'Z'。什么硬件可以做到这一点?某种模拟硬件,而不是某种数字硬件。这就是为什么您不能在可综合代码中测试 'Z'