参数化模块(SystemVerilog)

时间:2017-02-03 23:15:52

标签: boolean embedded logic verilog system-verilog

我已阅读David Harris的书 "Digital Design and Computers Architecture" ,我对本书中的SystemVerilog示例有疑问。在"参数化构造"(# (parameter ...))中引入之后,几乎在每个示例中都使用此运算符。

例如,"减法器"本书中的模块:

module subtractor #(parameter N = 8)
(input logic [N - 1:0] a,b,
output logic [N - 1:0] y);
assign y = a - b;
endmodule

在此代码中使用N的原因是什么? 我们不能写下以下内容吗?:

input logic [7:0] a,b,
output logic [7:0] y);

此外,这些参数几乎用在书中的每个例子中,但就我而言,没有理由使用它。 我们可以直接在方括号中设置位数,而无需使用额外的"参数"。

那么,上述编码形式的原因是什么?

1 个答案:

答案 0 :(得分:2)

参数的使用有很多用途。

  1. 使用与值关联的符号名称直接使用文字值总是更好的编程习惯。 DATA_WIDTH代替N将是一个更恰当的例子。这记录了价值的含义。
  2. 当需要更改该值时,您只有一个地方可以进行更改,并且您错过更改或更改意外值的可能性更小。
  3. 使用参数允许您通过创建模板然后根据需要覆盖参数值,在许多不同的位置重用相同的代码。