2017-10-17 17 views
0

나는 이것이 상당히 일반적인 질문이라는 것을 알고 있습니다. 그럼에도 불구하고 포럼을 살펴본 결과, 주어진 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

IEEE Std 1076-2008 12.2 선언 범위 * 아키텍처 본문을 제외하고 선언의 범위는 선언의 시작 부분에서 바로 닫는 선언적 영역의 끝까지 확장됩니다. * "12.3 공개 설정 "* ... 선언은 범위의 특정 부분에서만 볼 수 있으며이 부분은 선언 끝에서 시작합니다. *" "* ... 선언은 특정 부분에서 직접 볼 수 있다고합니다. 이 부분은 선언의 즉각적인 범위의 끝까지 확장된다. * " – user1155120

+0

12.1 선언 영역"* ... 하나의 선언 영역은 다음 각각의 텍스트로 구성된다 : ... h) 프로세스 문은 ... * "" – user1155120

답변

2

R4은 프로세스의 선언적 영역에서 변수로 선언됩니다. 프로세스 외부에서는 볼 수 없으므로 도구에서 오류를 제공합니다. 프로세스 내에서 Q<=R4; 행을 이동하는 경우 end if; 다음에 오류가 사라져야합니다. 변수가이 시점에서 계속 표시되기 때문입니다.

그렇다고해서 내가 생각한대로 코드가 작동한다고 생각하지 않습니다. 나는 당신이 R1 등등을 위해서 signal을 사용하기 시작했다는 것을 알았습니다. 신호와 변수의 차이를 잘 이해할 때까지 variable을 사용하지 않는 것이 좋습니다. 이 문제를 해결하는 기존의 다른 질문이 있습니다.

+0

yup @scary_jeff, 나는 단지 어떤 회로가 있는지보기 위해 시행 착오를 테스트했다. 고맙습니다. –

+0

@SaiKamat scary_jeff가 의미하는 것은 A xor A = 0이기 때문에 상수 '0'으로 줄어들 기 때문에 여기서 회로가 없다는 것입니다. –

0

R4는 코드에서 선언 한대로 변수입니다. 그것은 endif 문 밖에서 사용할 수 없습니다. 그래서 장치가 왜 당신에게 오류 마사지를 제공하는지. 이 오류를 제거하기 위해 Q < = R4 외부에서 R4를 다시 선언하고 endif 문 내에서 선언 할 수 있습니다.