声明具有参数化宽度的常量

Declaring a constant with a parameterized width

我想声明具有参数化宽度的常量。 例如,在这段代码中:

module mux2to1 #(parameter w = 4) (output [w-1:0] O, input [w-1:0] i0, i1, input Sel);
  assign O = (Sel)? i1 : i0;
endmodule

module M1 #(parameter n = 4) (input [n-1:0] A, input F, output [n+1:0] B);
  mux2to1#(n+2) mux (B, XXX, XXX, F);
endmodule

在XXX中,我想其中一个全1,另一个我想全0后跟一个1。

如何操作?

您可以使用复制连接运算符构造常量:

mux2to1 #(n+2) mux (B, {(n+2){1'b1}}, {{(n+1){1'b0}}, 1'b1}, F);

{(n+2){1'b1}} 创建一个 n+2 1'b1 位的常量。由于n为4,所以{(n+2){1'b1}}等同于{6{1'b1}},与6'b11_1111等同。

{(n+1){1'b0}}5'b0_0000 相同,然后只需将一个 1'b1 连接到那个。