Это запутанная часть SystemVerilog. Ваш код работает на моем симуляторе, который выводит предупреждение вместо ошибки.
Если вы достаточно погрузитесь в сообщения справки, вы получите, что «тип» идентификатора (как в «net» против «var», напротив «datatype»)«Это логика или что-то еще) является контекстно-зависимым, и конкретно входные порты являются сетями по умолчанию, в то время как выходные порты являются переменными по умолчанию. Это означает, что с параметром «default_nettype none» все ваши входные порты не полностью описаны, поскольку компилятор не знает функцию разрешения для сети (например, вам может понадобиться палочка). Ваши выходные порты, будучи переменными, не нуждаются в функции разрешения, и поэтому там не выдается никакой ошибки.
Поскольку вы не можете реально подключить один и тот же порт к более чем одному сигналу, если вы действительно не пытаетесь это сделать, мне кажется избыточным, ноэто может быть необходимо из-за правил приведения сети для разработки, если входная сеть управляется более чем одним назначением в другом месте в проекте.
Насколько я понимаю, "default_nettype none" в основном используется, чтобы гарантировать, что у вас нетнеобъявленные идентификаторы (приводящие к несоответствию ширины из-за однобитового вывода) и порт объявляются, так что вы можете проверить, есть ли у вашего инструмента опция вывода провода для портов в любом случае (опять же, мой симулятор выдает предупреждение и делает это по умолчанию,и синтезатор не жалуется)модуль.
РефОтношение к неявному объявлению сети - это раздел 6.10 в IEEE 1800-2017, хотя следование упомянутым выше разделам, похоже, указывает только на объявления не-ANSI ... вам может потребоваться более глубокое погружение, чтобы полностью понять суть вопроса.