SystemVerilog, изменяющий тип порта с проводного на логический, выдает ошибку при использовании n default_nettype none - PullRequest
0 голосов
/ 04 сентября 2018

Я конвертирую свой дизайн из Verilog в SystemVerilog, и по умолчанию у меня есть директива 'default_nettype none. Вот мой дизайн:

`default_nettype none

module my_design 
#(
parameter INPUT_WIDTH  = 16,
parameter OUTPUT_WIDTH = 2*INPUT_WIDTH
)
(
    input  wire signed [INPUT_WIDTH-1 : 0 ]  x_in,
    input  wire signed [INPUT_WIDTH-1 : 0 ]  y_in,
    output wire signed [OUTPUT_WIDTH-1 : 0]  z_out
);

Который компилируется без каких-либо проблем. Тем не менее, когда я переключаю провод на логику следующим образом:

module my_design 
#(
parameter INPUT_WIDTH  = 16,
parameter OUTPUT_WIDTH = 2*INPUT_WIDTH
)
(
    input  logic signed [INPUT_WIDTH-1 : 0 ]  x_in,
    input  logic signed [INPUT_WIDTH-1 : 0 ]  y_in,
    output logic signed [OUTPUT_WIDTH-1 : 0]  z_out
);

Я получаю следующую ошибку для всех сигналов моего порта:

ERROR: [VRFC 10-1103] net type must be explicitly specified for 'x_in' 
when default_nettype is none

Что очень странно для меня, поскольку я явно удалил все порты. Я использую Vivado Simulator 2018.2. Я использую следующую команду для компиляции вышеуказанных кодов:

xvlog --sv -f files.f

И files.f содержит только мой дизайн и тестовый файл.

1 Ответ

0 голосов
/ 05 сентября 2018

Входные порты являются неявно wire сетевыми типами с неявным logic типом данных. SystemVerilog выбрал эти значения по умолчанию для обратной совместимости с Verilog.

Итак, ваше исходное объявление ввода Verilog было явным wire с неявным типом данных logic. Вы изменили его на неявный wire сетевой тип с явным logic типом данных. Но результат функционально одинаков. Вам нужно добавить обратно ключевое слово wire.

Следующее является функционально эквивалентным:

 input signed [INPUT_WIDTH-1 : 0 ]  x_in, // implicit wire logic
 input logic signed [INPUT_WIDTH-1 : 0 ]  x_in, // implicit wire
 input wire signed [INPUT_WIDTH-1 : 0 ]  x_in, // implicit logic
 input wire logic signed [INPUT_WIDTH-1 : 0 ]  x_in, // explicit
...