systemVerilogのgenerate文使ってます??

systemVerilogのgenerate文を使ってます??

generate文自体はverilog2001から有りVHDLなら最初から('80年代末頃)から有った。
この文はRTLでは無くてRTLを生成してくれる物。。ちょと言い過ぎだねRTLの接続を簡易化してくれる物と思って良いんじゃないかな。

具体的には
genvar i ;
  generate : test1
    for(i=0;i<7;i++) begin : test
       assign test[i+1] = test2[i] ;
    end
  endgenerate : test1
    assign test[0] = test[7] ;
とか書くとtestとtest2の接続が一つずれた物が出来る。



今私が書いているRTLは方式検討から。。もちろん特許を取るつもり(広告宣伝特許です。。汗)
納品先も無いのでgenerate文をバンバン使って楽しようと考え。。汗)
調べてみた。。実はverilog2001の頃にgenerate文を使ってみようかなと思ったことが有ったが
インスタンスを上手くgenerate出来るの??と言う疑問があり使わずじまいだった。

今はIEEE1800-2009(systemVerilog)の時代、仕様も明確になったとの報ががnetに有ったので
試験的に書いてみた。(RTLはいつものcount4.svで)
   注)pinをinterfaceで書くとQuaruts2で合成できないので普通にしている。。
module count4_4(input wire clk,
                input wire rst,
                input wire p,
                input wire t,
                input wire load,
                input wire [3:0] data,
                output wire [15:0] q_out,
                output wire [3:0] co_out,
                output logic [3:0]  test   ) ;

logic [3:0] uu ;

    assign {uu[2:0], uu[3]} = 0 ;

   
   genvar                         i ;
   generate begin
      for(i=0;i<4;i++) begin : count_block
         count4 count4(.clk(clk),
                       .rst(rst),
                       .p(p),
                       .t(t),
                       .load(load),
                       .data(data),
                       .q(q_out[i*4+3:i*4]),
                       .co(co_out[i]) ) ;
      end : count_block
   end
   endgenerate

`ifdef PSL_TEST
   
   covergroup counter_cov @(posedge counter_if.clk) ;
      cp_qout : coverpoint counter_if.q iff (counter_if.load == 1'b0) {
         bins reset      = {4'b0000} ;
         bins mid        = {[1:14]} ;
         bins count_end  = {4'b1111} ;
      }
   endgroup : counter_cov

        counter_cov counter_cov0 = new() ;

`endif

endmodule // counter_wrapper

結果count4のインスタンス名は
    count4.count_block[i].count4
   i<- 0~3
とかになるのね!!
インスタンス名の中にあるcount_block[0]とかはforループのブロック名が付く
ここの仕様がIEEE1800-2009で決まったみたい。。

Quaruts2のRTL viewerで見ると
イメージ 1

アルデックのシミュレータで見ると
イメージ 2


行数がMoneyに結び付かないときはgenerate文をバンバン使いましょ。。汗)

systemVerilog 回路設計 FPGA設計