variables - 对象已使用但未声明

标签 variables vhdl quartus hardware

我知道这是一个相当常见的问题。不管怎样,在浏览了论坛后,对于给定的 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

是否有一种将变量分配给端口的正确方法,而我缺少这种方法?

最佳答案

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

话虽如此,我认为您的代码不会按照您的想法行事。我发现您开始使用 signal对于 R1您应该避免使用variable直到您充分理解信号和变量之间的差异。还有其他现有问题可以解决此问题。

关于variables - 对象已使用但未声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46791502/

相关文章:

variables - 使用选择器的名称作为 SASS 中变量的值

bash - 如何在 bash 中转义用户输入变量中的正斜杠?

JavaScript 函数 "X - Y = Z"返回 Y 作为 Z 值

verilog - 在 Intel Quartus 中,我可以使用字符串参数初始化 RAM 吗?

c - unsigned long int 接受超出范围的值

vhdl - 将泛型传递给记录端口类型

vhdl - 使用复位逻辑与信号初始值之间的区别

vhdl - 敏感列表中的哪个信号触发进程

fpga - Quartus:从外部文件添加依赖项

vhdl - 如何检查VHDL中的 "ZZZZ"输入?