Verilog模块声明中输入和输出端口的推荐顺序

时间:2017-09-12 09:44:41

标签: module verilog

对Verilog不熟悉我注意到很多代码正在订购他们的端口 在模块声明中首先输入:

Name "First Installer"
OutFile "firstinstaller.exe"
InstallDir D:\dev\FirstInstaller
Section "move test.exe"
;CreateDirectory $INSTDIR\test
SetOutPath $INSTDIR\test      ; extract exe content at this path, you can also specify other path 
File  /r "D:\dev\test.txt"    ;used to include file in exe
SectionEnd

(几乎与我在C / C ++中编程时使用的方式相同:先输入,然后输出)。

然而,我也看到过相反的参数顺序的例子(先输出,最后输入)。

我希望这不是一个太愚蠢的问题:

是否有任何建议/最佳做法更喜欢一个而不是另一个? 到目前为止,我只是坚持先输入"但是在形成一个坏习惯之前我想问一下。

3 个答案:

答案 0 :(得分:2)

通常我先做时钟并重置。如果IO是一个包含多个事物的大型模块,则按功能分组。马上继续在一个组中,我通常先输入输入然后输出,但另一种方式也很好。

归根结底,这是一个风格问题,所以最重要的是保持一致。选择一种风格并坚持下去。

答案 1 :(得分:1)

Verilog内置基元的输出首先是输入。连接模块端口时,应按端口名称连接,而不是按位置顺序连接,因此顺序并不重要。

答案 2 :(得分:1)

正如其他人所说,首先将时钟和重置放在首位,然后是其他通用输入,然后是输出。

然而,为了个人方便,我喜欢将时钟和重置放在底部,因为这些是你不太可能修改的信号。这意味着您不必在通过添加/删除端口来重构代码时处理尾随逗号或缺少逗号。例如:

const f = (value) => {
  return (input) => (value <= input);
};

const isGreaterThanOrEqualTo3 = f(3);

console.log(isGreaterThanOrEqualTo3(4)); // logs out true
console.log(isGreaterThanOrEqualTo3(2)); // logs out false

如果您需要在module example_module(input wire clk, input wire [7:0] a, input wire b, output wire [7:0] x, output wire y ); 之后添加另一个输出端口,则必须确保在output wire y之后添加逗号。同样,如果您删除y,则必须确保在output wire y之后删除逗号。

这是一件小事,但当你把事情挂钩并重新安排信号和移动端口时,这是一个累积的不便。然而,如果您使用以下内容,则可以添加或删除端口,而不必使用尾随逗号。

x

当你实例化模块时,它是一样的。

module example_module(input  wire [7:0] a, 
                      input  wire       b,       
                      output wire [7:0] x,            
                      output wire       y,

                      input  wire       clk    
); 

这是一个主观的答案,但嘿,这是一个主观的问题。