2017-10-17 21 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などに使い始めることをお勧めします。variableを使用しないでください。これに対処する他の既存の質問があります。

+0

yup @scary_jeff、私はちょうど試しと試しで試してみて、どのような回路が得られるか見てみました。ありがとうございました。 –

+0

@SaiKamat scary_jeffとは、A xor A = 0なので定数「0」になるので、ここに回路がないということです。 –

0

R4は、コード内で宣言した変数です。それはendif文の外側で使用することはできません。なぜデバイスがエラーメッセージを表示しているのですか?このエラーを取り除くために、R4をもう一度Q < = R4の外で宣言し、endifステートメントの内側に宣言することができます。

関連する問題