Verilog: Is it possible to define array in generate block?











up vote
1
down vote

favorite
2












How can I define an array of "register_bank" in a "generate" block and use them?
I mean something like this:



genvar i;
generate
for(i = 0; i < 4; i = i + 1)
being
reg [15:0] register_bank [0:31];

always @(posedge clk)
begin
if(we)
begin
register[i][addr] <= data_i[i * 16 +: 16];
end
else
begin
data_o[i * 16 +: 16] <= register[i][addr];
end
end
end
endgenerate









share|improve this question




























    up vote
    1
    down vote

    favorite
    2












    How can I define an array of "register_bank" in a "generate" block and use them?
    I mean something like this:



    genvar i;
    generate
    for(i = 0; i < 4; i = i + 1)
    being
    reg [15:0] register_bank [0:31];

    always @(posedge clk)
    begin
    if(we)
    begin
    register[i][addr] <= data_i[i * 16 +: 16];
    end
    else
    begin
    data_o[i * 16 +: 16] <= register[i][addr];
    end
    end
    end
    endgenerate









    share|improve this question


























      up vote
      1
      down vote

      favorite
      2









      up vote
      1
      down vote

      favorite
      2






      2





      How can I define an array of "register_bank" in a "generate" block and use them?
      I mean something like this:



      genvar i;
      generate
      for(i = 0; i < 4; i = i + 1)
      being
      reg [15:0] register_bank [0:31];

      always @(posedge clk)
      begin
      if(we)
      begin
      register[i][addr] <= data_i[i * 16 +: 16];
      end
      else
      begin
      data_o[i * 16 +: 16] <= register[i][addr];
      end
      end
      end
      endgenerate









      share|improve this question















      How can I define an array of "register_bank" in a "generate" block and use them?
      I mean something like this:



      genvar i;
      generate
      for(i = 0; i < 4; i = i + 1)
      being
      reg [15:0] register_bank [0:31];

      always @(posedge clk)
      begin
      if(we)
      begin
      register[i][addr] <= data_i[i * 16 +: 16];
      end
      else
      begin
      data_o[i * 16 +: 16] <= register[i][addr];
      end
      end
      end
      endgenerate






      verilog






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 8 at 17:16

























      asked Nov 8 at 15:49









      M A

      341214




      341214
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          0
          down vote













          I just found the answer. We can do that using the name of the block. Just like the following code:



          genvar i;
          generate
          for(i = 0; i < 4; i = i + 1)
          being : my_reg_bank
          reg [15:0] register_bank [0:31];

          always @(posedge clk)
          begin
          if(we)
          begin
          my_reg_bank[i].register[addr] <= data_i[i * 16 +: 16];
          end
          else
          begin
          data_o[i * 16 +: 16] <= my_reg_bank[i].register[addr];
          end
          end
          end
          endgenerate





          share|improve this answer





















            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














             

            draft saved


            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53211340%2fverilog-is-it-possible-to-define-array-in-generate-block%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            0
            down vote













            I just found the answer. We can do that using the name of the block. Just like the following code:



            genvar i;
            generate
            for(i = 0; i < 4; i = i + 1)
            being : my_reg_bank
            reg [15:0] register_bank [0:31];

            always @(posedge clk)
            begin
            if(we)
            begin
            my_reg_bank[i].register[addr] <= data_i[i * 16 +: 16];
            end
            else
            begin
            data_o[i * 16 +: 16] <= my_reg_bank[i].register[addr];
            end
            end
            end
            endgenerate





            share|improve this answer

























              up vote
              0
              down vote













              I just found the answer. We can do that using the name of the block. Just like the following code:



              genvar i;
              generate
              for(i = 0; i < 4; i = i + 1)
              being : my_reg_bank
              reg [15:0] register_bank [0:31];

              always @(posedge clk)
              begin
              if(we)
              begin
              my_reg_bank[i].register[addr] <= data_i[i * 16 +: 16];
              end
              else
              begin
              data_o[i * 16 +: 16] <= my_reg_bank[i].register[addr];
              end
              end
              end
              endgenerate





              share|improve this answer























                up vote
                0
                down vote










                up vote
                0
                down vote









                I just found the answer. We can do that using the name of the block. Just like the following code:



                genvar i;
                generate
                for(i = 0; i < 4; i = i + 1)
                being : my_reg_bank
                reg [15:0] register_bank [0:31];

                always @(posedge clk)
                begin
                if(we)
                begin
                my_reg_bank[i].register[addr] <= data_i[i * 16 +: 16];
                end
                else
                begin
                data_o[i * 16 +: 16] <= my_reg_bank[i].register[addr];
                end
                end
                end
                endgenerate





                share|improve this answer












                I just found the answer. We can do that using the name of the block. Just like the following code:



                genvar i;
                generate
                for(i = 0; i < 4; i = i + 1)
                being : my_reg_bank
                reg [15:0] register_bank [0:31];

                always @(posedge clk)
                begin
                if(we)
                begin
                my_reg_bank[i].register[addr] <= data_i[i * 16 +: 16];
                end
                else
                begin
                data_o[i * 16 +: 16] <= my_reg_bank[i].register[addr];
                end
                end
                end
                endgenerate






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 8 at 17:15









                M A

                341214




                341214






























                     

                    draft saved


                    draft discarded



















































                     


                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53211340%2fverilog-is-it-possible-to-define-array-in-generate-block%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Schultheiß

                    Liste der Kulturdenkmale in Wilsdruff

                    Android Play Services Check