verilog中“generate”和“endgenerate”附近的语法错误

时间:2016-03-03 10:54:48

标签: verilog

我是Verilog的新手,我正在尝试使用verilog实现单精度浮点加法减法。我收到一个错误,我无法纠正。谁能帮帮我吗?

模块addModule(Rs,Re,Rm,As,Ae,Am,Bs,Be,Bm);

//Declarations of ports
  Rs,Re,Rm;
  As,Bs;
  input [7:0] Ae,Be;
  input [22:0] Am,Bm;

reg [7:0] Re;
reg [22:0] Rm;
reg Rs;
//wire declarations.
wire [23:-1] C;
assign C[-1] = 0;
wire [23:1] sum;
//variable declaration.
genvar count;

always @(*)
begin
//Add two mantissas.
if ((As^Bs)==0)
    begin
        generate   //getting error here "Syntax error near "generate"."
        for(count=0;count<24;count=count+1)
            begin
                add add_1(.c_out(C[count]),.sum(sum[count]),.in1(tempAm[count]),.in2(tempBm[count]),.c_in(C[count-1]));
            end
        endgenerate   //syntax error near "endgenerate"
    end

else
    begin
        generate   //Syntax error near "generate".
        for(count=0;count<24;count=count+1)
            begin
                subtract sub_1(.c_out(C[count]),.dif(sum[count]),.in1(tempAm[count]),.in2(tempBm[count]),.c_in(C[count]));
            end
        endgenerate   //Syntax error near "endgenerate".
    end


end
endmodule

提前致谢。 :)

1 个答案:

答案 0 :(得分:6)

在Verilog中,当您实例化模块时,这意味着您要向主板添加额外的硬件

必须在模拟开始之前添加此硬件(即在编译时)。在这里,您可以在每个时钟脉冲添加/删除硬件。

实例化后,模块将执行/检查模拟的每个时间戳,直到结束。

所以要执行任何模块,只需实例化它,为它提供clk和其他所需的输入,在子模块中添加always块

一旦硬件实例化,它将根据其中的逻辑执行整个生命周期

您要在错误的地方实例化模块。 generate块的使用必须在外部任何程序块中完成。

// generate outside any other blocks
   generate   
    for(count=0;count<24;count=count+1)
        begin
            add add_1(.c_out(C[count]),.sum(sum[count]),.in1(tempAm[count]),.in2(tempBm[count]),.c_in(C[count-1]));
        end
    endgenerate

always @(*)
begin
// Other stuff here.
end

如果您想操纵subtract sub_1模块的输入信号,只需操纵Csum以及addModule模块中声明的其他变量。由于它们已连接,因此subtract sub_1模块中的更改反映

有关生成阻止的更多信息,请参阅Module InstantiationGenerate block examplesimilar question链接。