Verification Academy

Search form

My Account Menu

  • Register
  • Log In
  • Topics
  • Courses
  • Forums
  • Patterns Library
  • Cookbooks
  • Events
  • More
  • All Topics
    The Verification Academy offers users multiple entry points to find the information they need. One of these entry points is through Topic collections. These topics are industry standards that all design and verification engineers should recognize. While we continue to add new topics, users are encourage to further refine collection information to meet their specific interests.
    • Languages & Standards

      • Portable Test and Stimulus
      • Functional Safety
      • Design & Verification Languages
    • Methodologies

      • UVM - Universal Verification Methodology
      • FPGA Verification
      • Coverage
    • Techniques & Tools

      • Verification IP
      • Simulation-Based Techniques
      • Planning, Measurement, and Analysis
      • Formal-Based Techniques
      • Debug
      • Acceleration
  • All Courses
    The Verification Academy is organized into a collection of free online courses, focusing on various key aspects of advanced functional verification. Each course consists of multiple sessions—allowing the participant to pick and choose specific topics of interest, as well as revisit any specific topics for future reference. After completing a specific course, the participant should be armed with enough knowledge to then understand the necessary steps required for maturing their own organization’s skills and infrastructure on the specific topic of interest. The Verification Academy will provide you with a unique opportunity to develop an understanding of how to mature your organization’s processes so that you can then reap the benefits that advanced functional verification offers.
    • Universal Verification Methodology (UVM)

      • UVMF - One Bite at a Time
      • Introduction to UVM
      • Basic UVM
      • UVM Debug
      • Advanced UVM
      • UVM Connect
    • Featured Courses

      • Introduction to DO-254
      • Portable Stimulus Basics
      • SystemVerilog OOP for UVM Verification
      • Power Aware Verification
      • Power Aware CDC Verification
      • Assertion-Based Verification
      • Metrics in SoC Verification
    • Additional Courses

      • Clock-Domain Crossing Verification
      • An Introduction to Unit Testing with SVUnit
      • Evolving FPGA Verification Capabilities
      • SystemVerilog Testbench Acceleration
      • Testbench Co-Emulation: SystemC & TLM-2.0
      • Verification Planning and Management
      • VHDL-2008 Why It Matters
    • Formal-Based Techniques

      • Formal Assertion-Based Verification
      • Formal Coverage
      • Formal-Based Technology: Automatic Formal Solutions
      • Getting Started with Formal-Based Technology
      • Handling Inconclusive Assertions in Formal Verification
      • Sequential Logic Equivalence Checking
    • Analog/Mixed Signal

      • AMS Design Configuration Schemes
      • Improve AMS Verification Performance
      • Improve AMS Verification Quality
  • All Forum Topics
    The Verification Community is eager to answer your UVM, SystemVerilog and Coverage related questions. We encourage you to take an active role in the Forums by answering and commenting to any questions that you are able to.
    • UVM Forum

      • Active Questions
      • Solutions
      • Replies
      • No Replies
      • Search
      • UVM Forum
    • SystemVerilog Forum

      • Active Questions
      • Solutions
      • Replies
      • No Replies
      • Search
      • SystemVerilog Forum
    • Coverage Forum

      • Active Questions
      • Solutions
      • Replies
      • No Replies
      • Search
      • Coverage Forum
    • Additional Forums

      • Announcements
      • Downloads
      • AMS Forum
      • OVM Forum
  • Patterns Library
    The Verification Academy Patterns Library contains a collection of solutions to many of today's verification problems. The patterns contained in the library span across the entire domain of verification (i.e., from specification to methodology to implementation—and across multiple verification engines such as formal, simulation, and emulation).
    • Implementation Patterns

      • Environment Patterns
      • Stimulus Patterns
      • Analysis Patterns
      • All Implementation Patterns
    • Specification Patterns

      • Occurrence Property Patterns
      • Order Property Patterns
      • All Specification Patterns
    • Pattern Resources

      • Start Here - Patterns Library Overview
      • Whitepaper - Taking Reuse to the Next Level
      • Verification Horizon - The Verification Academy Patterns Library
      • Contribute a Pattern to the Library
  • All Cookbooks
    Find all the methodology you need in this comprehensive and vast collection. The UVM and Coverage Cookbooks contain dozens of informative, executable articles covering all aspects of UVM and Coverage.
    • UVM Cookbook

      • UVM Basics
      • Testbench Architecture
      • DUT-Testbench Connections
      • Configuring a Test Environment
      • Analysis Components & Techniques
      • End Of Test Mechanisms
      • Sequences
      • The UVM Messaging System
      • Other Stimulus Techniques
      • Register Abstraction Layer
      • Testbench Acceleration through Co-Emulation
      • Debug of SV and UVM
      • UVM Connect - SV-SystemC interoperability
      • UVM Versions and Compatibility
      • UVM Cookbook
    • Coding Guidelines & Deployment

      • Code Examples
      • UVM Verification Component
      • Package/Organization
      • Questa/Compiling UVM
      • SystemVerilog Guidelines
      • SystemVerilog Performance Guidelines
      • UVM Guidelines
      • UVM Performance Guidelines
    • Coverage Cookbook

      • Introduction
      • What is Coverage?
      • Kinds of Coverage
      • Specification to Testplan
      • Testplan to Functional Coverage
      • Bus Protocol Coverage
      • Block Level Coverage
      • Datapath Coverage
      • SoC Coverage Example
      • Requirements Writing Guidelines
      • Coverage Cookbook
  • All Events
    No one argues that the challenges of verification are growing exponentially. What is needed to meet these challenges are tools, methodologies and processes that can help you transform your verification environment. These recorded seminars from Verification Academy trainers and users provide examples for adoption of new technologies and how to evolve your verification process.
    • Upcoming & Featured Events

      • DVCon - February 25th
      • Maximizing Debug Productivity - February 27th
      • Events Calendar
    • On Demand Seminars

      • Low Power Verification Forum
      • Portable Simulus
      • Debug
      • FPGA Verification
      • Stimulus Generation
      • UVM Forum
      • All On-Demand Seminars
    • Recording Archive

      • Portable Stimulus from IP to SoC
      • UVM 1800.2 & Updated UVM Cookbook
      • Wilson Research Group - 2018 Results
      • What Is Formal, And How It Works Under-the-Hood
      • DAC & DVCon
      • All Recordings
    • Mentor Training Center

      • SystemVerilog Assertions
      • SystemVerilog for Verification
      • SystemVerilog UVM
      • SystemVerilog UVM Advanced
      • Instructor-led Training
    • Mentor Learning Center

      • SystemVerilog Vectors and Arrays
      • SystemVerilog Advanced OOP
      • SystemVerilog Functional Coverage
      • UVM Transactions and Sequences
      • UVM Monitors and Agents
      • UVM Tests and Complex Sequences
      • Functional Verification Library
  • About Verification Academy
    The Verification Academy will provide you with a unique opportunity to develop an understanding of how to mature your organization's processes so that you can then reap the benefits that advanced functional verification offers.
    • Blog & News

      • Verification Horizons Blog
      • Academy News
      • Technical Resources
    • Verification Horizons Publication

      • Verification Horizons - November 2018
      • Verification Horizons - June 2018
      • Verification Horizons - March 2018
      • Issue Archive
    • About Us

      • Verification Academy Overview
      • Subject Matter Experts
      • Contact Us
    • Training

      • Questa® & ModelSim®
      • SystemVerilog
      • Functional Verification Library
