2017-10-17 207 views
0

我知道這是一個相當常見的問題。無論如何,通過論壇,我無法找到一個令人滿意的答案,爲什麼我得到以下CT錯誤,對於給定的VHDL代碼。你能幫我嗎?使用對象但未聲明

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;之後,則錯誤應該消失,因爲此時該變量仍然可見。

這樣說,我不認爲你的代碼會做你認爲它會。我看到你開始使用signalR1等。你應該避免使用variable,直到你很好地理解了信號和變量之間的差異。還有其他現有問題可以解決這個問題。

+0

@ @scary_jeff,我只是通過試驗和錯誤測試,看看我得到什麼樣的電路。謝謝。 –

+0

@SaiKamat scary_jeff意味着這裏沒有電路,因爲它減少到一個常數'0',因爲A xor A = 0。 –

0

R4是您在代碼中聲明的變量。它不能在endif聲明之外使用。所以這就是爲什麼你的設備給你一個錯誤按摩。爲了消除這個錯誤,你可以在Q < = R4之外再聲明R4,並且在endif語句中。