2017-02-23 15 views
0

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

Так что я использовал $display синтаксис в коде Verilog.

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

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

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

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

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

+0

Если вы добавляете этот '$ display' в свой RTL, то, как сказали другие, синтез удалит его. Тем не менее, вы должны добавить его в свой список соединений. –

ответ

0

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

0

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

[email protected]* 
    $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