我知道这是一个相当普遍的问题。无论如何,通过论坛,对于给定的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
是否有正确的方法将变量分配给端口,我错过了?
答案 0 :(得分:2)
R4
被声明为进程声明区域中的变量。它在您的流程之外是不可见的,因此您的工具会向您提供您提供的错误。如果您在流程中移动行Q<=R4;
,则在end if;
之后,错误应该消失,因为此时变量仍然可见。
话虽如此,我认为您的代码不会按照您的想法行事。我发现您开始使用signal
作为R1
等等。在您充分了解信号和变量之间的差异之前,您应该避免使用variable
。还有其他一些问题可以解决这个问题。
答案 1 :(得分:0)
R4是您在代码中声明的变量。它不能在endif声明之外使用。所以这就是为什么你的设备给你一个错误按摩。要删除此错误,您可以在Q&lt; = R4之外和endif语句内再次声明R4。