对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 ++中编程时使用的方式相同:先输入,然后输出)。
然而,我也看到过相反的参数顺序的例子(先输出,最后输入)。
我希望这不是一个太愚蠢的问题:
是否有任何建议/最佳做法更喜欢一个而不是另一个? 到目前为止,我只是坚持先输入"但是在形成一个坏习惯之前我想问一下。
答案 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
);
这是一个主观的答案,但嘿,这是一个主观的问题。