如何更改verilog中参数的值

如何更改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

我设计了一个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: 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不能做到这一点。