Я конвертирую свой дизайн из 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 содержит только мой дизайн и тестовый файл.
Входные порты неявно относятся к сетевым типам 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
Если вы измените default_nettype на wire, вы потеряете проверку на типографические ошибки.
@ dave_59 Q1: Означает ли это, что мы должны сохранить default_nettype none
и явно указать сетевой тип в коде Verilog (например, input wire some_signal
) ?, Q2: Под опечатками вы имеете в виду орфографические ошибки в ключевых словах Verilog? Если да, то не будет ли Modelsim обнаруживать такие ошибки независимо от настроек default nettype
?
Оставьте default_nettype none
. Я имею в виду опечатки в названиях сигналов, а не в ключевых словах.
Вы хотите сменить порт с логики на провод? или default_nettype от none к проводу? потому что изменение default_nettype на провод, похоже, тоже работает.