VHDL 非法使用信号声明
VHDL illegal use of a signal 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
我知道我用错了信号,但不知道哪里错了。
有没有人可以帮忙?
流程声明部分中允许的流程声明项在 IEEE Std 1076-2008 11.3 Process statement para 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;
变量的使用有几个限制。不能在进程外使用,也不能在波形显示中看到。
以下是我的代码:
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
我知道我用错了信号,但不知道哪里错了。
有没有人可以帮忙?
流程声明部分中允许的流程声明项在 IEEE Std 1076-2008 11.3 Process statement para 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;
变量的使用有几个限制。不能在进程外使用,也不能在波形显示中看到。