2015-11-26 42 views
1

下面是我的代碼:VHDL非法使用的信號declaraction

LIBRARY IEEE; 
USE IEEE.STD_LOGIC_1164.ALL; 
ENTITY work4 IS 
PORT ( CS: IN STD_LOGIC; 
     RD: IN STD_LOGIC; 
     WR: IN STD_LOGIC; 
     DATA : INOUT STD_LOGIC_VECTOR(3 DOWNTO 0)); 
END work4; 
ARCHITECTURE behav OF work4 IS BEGIN 

PROCESS(CS, RD,WR) 
SIGNAL T: STD_LOGIC_VECTOR(3 DOWNTO 0); 

BEGIN 
IF CS'EVENT AND CS = '1' THEN 
    IF WR='1' AND RD='0' THEN DATA<=T; 
    ELSE IF WR='0' AND RD='1' THEN T<=DATA; 
    END IF; 
END IF; 
END IF; 
END PROCESS; 
END behav; 

當我編譯它,我的編譯器抱怨:

Error: found illegal use of signal declaration in process declarative part 

我知道我使用了錯誤的信號,但不知道它在哪裏錯了。

有沒有人可以幫忙?在過程聲明部分

回答

3

允許進程聲明項在IEEE標準1076至2008年11.3過程聲明第2款規定:

process_declarative_item ::= 
     subprogram_declaration 
     | subprogram_body 
     | type_declaration 
     | subtype_declaration 
     | constant_declaration 
     | variable_declaration 
     | file_declaration 
     | alias_declaration 
     | attribute_declaration 
     | attribute_specification 
     | use_clause 
     | group_type_declaration 
     | group_declaration 

你可以注意到沒有列出信號的聲明。

該信號聲明可以在體系結構聲明部分(在體系結構體中的緊跟在保留字體系結構之後的最開始之前)進行。

做出這樣的轉變:

LIBRARY IEEE; 
USE IEEE.STD_LOGIC_1164.ALL; 
ENTITY work4 IS 
PORT ( CS: IN STD_LOGIC; 
     RD: IN STD_LOGIC; 
     WR: IN STD_LOGIC; 
     DATA : INOUT STD_LOGIC_VECTOR(3 DOWNTO 0)); 
END work4; 
ARCHITECTURE behav OF work4 IS 
    SIGNAL T: STD_LOGIC_VECTOR(3 DOWNTO 0); 
BEGIN 

PROCESS(CS, RD,WR) 
--SIGNAL T: STD_LOGIC_VECTOR(3 DOWNTO 0); 

BEGIN 
IF CS'EVENT AND CS = '1' THEN 
    IF WR='1' AND RD='0' THEN DATA<=T; 
    ELSE IF WR='0' AND RD='1' THEN T<=DATA; 
    END IF; 
END IF; 
END IF; 
END PROCESS; 
END behav; 

而且你的代碼分析。

(並且它是否符合你的意圖不是這個問題的一部分)。

也可以代替信號使用的變量:

LIBRARY IEEE; 
USE IEEE.STD_LOGIC_1164.ALL; 
ENTITY work4 IS 
PORT ( CS: IN STD_LOGIC; 
     RD: IN STD_LOGIC; 
     WR: IN STD_LOGIC; 
     DATA : INOUT STD_LOGIC_VECTOR(3 DOWNTO 0)); 
END work4; 
ARCHITECTURE behav OF work4 IS 
-- SIGNAL T: STD_LOGIC_VECTOR(3 DOWNTO 0); 
BEGIN 

PROCESS(CS, RD,WR) 
--SIGNAL T: STD_LOGIC_VECTOR(3 DOWNTO 0); 
    variable T: std_logic_vector (3 downto 0); 
BEGIN 
IF CS'EVENT AND CS = '1' THEN 
    IF WR='1' AND RD='0' THEN DATA <= T; 
    ELSE IF WR='0' AND RD='1' THEN T := DATA; 
    END IF; 
END IF; 
END IF; 
END PROCESS; 
END behav; 

使用的變量有一些侷限性。您不能在流程之外使用它,並且您無法在波形顯示中看到它。

+0

它的工作原理!謝謝! – icecity96