2015-11-26 43 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