与select语句一起使用时发生VHDL语法错误



我正在为一个项目的七段解码器编写代码,但当我检查语法错误时,它显示了以下内容:

错误(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语句只能在进程之外使用。因此,要修复错误,请执行以下操作之一:

  1. 用..移动。。选择流程之外
  2. 使用VHDL 2008或更高版本

如果你选择2。在上面,您还需要将min添加到流程敏感性列表中。

你也有一个问题,没有";其他";与..一起选择。。选择所有情况都必须包含在with..select中。因为min是一个std_logic_vector,所以必须涵盖所有9种单独状态类型的所有组合。因此when others通常是覆盖所有内容的最佳方式。

最新更新