Verilog HDL:使用For循环

时间:2014-06-04 11:58:20

标签: verilog clock synthesis

基本上我想插入一系列重复的块(其中包含逻辑+寄存器)。这些块将相互链接以形成链接。

我试过这段代码却失败了。我只是想帮助你指出我,是我的语法错误还是我实际上是从硬件逻辑明智地说出错误的想法。为什么我一直没有这样做。

module fullchip (dat_out, dat_in, clk);

    output    dat_out;
    input    dat_in, clk;

    //wire    cloud1_out;
    wire [99:0]    cloud_out;
    integer i;
    integer j;

    //combi_logic    cloud1(.combi_out(cloud1_out), .combi_in(dat_in), .clk(clk));
    //combi_logic    cloud2(.combi_out(dat_out), .combi_in(cloud1_out), .clk(clk));

    combi_logic    cloud[0](.combi_out(cloud_out[0]), .combi_in(dat_in), .clk(clk));
    for (i=1; i<99; i=i+1)
    {
    j = i - 1;
    combi_logic cloud[i](.combi_out(cloud_out[i], .combi_in(cloud_out[j]), .clk(clk));
    }
    combi_logic    cloud[99](.combi_out(dat_out), .combi_in(cloud_out[i]), .clk(clk));

endmodule

1 个答案:

答案 0 :(得分:1)

更正为粗体(有些情况下会添加额外的空格)
解释在斜体评论中

module fullchip (dat_out, dat_in, clk);

  output    dat_out;
  input    dat_in, clk;

  wire [99:0]    cloud_out;
  genvar i; // 'integer' to 'genvar'
  // remove 'integer j;'

  generate // required for IEEE1364-2001, optional in IEEE1364-2005 & IEEE1800
  for (i= 0 ; i <= 99; i=i+1) // range [0:99]
  begin // Verilog syntax, not '{' 
    if (i==0)   // cloud[0] --> cloud, for-loop handles indexing 
      combi_logic  cloud(.combi_out(cloud_out[0]), .combi_in(dat_in), .clk(clk));
    else if (i==99)//cloud[99] --> cloud, for-loop handles indexing us
      combi_logic  cloud(.combi_out(dat_out), .combi_in(cloud_out[ i-1 ]), .clk(clk));
    else        // cloud[i] --> cloud, for-loop handles indexing us
      combi_logic  cloud(.combi_out(cloud_out[i] ) , .combi_in(cloud_out[ i-1 ]), .clk(clk));
  end // Verilog syntax, not '}'
  endgenerate // match generate

endmodule

工作示例here