Vhdl 当'=';或'<=';习惯于

Vhdl 当'=';或'<=';习惯于,vhdl,modelsim,Vhdl,Modelsim,我正在学习VHDL,从昨天起我就一直在努力学习下面这个简单的例子 在VHDL中为零(0)到九(9)计数器写入一个实体,该计数器由正边缘时钟触发,并具有异步活动高电平“归零”输入。系统有三(3)个输出信号“低”、“中”和“高”,产生以下值: 假设所有信号均为Std_逻辑类型 代码是这样的 LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_arith.all; USE ieee.std_logic_unsigned.all;

我正在学习VHDL,从昨天起我就一直在努力学习下面这个简单的例子

在VHDL中为零(0)到九(9)计数器写入一个实体,该计数器由正边缘时钟触发,并具有异步活动高电平“归零”输入。系统有三(3)个输出信号“低”、“中”和“高”,产生以下值:

假设所有信号均为Std_逻辑类型

代码是这样的

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我发现了很多错误

  • 首先,您试图描述一个不同于您声明的实体的体系结构。我猜应该是LMHcounterIS的
    架构行为
    ,而不是UPcounter的
    架构行为
  • L<='1' when count<="0101" else '0'; M<='1' when count="0110" else '0'; H<='1' when count>="0111" else '0';
  • 条件信号分配的语法错误,应将其用作
    信号是!在我的一生中,我没有看到实体名称是不同的:/最初,我编写了你描述的条件信号,然后我在尝试不同的事情时更改了它,这种书写方式给出的错误更少,尽管我知道它不正确。因此,进行您描述的更改解决了问题!谢谢。不要使用包
    std\u logic\u unsigned
    。它不是一个正式的IEEE软件包。改用IEEE.numeric_std
    ,然后对计数器使用类型
    无符号
    。如果这样做,您只需将计数器与整数进行比较:
    当count=5时。因此,代码中不再有神奇的0-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.
    
    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.
    
    L<='1' when count<="0101" else '0'; M<='1' when count="0110" else '0'; H<='1' when count>="0111" else '0';