在 Verilog 中传递参数
Pass parameters in Verilog
我正在 Verilog
中编写一个使用参数的模块。稍后我将需要在我的项目中使用不同的参数多次实现它,所以我不想创建多个模块,而是想像输入一样传递参数,尽管它们是在编译中指定的。
我认为这可以在 VHDL
中完成,所以我想它也可以在 Verilog
中完成,尽管我找不到任何东西。
模块 parameters
可以通过以下两种方式覆盖:
使用defparam
语句:
module Stack;
parameter param1 = 1;
parameter param2 = 12;
endmodule
module Test;
defparam s1.param1 = 6;
defparam s1.param2 = 32;
Stack s1();
endmodule
在实例化过程中传递参数:在这个方法中,参数必须按照它们定义的顺序被覆盖,所以下面的代码与上面的代码相同。
module Stack;
parameter param1 = 1;
parameter param2 = 12;
endmodule
module Test;
Stack #(6, 32) s1();
endmodule
在 Verilog 2001 中,有一个新功能使其更具可读性(请注意,以上代码均适用于 Verilog 2001)。
module Stack;
parameter param1 = 1;
parameter param2 = 12;
endmodule
module Test;
Stack #(.param1(6), .param2(32)) s1();
endmodule
输入输出赋值时可以直接赋值参数。例如:“parameter i0=0,i1=1;”并在代码中调用这些值,例如:“a[0]=N[i0];” =>输入N的第0位;将存储在 reg a 的第 0 位; "a[1]=N[i1];"=> 输入N的第1位;将存储在 reg a 的第 1 位;如果你的 N 是 4'b1011,那么 "a=0011" 的值。您可能需要将 a 初始化为 0。
另一种方式。
`module top #(
parameter N, // Number of instance
parameter [(N*32-1):0] A, // First Parameter
parameter [(N*2-1):0] B // second parameter
);
generate
for (int i=0; i<N; i++) begin: instance
s #(.A(A[(i*32-1):0]),
.B(B[(i*2-1):0])
) s_i;
end
endgenerate`
我正在 Verilog
中编写一个使用参数的模块。稍后我将需要在我的项目中使用不同的参数多次实现它,所以我不想创建多个模块,而是想像输入一样传递参数,尽管它们是在编译中指定的。
我认为这可以在 VHDL
中完成,所以我想它也可以在 Verilog
中完成,尽管我找不到任何东西。
模块 parameters
可以通过以下两种方式覆盖:
使用
defparam
语句:module Stack; parameter param1 = 1; parameter param2 = 12; endmodule module Test; defparam s1.param1 = 6; defparam s1.param2 = 32; Stack s1(); endmodule
在实例化过程中传递参数:在这个方法中,参数必须按照它们定义的顺序被覆盖,所以下面的代码与上面的代码相同。
module Stack; parameter param1 = 1; parameter param2 = 12; endmodule module Test; Stack #(6, 32) s1(); endmodule
在 Verilog 2001 中,有一个新功能使其更具可读性(请注意,以上代码均适用于 Verilog 2001)。
module Stack; parameter param1 = 1; parameter param2 = 12; endmodule module Test; Stack #(.param1(6), .param2(32)) s1(); endmodule
输入输出赋值时可以直接赋值参数。例如:“parameter i0=0,i1=1;”并在代码中调用这些值,例如:“a[0]=N[i0];” =>输入N的第0位;将存储在 reg a 的第 0 位; "a[1]=N[i1];"=> 输入N的第1位;将存储在 reg a 的第 1 位;如果你的 N 是 4'b1011,那么 "a=0011" 的值。您可能需要将 a 初始化为 0。
另一种方式。
`module top #(
parameter N, // Number of instance
parameter [(N*32-1):0] A, // First Parameter
parameter [(N*2-1):0] B // second parameter
);
generate
for (int i=0; i<N; i++) begin: instance
s #(.A(A[(i*32-1):0]),
.B(B[(i*2-1):0])
) s_i;
end
endgenerate`