Ask a Question
SystemVerilog
  • Home /
  • Forums /
  • SystemVerilog /
  • loop evaluation

loop evaluation

SystemVerilog 3457
for loop 5 iteration 1
verif_learner
verif_learner
Forum Access
389 posts
July 12, 2018 at 5:39 am

I would like to know how loop exit conditions in Systemverilog are evaluated.
For example, if I have a for loop

for (idx = 0; idx < queue.size();idx++)

Now within this loop, if I delete entries in the queue, would the compiler check size for every iteration or just once.

My initial hunch was that this is a static evaluation by the compiler and it would loop queue.size() times, as evaluated initially.
But I wrote a small piece of code and looks like compiler evaluates queue.size() for every iteration.

Below is the code:

module x;

integer Q[$] = { 1,2, 3, 5, 6, 7, 8, 9, 10};

initial begin
  for (int idx = 0; idx <= Q.size(); idx++) begin
    $display("idx %d val %d size %d", idx, Q[idx], Q.size());
    Q.delete(idx);
  end
end
endmodule

Below is the output:

Quote:
idx 0 val 1 size 9
idx 1 val 3 size 8
idx 2 val 6 size 7
idx 3 val 8 size 6
idx 4 val 10 size 5

Can anyone provide more insight including any LRM section reference?

Replies

Log In to Reply
zyx
zyx
Forum Access
3 posts
July 12, 2018 at 6:02 am

Pls use Q.size() in loop carefully.
As you see, Q.size() is changed for every iteration.
The following methods are recommended,
1.

  for (int idx = 0; idx <= Q.size(); idx++) begin
    $display("idx %d val %d size %d", idx, Q[idx], Q.size());
  end
  Q.delete();

2.

  while (Q.size()) begin
    $display("idx %d val %d size %d", idx, Q[idx], Q.size());
    Q.delete(idx);
  end
sbellock
sbellock
Full Access
84 posts
July 12, 2018 at 8:05 am

Note that for repeat loops the expression is evaluated only once at the beginning of the loop, although the LRM doesn't explicitly say this.

verif_learner
verif_learner
Forum Access
389 posts
July 12, 2018 at 8:28 am

In reply to sbellock:

Quote:
Note that for repeat loops the expression is evaluated only once at the beginning of the loop, although the LRM doesn't explicitly say this.

Thanks. So, I assume, for other loop types, this is done at the start of each iteration.

Solution

Solution

sbellock
sbellock
Full Access
84 posts
July 12, 2018 at 10:30 am

In reply to verif_learner:

Correct. I've noticed that when Verilog / SystemVerilog borrows concepts from C it assumes the reader is already familiar with how C works, so that the LRM isn't as explicit as the C standard. For comparison, the C standard specifies for-loops as:

Quote:
The statement

for ( clause-1 ; expression-2 ; expression-3 )

behaves as follows: The expression expression-2 is the controlling expression that is evaluated before each execution of the loop body. The expression expression-3 is evaluated as a void expression after each execution of the loop body. If clause-1 is a declaration, the scope of any identifiers it declares is the remainder of the declaration and the entire loop, including the other two expressions; it is reached in the order of execution before the first evaluation of the controlling expression. If clause-1 is an expression, it is evaluated as a void expression before the first evaluation of the controlling expression. Both clause-1 and expression-3 can be omitted. An omitted expression-2 is replaced by a nonzero constant.

© Mentor, a Siemens Business, All rights reserved www.mentor.com

Footer Menu

  • Sitemap
  • Terms & Conditions
  • Verification Horizons Blog
  • LinkedIn Group
SiteLock