Чтение портов OUT для отладки - PullRequest
2 голосов
/ 05 ноября 2010

У меня есть FIFO, интерфейс которого выглядит примерно так:

entity fifo is
    port (
    CLK               : IN  std_logic := '0';
    DIN               : IN  std_logic_vector(31 DOWNTO 0);
    ALMOST_EMPTY      : OUT std_logic;
    ALMOST_FULL       : OUT std_logic;
    DOUT              : OUT std_logic_vector(31 DOWNTO 0);
    ...
    WR_ACK            : OUT std_logic
);
end fifo;

Этот интерфейс задан, и я не могу его изменить.Дело в том, что теперь для целей отладки я хочу посмотреть, что написано и прочитано в / из FIFO.Другими словами, в идеале я хотел бы назначить два значения отладки входа и выхода FIFO, т. Е.

  DBG_FIFO_IN  <= DIN;
  DBG_FIFO_OUT <= DOUT;

. По понятным причинам второе назначение дает мне следующее сообщение об ошибке:

[exec] ОШИБКА: HDLParsers: 1401 - Объект DOUT режима OUT не может быть прочитан.

Поэтому мне интересно, есть ли способ, как я могу присвоить значение DOUT моему символу отладки.Интерфейс предоставлен, поэтому я не могу сделать DOUT входным сигналом.

Большое спасибо за полезные комментарии!

Ответы [ 3 ]

4 голосов
/ 05 ноября 2010

Вы должны назначить выход fifo локальному сигналу, который вы можете прочитать, затем назначить этот сигнал для выхода (или назначить их оба параллельно):

DBG_FIFO_OUT <= (your logic here);
DOUT         <= DBG_FIFO_OUT;

или

DBG_FIFO_OUT <= (your logic here);
DOUT         <= (your logic here);
2 голосов
/ 07 ноября 2010

У вас уже есть хорошие ответы для старых инструментов, но если вы используете какой-либо инструмент, который поддерживает VHDL-2008, вам разрешено читать выходные порты напрямую. Вам может потребоваться включить это с параметром командной строки.

Если ваши инструменты не поддерживают его, бейте поставщика, пока не сделаете!

2 голосов
/ 06 ноября 2010

Используйте BUFFER вместо out. Затем вы можете читать без промежуточного сигнала, используемого в решении Чарльза.

...