VHDL входные порты - PullRequest
       20

VHDL входные порты

2 голосов
/ 02 апреля 2012

У меня проблемы с созданием объекта с использованием портов inout. Я попытался написать следующий код, где A является входом, а B является выходом, и он работает нормально. Но как только я переключаю A на входной порт, он реализуется, но не будет имитировать. Может кто-нибудь сказать мне, в чем проблема?

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity Problem2 is
Port ( A : inout  integer;
       B : out  integer
          );
end Problem2;

architecture Behavioral of Problem2 is

procedure change (signal A: inout integer; signal B: out integer) is 
begin
B<=A after 20 ns;
end change;

begin

change(A=>A, B=>B);

end Behavioral;

Ответы [ 3 ]

2 голосов
/ 02 апреля 2012

Процедура «change» является драйвером для A, но явно ничего не управляет, поэтому A будет приводиться к «U». Попробуйте это изменение, которое должно сделать то, что вы ожидаете:

procedure change (signal A: inout integer; signal B: out integer) is 
begin
  A <= 'Z';
  B <= A after 20 ns;
end change;
1 голос
/ 02 апреля 2012

Обычно вам не нужны входные порты.Особенно, если вы только начинаете использовать VHDL, придерживайтесь in или out.Inout используется для моделирования шин с тремя состояниями.Как указывает @wjl, вам нужно присвоить «Z» сигналу, если вы хотите иметь возможность прочитать то, что пишет другая сторона.

Кроме того, если вы пишете процедуры для последующего повторного использования, выне следует оборачивать их в сущность, а затем проверять сущность.Это просто вызывает дополнительные проблемы (как вы испытываете сейчас).Вместо этого вызывайте процедуру прямо со своего стенда, как если бы вы тестировали процедуру (или функцию) в программном обеспечении.

0 голосов
/ 02 апреля 2012

Вы используете Synopsys VCS? Существует известное ограничение в VCS, что inout (ы) в сущности не симулируют (отображаются красным)

...