Работает ли синтаксис $display во время моделирования после маршрута в verilog HDL

Я пытаюсь отслеживать один внутренний сигнал во время моделирования после маршрута.

Поэтому я использовал синтаксис $display в коде Verilog.

Однако в консоли ничего не отображается.

Я использовал следующий синтаксис в своем коде Verilog

always @(negedge clk)
begin
$display("Decimal: %d", idatabuf); 
end

Итак, мой вопрос заключается в том, не работает ли синтаксис $display для имитации пост-маршрута?

В любом случае, я использую грубый способ получения внутреннего сигнала на выходе. Но если бы синтаксис $display работал, моя жизнь была бы проще.


person avi1987    schedule 23.02.2017    source источник
comment
Если вы добавляете этот $display в свой RTL, то, как говорили другие, синтез удалит его. Тем не менее, вы должны иметь возможность добавить его в свой список соединений после макета.   -  person Matthew Taylor    schedule 23.02.2017


Ответы (2)


Нет. $display нельзя синтезировать, поэтому он работает только в моделировании поведения. Все несинтезируемые части кода, такие как & и #, игнорируются в процессе синтеза.

person Laleh    schedule 23.02.2017

Как сказал Лалех, $display не поддается синтезу. Чтобы делать то, что вы хотите, вы должны использовать иерархическую ссылку на свой сигнал после синтеза в своем тестовом стенде. например В вашем тестовом стенде вы можете добавить:

always@* 
  $display("Decimal: %d", u_top.u_mymod.idatabuf);`

Он должен печатать idatabuf при каждом изменении.

N.B.: Если сигнал, который вы хотите отслеживать, является внутренним сигналом, а не выводом иерархического модуля, инструменты синтеза имеют тенденцию к упрощению для логической оптимизации. Если вы хотите контролировать такой сигнал, вы должны привязать его к входу черного ящика. В инструментах Synopsys самый простой способ сделать черный ящик — это создать пустой модуль.

module BlackBox (I,O);
  parameter SIZE=1;
  input [SIZE-1:0] I;
  output[SIZE-1:0] O;
endmodule
person Krouitch    schedule 23.02.2017