【问题标题】:Wait for input state change to start process等待输入状态改变开始进程
【发布时间】:2019-09-02 14:35:48
【问题描述】:

我正在使用 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;

这给了我一个警告:

第 46 行:循环体将迭代零次。

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

使用 while 循环:

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

给我:

循环已迭代 64 次。使用“set -loop_iteration_limit XX”进行更多迭代。”

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

【问题讨论】:

    标签: vhdl xilinx-ise


    【解决方案1】:

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

    【讨论】:

    • 更不用说在这个过程中,while 循环在 VHDL 中的迭代次数为 0 次 - 因此永远不应该用于可综合代码(它是一个软件概念)
    • 好的,我对 VHDL 很陌生。所以我不能做任何事情让or_process 在 100 毫秒后启动?
    • 它不能那样工作 - 这是硬件。您将如何实现等待 100 毫秒的电路? VHDL 不像编程——你需要在编写代码之前绘制硬件。
    • 对于第 46 行,请参见 IEEE Std 1076-2008, 16.8.2.4.4 Metalogical values in relational expressions “如果 VHDL 源代码包含一个等式运算符 (=),其中一个操作数是静态元逻辑值并且对于另一个操作数不是静态值,综合工具应将相等关系解释为等效于 BOOLEAN 值 FALSE。”尽管供应商提出了警告,但历史上不支持 while 条件迭代方案(IEEE Std 1076.6-2004,RTL Synthesis,撤回,8.8.9 Loop 语句)。循环受限于综合中的迭代限制。
    • @Swedgin 你可以设计一个等待 100ms 的电路——一个计数器。你需要这样做。
    猜你喜欢
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    相关资源
    最近更新 更多