verilog模块声明的首选语法

Dam*_*ien 7 syntax verilog

我对FPGA相对较新,我正在寻找关于Verilog中模块声明的现代最佳实践的一些指导.

我已经看到了两种在verilog中声明模块的方法.第一个让我想起了传统C,比如维基百科上例子:

module toplevel(clock,reset);
    input clock;
    input reset;

    /* snip */
endmodule
Run Code Online (Sandbox Code Playgroud)

替代语法将输入/输出说明符作为参数列表的一部分,而与VHDL不太相似,如下例所示:

module fadder(
    input a,         //data in a
    input b,         //data in b
    input cin,       //carry in
    output sum_out,  //sum output
    output c_out     //carry output
);

/* snip */
endmodule
Run Code Online (Sandbox Code Playgroud)

对于新编写的verilog代码,首选哪种语法?在这种情况下,"首选"是指用标准或相关材料(明确书写,或通过标准中给出的示例隐含)或用精心设计的样式指南书写的东西.问题不是要求个人偏好!

dav*_*_59 8

第二种语法形式缩进以替换第一种语法形式.如果您查看1364-2001 Verlog LRM以及当前的1800-2012 SystemVerilog LRM,您会注意到模块声明的所有示例都使用第二种形式.第一种形式仅用于遗产,但不幸的是,教科书和课程材料的转换时间比预期的要长.

这种较新(或ANSI风格)语法的主要优点是您只需在一个地方声明您的端口名称.使用较旧的语法,您必须声明端口名称最多三次; 一次用于位置排序,另一次用于端口方向,并且如果端口需要不是电线,则第三次声明其数据类型.

  • 由于解释的理由,接受这一点.感谢这两个答案. (2认同)

Mat*_*lor 7

第二个是首选.这是在Verilog 2001中引入的.这通常被称为"ANSI风格".

当我教Verilog时,我教两者,但推荐ANSI样式的所有新代码.(并提到我只是教第一种风格,以便学生可以理解遗留代码.)

如果你继续使用System-Verilog,你会发现有些东西只能用ANSI风格.

  • @Greg,Matthew传达的是,某些新的SystemVerilog功能仅适用于ANSI风格的端口.例如,您不能使用非ANSI样式端口定义通用`interface`端口 - 因为LRM仅使用ANSI样式端口为该功能创建了synthax. (2认同)