我正在为一个项目的七段解码器编写代码,但当我检查语法错误时,它显示了以下内容:
错误(10500(:在文本附近的sevenseg.vhd(16(处出现VHDL语法错误;用";;期望";结束";,或";(",或标识符("with"是保留关键字(,或顺序语句
错误(10500(:在文本附近的sevenseg.vhd(17(处出现VHDL语法错误;当";;期望">
我的代码:
library IEEE;
use IEEE.std_logic_1164.all;
entity sevenseg is
port (m3, m2, m1, m0:in std_logic;
out7 : out std_logic_vector (6 downto 0));
end sevenseg;
architecture ssdec of sevenseg is
signal min : std_logic_vector (3 downto 0);
begin
process(m0, m1, m2, m3)
begin
min <= m3 & m2 & m1 & m0; --concatenate m0, m1, m2, m3 into vector min
with min select --here is where the error specify
out7 <= "0111111" when "0000" | "1010", -- 0
"0000110" when "0001" | "1011", -- 1
"1010111" when "0010" | "1100", -- 2
"1001111" when "0011" | "1101", -- 3
"1100110" when "0100" | "1110", -- 4
"1101101" when "0101" | "1111", -- 5
"1111100" when "0110", -- 6
"0000111" when "0111", -- 7
"1111111" when "1000", -- 8
"1100111" when "1001"; -- 9
end process;
end ssdec;
有什么错误以及我如何纠正,谢谢。
2008之前的VHDL版本中,with..select
语句只能在进程之外使用。因此,要修复错误,请执行以下操作之一:
- 用..移动。。选择流程之外
- 使用VHDL 2008或更高版本
如果你选择2。在上面,您还需要将min
添加到流程敏感性列表中。
你也有一个问题,没有";其他";与..一起选择。。选择所有情况都必须包含在with..select
中。因为min
是一个std_logic_vector,所以必须涵盖所有9种单独状态类型的所有组合。因此when others
通常是覆盖所有内容的最佳方式。