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

问题描述

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

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,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_00001'b1 相同,然后只需连接一个 {{1}} 即可。