Can I add Delay in System Verilog function?

Hi All,

I have seen somewhere like this

function abc

fork
#100 $display(“System Verilog”);

join_none

so is it allowed to have delay and why ? and another question from where can I get such information about System Verilog?

Thanks

In reply to milinraijada:

Hi All,
I have seen somewhere like this
function abc
fork
#100 $display(“System Verilog”);
join_none
so is it allowed to have delay and why ? and another question from where can I get such information about System Verilog?
Thanks

If you want dealys, you need to call a task

function int f(bit a); 
    #1; // ILLEGAL!!!!
    return !a; 
  endfunction 
Function 'f' has illegal use of delay or synchronization
  The uses can be wait, delay, clocking block assign, fork-join and other task
  calls with delays

For info on SystemVerilog (spelled as ONE word), go to
http://standards.ieee.org/getieee/1800/download/1800-2012.pdf


Ben Cohen
http://www.systemverilog.us/ ben@systemverilog.us

  • SVA Handbook 4th Edition, 2016 ISBN 978-1518681448
  • A Pragmatic Approach to VMM Adoption 2006 ISBN 0-9705394-9-5
  • Using PSL/SUGAR for Formal and Dynamic Verification 2nd Edition, 2004, ISBN 0-9705394-6-0
  • Real Chip Design and Verification Using Verilog and VHDL, 2002 isbn 0-9705394-2-8
  • Component Design by Example ", 2001 ISBN 0-9705394-0-1
  • VHDL Coding Styles and Methodologies, 2nd Edition, 1999 ISBN 0-7923-8474-1
  • VHDL Answers to Frequently Asked Questions, 2nd Edition ISBN 0-7923-8115

In reply to milinraijada:

This is explained in section 13.4.4 Background processes spawned by function calls of the IEEE 1800-2012 LRM. See http://go.mentor.com/get-1800 to get a free copy.

The motivation for this feature was to allow a class constructor (which is a function) to start a thread. In most methodologies, like the UVM, you would never use this feature.

In reply to ben@SystemVerilog.us:

I’ve used fork join_none block ,please see that also and then reply

*In reply to milinraijada:*Have you read section 13.4.4?

In reply to milinraijada:
Sometimes, when in doubt, see what tools give you as a result

But, another point, a function is something that happens in zero time, has no delays or current processes. Tasks will do this.
KISS is a good philosophy!
:)
Ben Cohen SystemVerilog.us

In reply to dave_59:

Yes , I’ve read and got the answer as clearly mention in spec you can use fork join_none in function

Thanks
Milin