Sutherland Logo Graphic Motto Graphic
Home Workshop Descriptions Public Workshop Schedule Request On-Site Training Workshop Pricing & Terms Books by Stuart Sutherland Papers by Stuart Sutherland Online Reference Guides Links to Other Sites Contact Us

"The best class I have ever taken! The lecture was thorough. The labs were fun and critical to understanding the concepts."

Welcome

Sutherland HDL provides expert training workshops on Verilog and SystemVerilog. We periodically hold open enrollment public workshops at various locations across the nation. For your convenience, you may also request that we present our workshops on-site at your company.

 

 

 

Sutherland HDL training workshops help engineers become true Verilog and SystemVerilog wizards! Workshops are developed and presented by engineering experts with many years of experience in design and verification. Our design-oriented workshops emphasize creating models that use logic synthesis correctly and avoiding coding gotchas. Verification-oriented workshops emphasize writing assertion-based, constrained random, object-oriented testbenches. Sutherland HDL has trained thousands of engineers throughout the United States, and in Canada, England, Germany, Japan, Malaysia, and Hong Kong.

 

Popular Workshops

 

 

Stuart Sutherland, founder of Sutherland HDL, is a recognized Verilog and SystemVerilog expert, with more than 20 years of experience with Verilog and SystemVerilog. He is a member of the IEEE 1364 Verilog standards group and IEEE 1800 SystemVerilog standards group. He is also the editor of the Verilog and SystemVerilog Language Reference Manuals. Mr. Sutherland has authored several popular books and conference papers on Verilog and SystemVerilog.

 

Verilog and SystemVerilog Quiz and Tips

This example illustrates a coding error that is easy to make when creating a SystemVerilog Object-Oriented testbench. Only the relevent portions of code are shown, not the full test context. The test program declares handles for a "Generator" object and a "Scoreboard" object, and then passes those handles to a "build_env" function to actually construct those objects and construct a mailbox so that the generator can communicate with the scoreboard. The problem with this code, however, is that after the "build_env" function returns, the generator and scoreboard handles are still null -- the test program (the "calling scope") does not see the objects that the function created.

program test;
  Generator  gen;  // handle for stimulus generator
  Scoreboard sb;   // handle for response scoreboard
  initial begin
    build_env ( .g(gen), .s(sb) );  // pass handles to environment builder
    ... // gen and sb handles should now reference actual objects, but are null
    ...
  end

  function void build_env(Generator g, Scoreboard s);
    mailbox mbx;
    mbx = new;    // construct a mailbox object and store handle in mbx
    g = new(mbx); // construct a Generator object and store handle in g
    s = new(mbx); // construct a Scoreboard object and store handle in s
    return;
  endfunction
endprogram

Why does it appear that the Generator and Scoreboard objects did not get created?

See the answer

Coding Tips Sign-Up