Подразумевает ли сигнал задержку δ в VHDL?

Здравствуйте, мне было интересно, как объявление сигнала действительно работает в VHDL. Означает ли это задержку, поскольку это внутренний сигнал? Имеют ли сигналы внутреннюю память? пример:

Architecture SD_BEH of SD is
signal C: std_logic;
begin
 process (A)
  begin 
   C<=A;
   if (C='1') then B<=A;
   else B<= '0';
   end if;
  end process;
end SD_BEH;

Вводит ли это объявление C задержку δ? Если да, то почему? Это стандарт в VHDL? Спасибо.


person BugShotGG    schedule 20.02.2012    source источник
comment
Возможно, вы захотите прочитать эту статью об имитационной модели VHDL: sigasi.com/content/ vhdls-crown-jewel Это прояснит для вас ситуацию.   -  person Philippe    schedule 20.02.2012
comment
@Philippe In VHDL, you cannot use ordinary variables to communicate between processes. VHDL has special objects for that purpose: signals. Signals accomplish two things: the value update event is delayed to a future delta cycle, and it is held in a dedicated set that is processed atomically. In this way, determinism is achieved, as demonstrated in the first two examples. Это действительно помогло :D   -  person BugShotGG    schedule 20.02.2012


Ответы (1)


Сигналы распространяются только в конце дельта-цикла, поэтому вы можете назвать это «памятью» каким-то образом. Рассматривая VHDL как описание реального оборудования, сигналы не имеют никакой памяти, если только они не смоделированы как таковые, например, с использованием тактового процесса для описания регистра.

Предполагая, что то, что у вас есть выше, пытается смоделировать комбинационную логику, оно не будет правильно моделировать, потому что список чувствительности неполный. Чтобы было ясно, он будет симулировать «правильно», поскольку он написан в соответствии с правилами языка VHDL, но он не будет описывать какое-либо нормальное реальное оборудование. Чтобы это совпало, рассмотрите следующее небольшое изменение:

Architecture SD_BEH of SD is
signal C: std_logic;
begin
 process (A, C) -- add C to the sensitivity list
  begin 
   C<=A;
   if (C='1') then B<=A;
   else B<= '0';
   end if;
  end process;
end SD_BEH;
person wjl    schedule 20.02.2012