在另一个模块中启动一个模块时出现问题

时间:2019-02-21 11:57:09

标签: verilog system-verilog

激活模块中的exp函数实例化出现错误。我无法理解代码中的错误。我在实例化方面做错了吗?

请帮助我找出答案!

代码-

module exp (input [15:0] g, output [15:0] f);
real base = 2.71828;
assign f = $realtobits(base ** g) ;
endmodule

module activation(input method,
input ctrl,
input [15:0] imgin[127:0],
output reg [15:0] imgo[127:0]
);

`define ONE 16'h0100;

reg [15:0] y; 

integer i;
always@(ctrl)
for(i=0; i<128 ; i=i+1)
begin 

if(method == 1'b0)   begin  // for relu unit 
if (imgin[i][15])
imgo[i] = 16'h0000;

else if(imgin[i] > 16'b0)
imgo[i]= imgin[i];

else if(imgin[i]>16'b1)
imgo[i]=16'd1;

end

if(method == 1'b1)   begin  // for sigmoid function
  exp f1(.g(imgin[i]),.f(y));   // error here
  imgo[i] = 1/(1+ y);

end
end


endmodule 

1 个答案:

答案 0 :(得分:2)

编辑:最初,我尝试通过使用模块提供解决方案来回答这个问题,仅建议使用功能。但是,正如格雷格(Greg)在针对该答案的命令中指出的那样,函数是必经之路。因此,我删除了使用模块来回答这个问题的尝试。


您想要做的是在特定条件下实例化模块。您尝试执行此操作的方式是不可能的。如IEEE Std 1800-2012.(“ Verilog手册”)第27节所述,您可以使用generate构造有条件地实例化模块。大致如下所示:

generate
  if (SOME_CONDITION)
     // Instantiate a module
  else
     // Instantiate another module or do nothing
endgenerate

但是,对于您而言,这不是必需的。相反,您应该为此使用一个函数。上述手册的第13.4节指出了如何使用函数以及this tutorial of nandland.com。您可以按常规调用函数。基本上,您的代码将具有以下功能:

module activation(input             method,
                  input             ctrl,
                  input      [15:0] imgin   [127:0],
                  output reg [15:0] imgo    [127:0]);

  function exp;
    input [15:0] g;
    real         base;

    begin
      base = 2.71828;
      exp  = $realtobits(base ** g);
    end
  endfunction

  `define ONE 16'h0100;

  reg [15:0] y;

  integer i;
  always@(ctrl)
    for(i=0; i<128 ; i=i+1)
    begin

    if(method == 1'b0)   begin  // for relu unit 
      if (imgin[i][15])
        imgo[i] = 16'h0000;
      else if(imgin[i] > 16'b0)
        imgo[i]= imgin[i];
      else if(imgin[i]>16'b1)
        imgo[i]=16'd1;
    end
    else if (method == 1'b1) begin  // for sigmoid function
       y = exp(imgin[i]);
       imgo[i] = 1/(1+ y);
    end
  end
endmodule