使用“=”或“<=”时 modelsim 中的两个不同错误

two different errors in modelsim when '=' or '<=' used

我正在学习 VHDL,从昨天开始我就一直在为下面这个简单的例子苦苦挣扎。

用 VHDL 编写一个零 (0) 到九 (9) 计数器的实体,由上升沿时钟触发并具有异步高电平有效 'reset to zero' 输入。系统具有三 (3) 个输出信号 'LOW' 'MID' 和 'HIGH',它们生成以下值:

假设所有信号都是Std_logic类型。

代码是这样的;

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;

ENTITY LMHcounter IS
  PORT(clk,reset:in std_logic; 
    L:out std_logic; 
    M:out std_logic; 
    H:out std_logic);
END LMHcounter;

ARCHITECTURE behavior OF UPcounter IS
SIGNAL count:std_logic_vector(3 downto 0);

BEGIN
PROCESS(clk,reset)
BEGIN
   if reset='1' then count<="0000";
   elsif (rising_edge(clk))then 
    if count<="1001" then
         count<="0000";
    else count<=count+"0001";
    end if;
   end if;

END PROCESS;
L<='1' when count<="0101"; 
    else '0';
M<='1' when count="0110"; 
    else '0';
H<='1' when count>="0111"; 
    else '0';


END behavior;

如果我在最后使用 L='1' 我得到;

 Error: C:/DL_Project/LMH Counter.vhd(29): near "=": (vcom-1576) expecting == or '+' or '-' or '&'.

如果我在最后使用 L<='1' 我得到;

Error: C:/DL_Project/LMH Counter.vhd(29): Illegal target for signal assignment.
Error: C:/DL_Project/LMH Counter.vhd(29): (vcom-1136) Unknown identifier "L".

Error: C:/DL_Project/LMH Counter.vhd(30): near "else": (vcom-1576) expecting END.

我不能使用 ':=' 显然 modelsim 不支持

Error: C:/DL_Project/LMH Counter.vhd(29): (vcom-1441) CONDITIONAL VARIABLE ASSIGNMENT is not defined for this version of the language.

** Error: C:/DL_Project/LMH Counter.vhd(30): near "else": (vcom-1576) expecting END.

我敢肯定这很简单,但我似乎无法在任何地方找到答案。如果我使用“=”或“<=”,有人可以解释一下后台发生了什么吗?

谢谢

我发现了很多错误,

  • 首先,您正在尝试为与您声明的实体不同的实体描述架构。我猜应该是 ARCHITECTURE behavior OF LMHcounterIS 而不是 <strike>UPcounter 的架构行为是 </strike>
  • 条件信号分配的语法错误,您应该将其用作 <em>signal <= [expression <strong>when</strong> condition <strong>else</strong> ...] expression;</em>。在你的代码中应该是
    L<='1' when count<="0101" else '0';
    M<='1' when count="0110"  else '0';
    H<='1' when count>="0111" else '0';