Architecture Modelsim不识别架构,包括;案例…当;

Architecture Modelsim不识别架构,包括;案例…当;,architecture,vhdl,modelsim,Architecture,Vhdl,Modelsim,我对Modelsim很陌生,我一直从中得到这个“错误”。基本上,我用vhdl编写了一个计数器: library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; entity Contatore16bit is port ( CLK: in std_logic; RESET: in std_logic; LOAD: in std_log

我对Modelsim很陌生,我一直从中得到这个“错误”。基本上,我用vhdl编写了一个计数器:

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;

entity Contatore16bit is
 port (
  CLK: in std_logic;
  RESET: in std_logic;
  LOAD: in std_logic;
  UP_DOWN: in std_logic;
  ENABLE: in std_logic;
  USCITA: out unsigned(15 downto 0) );
end Contatore16bit;

architecture Arch of Contatore16bit is
 signal temp_value, next_value: unsigned(15 downto 0);
 begin
  process (CLK)
   begin
    if CLK'Event and CLK='1' then
     if RESET='1' then
      temp_value <= (others => '0');
     elsif ENABLE='1' then
      temp_value <= next_value;
     end if;
    end if;
   --CASE UP_DOWN IS
    --WHEN  '0'  =>  next_value <= temp_value + conv_unsigned(1, 16);
    --WHEN  '1'  =>  next_value <= temp_value - conv_unsigned(1, 16);
   --END CASE;
   --CASE LOAD IS
    --WHEN  '0'  =>  USCITA <= conv_unsigned(0, 16);
    --WHEN  '1'  =>  USCITA <= temp_value;
   --END CASE;
  end process;
end Arch;
IEEE库;
使用IEEE.std_logic_1164.all;
使用IEEE.std_logic_arith.all;
使用IEEE.std_logic_unsigned.all;
实体contatore16位为
港口(
CLK:标准逻辑中;
复位:在标准逻辑中;
负载:在标准逻辑中;
上下:在标准逻辑中;
启用:在std_逻辑中;
USCITA:输出未签名(15到0));
结束符16位;
Contatore16bit的架构是
信号温度值,下一个值:无符号(15到0);
开始
过程(CLK)
开始
如果CLK'事件和CLK='1',则
如果RESET='1',则
温度值“0”);
elsif ENABLE='1'则

这不是我得到的错误。我的信息更丰富:

** Error: test.vhd(28): (vcom-1339) Case statement choices cover only 2 out of 9 cases.
** Error: test.vhd(32): (vcom-1339) Case statement choices cover only 2 out of 9 cases.
这是因为
std_logic
除了“1”和“0”之外还有许多其他值,具体来说:

  • U
    -未斜体
  • X
    -冲突
  • Z
    -高阻抗
  • W
    -弱高阻抗
  • H
    -弱上拉
  • L
    -弱下拉
  • -
    -不在乎
  • 1
    -高强度
  • 0
    -强低
VHDL的规则之一是,您必须对每个可能的输入值说您想要做什么。一种方法是使用

when others =>
如果您不希望其他输入发生任何特殊情况,可以使用
null
语句这样说


然后合成器会将其优化到您指定的值。

这不是我得到的错误。我的信息更丰富:

** Error: test.vhd(28): (vcom-1339) Case statement choices cover only 2 out of 9 cases.
** Error: test.vhd(32): (vcom-1339) Case statement choices cover only 2 out of 9 cases.
这是因为
std_logic
除了“1”和“0”之外还有许多其他值,具体来说:

  • U
    -未斜体
  • X
    -冲突
  • Z
    -高阻抗
  • W
    -弱高阻抗
  • H
    -弱上拉
  • L
    -弱下拉
  • -
    -不在乎
  • 1
    -高强度
  • 0
    -强低
VHDL的规则之一是,您必须对每个可能的输入值说您想要做什么。一种方法是使用

when others =>
如果您不希望其他输入发生任何特殊情况,可以使用
null
语句这样说


然后,合成器会将其优化为您指定的值。

1)Case语句可能应该在流程的计时部分!2) 使用数字\u std.unsigned而不是std\u logic\u unsigned,并写入
next\u value是next\u value/USCITA意味着与temp\u value同时更改,还是在temp\u value之后一个周期?如果后一个案例如Brian所说的那样进行,则应将案例陈述移出流程。(您不能在同一流程中混合同步和异步分配,如果您尝试,综合工具通常不知道该怎么做。)1)Case语句可能应该位于流程的计时部分!2) 使用数字\u std.unsigned而不是std\u logic\u unsigned,并写入
next\u value是next\u value/USCITA意味着与temp\u value同时更改,还是在temp\u value之后一个周期?如果后一个案例如Brian所说的那样进行,则应将案例陈述移出流程。(不能在同一个过程中混合使用同步和异步分配,如果您尝试,合成工具通常不知道该怎么做。)