如何更改verilog中参数的值
我设计了一个ALU,根据操作码的值进行4次操作,并根据项目规范使用generate对子模块进行条件调用。但是我如何更改参数值以从一个操作移动到另一个操作 代码如下:如何更改verilog中参数的值,verilog,hdl,Verilog,Hdl,我设计了一个ALU,根据操作码的值进行4次操作,并根据项目规范使用generate对子模块进行条件调用。但是我如何更改参数值以从一个操作移动到另一个操作 代码如下: module ALU (A4, B4,cin4); input [7:0] A4, B4; input cin4; //input [1:0] opc; wire [7:0]out4; wire cout4; parameter opc=0; generate case (opc) 0: al
module ALU (A4, B4,cin4);
input [7:0] A4, B4;
input cin4;
//input [1:0] opc;
wire [7:0]out4;
wire cout4;
parameter opc=0;
generate
case (opc)
0: alu_add u1(out4,cout4,A4,B4,cin4); //calling an alu_add module
1: alu_sub u2(out4,cout4,A4,B4,cin4);
2: alu_comp u3_1(B4,out4);
3: alu_xor u4 (A4,B4,out4);
endcase
endgenerate
实例化模块时,可以重写参数的值。例如:
ALU #(.opc(1)) i1 ();
ALU #(.opc(2)) i2 ();
请参阅IEEE标准1800-2012第23.10.2.2节“按名称分配参数值”。参数用于常量,因此在模拟过程中不能更改。参数可以在实例化期间重写 不过,我关心的是问题中使用的术语
call
。Generates用于根据常量生成硬件,即它们不会动态创建和销毁硬件
u1到u4是描述物理硬件的实例,您现在编写的是一个ALU,它只能做一件事。该代码是可配置的,并给用户4件事情的选择,但一旦实例化,然后它是固定的
要使通用ALU具有所有四个可用操作,您需要从所需ALU ie中选择输出:
module ALU (
input [7:0] A4,
input [7:0] B4,
input cin4,
input [1:0] opc;
);
wire [7:0]out4, out4_0, out4_1, out4_2, out4_3;
wire cout4 ,cout4_0, cout4_1;
alu_add u1(out4_0,cout4_0,A4,B4,cin4); //calling an alu_add module
alu_sub u2(out4_1,cout4_1,A4,B4,cin4);
alu_comp u3_1(B4,out4_2);
alu_xor u4 (A4,B4,out4_3);
always @* begin
case (opc)
0: out4 = out4_0;
1: out4 = out4_1;
2: out4 = out4_2;
3: out4 = out4_3;
endcase
case (opc)
0: cout4 = cout4_0;
1: cout4 = cout4_1;
default: cout4 = 'b0;
endcase
end
endmodule
谢谢,但我需要在条件中实例化一个子模块。这是项目规范中的一个重要部分。有什么办法吗?@在运行时条件(在运行时发生变化的条件)中表达?没有verilog不能做到这一点。