две разные ошибки в modelsim при использовании '=' или '<=' - PullRequest
0 голосов
/ 14 декабря 2018

Я изучаю VHDL, и со вчерашнего дня я боролся с этим простым примером ниже.

Запись сущности в VHDL для счетчика от нуля (0) до девяти (9), запускаемого синхроимпульсом положительного фронта и имеющего асинхронный активный высокий «вход в ноль».Система имеет три (3) выходных сигнала «НИЗКИЙ», «СРЕДНИЙ» и «ВЫСОКИЙ», которые генерируют следующие значения:

Предположим, что все сигналы имеют тип 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 <= <strong>'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.

Я уверен, что это тривиально, но я нигде не могу найти ответ.А также может кто-нибудь объяснить, пожалуйста, что происходит в фоновом режиме, если я использую '=' или '<='? </p>

Спасибо

1 Ответ

0 голосов
/ 14 декабря 2018

Я обнаружил довольно много ошибок,

  • Во-первых, вы пытаетесь описать архитектуру для другого объекта, отличного от того, который вы объявили.Я предполагаю, что это должно быть ARCHITECTURE behavior OF LMHcounterIS вместо <strike>ARCHITECTURE behavior OF UPcounter IS</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';
...