• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Functional Verification
  3. fork and automatic

Stats

  • Locked Locked
  • Replies 3
  • Subscribers 66
  • Views 14874
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

fork and automatic

sevent
sevent over 14 years ago

 The followign code does not compile with ncverilog (the file has a .sv extension):

... 
  foreach(i[idx])
  begin
    fork
    automatic string jdx = idx;
    begin
      run(jdx);
    end
    begin
      $display("jdx = %s",jdx);
    end
    join_none
  end
... 

ncverilog gives:

 ncvlog: *E,UNSAUT (autoloop.sv,50|23): The 'automatic' keyword is not supported in this context.

 

  • Cancel
Parents
  • TAM1
    TAM1 over 14 years ago

     

    That is legal code, but not supported yet by NC-Verilog. At the present time, the automatic keyword can only be put on a task or a function as a whole, not on individual elements in an always or fork-join block. I looked up the keywords "automatic fork join" on support.cadence.com and the first entry is a solution giving a workaround. Put the fork-join block into an automatic task. Then any variables declared for use in the block will be automatic.

     

      int i[string];

      task automatic run(input string runs);
        #2 $display($time,,"runs = ",s);
      endtask

      task automatic fjt(input string s);
        string jdx = s;  // this defaults to automatic
        fork
        begin
          run(jdx);
        end
        begin
          #1 $display($time,,"jdx = %s",jdx);
        end
        join_none
      endtask

      initial
      begin
        i["asdf"] = 1;
        i["xyz"] = 2;
        foreach(i[idx]) fjt(idx);
      end

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • TAM1
    TAM1 over 14 years ago

     

    That is legal code, but not supported yet by NC-Verilog. At the present time, the automatic keyword can only be put on a task or a function as a whole, not on individual elements in an always or fork-join block. I looked up the keywords "automatic fork join" on support.cadence.com and the first entry is a solution giving a workaround. Put the fork-join block into an automatic task. Then any variables declared for use in the block will be automatic.

     

      int i[string];

      task automatic run(input string runs);
        #2 $display($time,,"runs = ",s);
      endtask

      task automatic fjt(input string s);
        string jdx = s;  // this defaults to automatic
        fork
        begin
          run(jdx);
        end
        begin
          #1 $display($time,,"jdx = %s",jdx);
        end
        join_none
      endtask

      initial
      begin
        i["asdf"] = 1;
        i["xyz"] = 2;
        foreach(i[idx]) fjt(idx);
      end

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
No Data

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information