Ваш первый блок кода использует синтаксис list_of_port_declarations, который действителен в IEEE 1364-2001 (Раздел 12.3.3) и во всех последующих версиях. Грамматика из первой ссылки неполная, вторая ссылка выглядит так, как будто она включает эту конструкцию
Ваш второй кодовый блок определенно действителен. Синтаксис, который выглядит как порты экземпляра в определении модуля, является явной конструкцией порта. Не очень часто, они используются, когда вы хотите представить внешний интерфейс сигнала, отличный от того, который используется внутри. Вот несколько примеров:
module mod1(portA);
input portA; //Implicit port named portA connected to implicit wire portA
endmodule
Здесь portA является неявным и наследует атрибуты из входного объявления, поскольку у него один и тот же идентификатор portA.
module mod2(.expA(sigA));
wire sigA;
endmodule
module top;
wire sigB;
mod2 modInst(.expA(sigB));
endmodule
В этом примере мы используем явный порт для модуля mod2. Внутренне expA подключен к sigA, но, как вы видите в экземпляре modInst, мы используем внешнее имя для именованных соединений.
module mod3 (.expA({sigC,sigD}), sigF, .expB(sigG[1],sigB[3:0]));
output reg [3:0] sigC, sigD;
input wire [1:0] sigG;
input wire [7:0] sigB;
output wire sigF;
endmodule
Это также верно. Порт expA предполагает ширину конкатенации sigC и sigD. То же самое с портом expB.