【问题标题】:Object is used but not declared对象已使用但未声明
【发布时间】:2018-03-29 05:24:28
【问题描述】:

我知道这是一个相当普遍的问题。无论如何,通过论坛,对于给定的 VHDL 代码,我无法找到令人满意的答案来解释为什么会出现以下 CT 错误。你能帮帮我吗?

VHDL 代码

library IEEE;
use IEEE.std_logic_1164.all;
entity design is
port(clk:IN std_logic;
reset:IN std_logic;
A:IN std_logic;
B:IN std_logic;
Q:OUT std_logic);
end design;

architecture behave of design is
--signal R0,R1,R2,R3,R4:std_logic;
begin
process(clk,reset)
variable R0,R1,R2,R3,R4:std_logic;
begin
if (reset='1') then
R0:='0';
R1:='0';
R2:='0';
R3:='0';
R4:='0';
elsif falling_edge(clk) then
R0:=R4;
R1:=R0 xor A;
R2:=R1 xor B;
R3:=R2;
R4:=R2 xor R3;
end if;
end process;
Q<=R4;       -- ERROR POINTED HERE
end behave;

错误:-

Error (10482): VHDL error at design.vhd(31): object "R4" is used but not declared

是否有一种正确的方法可以将变量分配给端口,而我错过了?

【问题讨论】:

    标签: variables vhdl quartus hardware-programming


    【解决方案1】:

    R4 在您的进程的声明区域中被声明为变量。它在您的流程之外是不可见的,因此您的工具会给出您给出的错误。如果您在进程中移动Q&lt;=R4; 行,在end if; 之后,错误应该会消失,因为此时变量仍然可见。

    话虽如此,我认为您的代码不会像您认为的那样做。我看到你开始使用signal 来代替R1 等。在你很好地理解信号和变量之间的区别之前,你应该避免使用variable。还有其他现有的问题可以解决这个问题。

    【讨论】:

    • 是的@scary_jeff,我只是通过反复试验来测试我得到什么样的电路。谢谢。
    • @SaiKamat 可怕的杰夫的意思是这里没有电路,因为 A xor A = 0,它减少到一个常数“0”。
    【解决方案2】:

    R4 是您在代码中声明的变量。它不能在 endif 语句之外使用。所以这就是你的设备给你一个错误消息的原因。为了消除此错误,您可以在 Q

    【讨论】:

      猜你喜欢
      • 2015-08-12
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多