2010-11-05 3 views
2

У меня есть 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. Другими словами, в идеале я хотел бы назначить два отладки значения in и out FIFO, т.е.

DBG_FIFO_IN <= DIN; 
    DBG_FIFO_OUT <= DOUT; 

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

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

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

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

ответ

4

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

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

или

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

Осторожно, используя первый вариант внутри процесса с тактовой частотой - вы получите задержка одного цикла между двумя сигналами. Вторая форма лучше для этого (но если вы измените «свою логику здесь», вам придется помнить об изменении обоих ...) –

+2

Как мы обычно это делаем, поставив «DBG_FIFO_OUT <= (ваша логика здесь) ; 'внутри синхронизированного процесса и' DOUT <= DBG_FIFO_OUT; 'вне его (вместе со всеми другими выходами, которые нуждаются в том же обращении) – QuantumRipple

2

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

+0

Я бы не рекомендовал это. Большинство рекомендаций рекомендуют, чтобы буферы не использовались. Вместо этого используйте локальный сигнал, который можно прочитать как отладочным, так и обычным портами. – trondd

2

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

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

Смежные вопросы