使用“=”或“<=”时 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';
我正在学习 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';