我的老师告诉我,在不同的语句中而不是在一个语句中声明打包的输入数组是一种很好的做法。例如:
input [3:0] a,b; //create two inputs ports of 4 bits
与。
input [3:0] a; //create one port "a" of 4 bits
input [3:0] b; //create one port "b" of 4 bits
老师告诉我第二种风格更可取;然而,两者的工作原理相同。第二种申报方式有什么原因吗?它有助于合成还是防止实例化时出错?
第二种风格是首选,因为依赖所有Verilog的隐式声明规则会留下很大的错误空间。通过将每个端口放在一行上,可以明确地显示意图。此外,首选ANSI风格的端口声明,这样每个端口名称只列出一次
Verilog-2001中完全明确的ANSI样式(如果省略wire logic
,则为隐式(
module mod(
input wire logic [3:0] a, //create one input port "a" of 4 bits
input wire logic [3:0] b, //create one input port "b" of 4 bits
output var logic [3:0] c //create one output port "c" of 4 bits
);
Verilog-1995 中的非ANSI样式
module mod(a, b, c);
input [3:0] a; //create one input port "a" of 4 bits
input [3:0] b; //create one input port "b" of 4 bits
output [3:0] c; //create one output port "c" of 4 bits
logic [3:0] c; // port c listed 3 times
endmodule
这两种编码风格在功能上没有区别。它们将以相同的方式进行模拟,并且它们将以同样的方式进行合成。第二种样式对合成没有帮助,也不能防止实例化时出现错误。
你应该向你的老师询问这种偏好的原因。毫无理由,这纯粹是意见问题。
也许老师认为,如果每行有一个信号声明,那么阅读和理解代码会更容易。