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
      • UVM Framework
      • UVM Connect
      • FPGA Verification
      • Coverage
    • Techniques & Tools

      • Verification IP
      • Simulation-Based Techniques
      • Planning, Measurement, and Analysis
      • Formal-Based Techniques
      • Debug
      • Clock-Domain Crossing
      • 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)

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

      • Introduction to ISO 26262
      • Introduction to DO-254
      • Clock-Domain Crossing Verification
      • Portable Stimulus Basics
      • Power Aware CDC Verification
      • Power Aware Verification
      • SystemVerilog OOP for UVM Verification
    • Additional Courses

      • Assertion-Based Verification
      • An Introduction to Unit Testing with SVUnit
      • Evolving FPGA Verification Capabilities
      • Metrics in SoC Verification
      • 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-Based Technology: Automatic Formal Solutions
      • Formal Coverage
      • 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
      • 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 Horizons - 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

      • Low Power Verification - 4/29
      • Fault Campaign for Mixed-Signal - 5/4
      • User2User - 5/26
      • Webinar Calendar
    • On-Demand Webinars

      • CDC+RDC Analysis
      • Basic Abstraction Techniques
      • Safety Analysis Techniques
      • QVIP Workflow and Debug for PCIe
      • Writing a Proxy-driven Testbench
      • Achieving High Defect Coverage
      • Visualizer Features
      • All On-Demand Webinars
    • Recording Archive

      • Siemens EDA 2021 Functional Verification Webinar Series
      • Improving Your SystemVerilog & UVM Skills
      • Should I Kill My Formal Run?
      • Visualizer Debug Environment
      • Industry Data & Surveys
      • All Recordings
    • Conferences

      • DVCon 2021
      • DVCon 2020
      • DAC 2019
      • All Conferences
    • Mentor Learning Center

      • SystemVerilog Fundamentals
      • SystemVerilog UVM
      • View all Learning Paths
  • 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
      • Academy Newsletter
      • Technical Resources
    • Verification Horizons Publication

      • Verification Horizons - March 2021
      • Verification Horizons - November 2020
      • Verification Horizons - July 2020
      • Issue Archive
    • About Us

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

      • Questa Basic
      • Questa Advanced
      • Mastering Questa
Ask a Question
UVM
  • Home
  • Forums
  • UVM
  • clock edge is not getting detected inside forever loop

clock edge is not getting detected inside forever loop

UVM 5686
uvm_monitor 4 uvm virtual interface 8
rakesh2learn
rakesh2learn
Full Access
30 posts
September 02, 2016 at 2:50 am

I am trying a simple example in UVM. I am expecting the clock edge to be detected and print the transactions collected from interface. But, the posedge of clock written inside task 'run_phase' is not detected, in the sense, nothing after that clock edge statement is executed. FYI, I don't have any clocking block declared in the interface. If I don't use clock edge then it will become an infinite loop and print forever. How to fix this ? Thanks.

class ahb_monitor extends uvm_monitor;
 
	`uvm_component_utils(ahb_monitor);
 
	uvm_analysis_port#(ahb_tx) ap;	 // analysis port used for broadcasting
 
	virtual ahb_if vif;
 
	ahb_tx tx;
 
	function new (string name ="", uvm_component parent = null); // constructing monitor component
 
		super.new(name,parent);  
 
		ap = new ("ap", this); // object for analysis port
 
	endfunction
 
	function void build_phase(uvm_phase phase);
 
		uvm_config_db#(virtual ahb_if)::get(this,"","phy_intf_var",vif);
 
	endfunction
 
	task run_phase(uvm_phase phase);
 
		  //$display("mon run phase when reset high at %g", $time);
		forever begin
                        tx = ahb_tx::type_id::create("tx"); // for every new collection, new tx item is created 
			@(posedge vif.hclk);	// here is the problem 
 
				tx.addr = vif.addr;
				tx.dataQ = vif.dataQ;
				tx.wr_rd = vif.wr_rd;
				tx.burst_type = vif.burst_type;
				$display("displaying monitor contents");
				tx.print();
				$display("------------------------------");
                                ap.write(tx); // broadcast Tx
 
		end 
 
	endtask
endclass

Replies

Log In to Reply
MayurKubavat
MayurKubavat
Full Access
223 posts
September 02, 2016 at 3:40 am

In reply to rakesh2learn:

It is possible that the clock 'hclk' is not getting generated and is not connected to top level clock.

- Add a check to see if you are getting interface pointer from configuration database,

if(!uvm_config_db#(virtual ahb_if)::get(this,"","phy_intf_var",vif))
  `uvm_fatal("AHB/MON", "Cannot get virtual interface.");

www.linkedin.com/in/mayurkubavat

chr_sue
chr_sue
Full Access
3328 posts
September 02, 2016 at 4:22 am

In reply to rakesh2learn:

An additional remark: Move the creation of your transaction outside of the forever loop:
task run_phase(uvm_phase phase);
tx = ahb_tx::type_id::create("tx"); // for every new collection, new tx item is created
forever begin
@(posedge vif.hclk); // here is the problem
tx.addr = vif.addr;
...
end
endtask

rakesh2learn
rakesh2learn
Full Access
30 posts
September 02, 2016 at 4:23 am

In reply to mayurkubavat:

I am not getting UVM fatal print, so which means I am getting virtual interface to monitor, right ?
Below you can see the top and interface. As you can see I have included hclk in interface. Any other reason for the cause of this issue ?

interface ahb_if (input bit hclk, hresetn);
 
	bit [31:0] addr;
	bit [31:0] dataQ;
	bit wr_rd;
	bit [2:0] burst_type;	
 
endinterface

module top;
 
	`include "test_lib.sv" 
 
	reg hclk, hresetn;		
 
	initial begin 
 
		hclk = 1'b0;
		forever begin
 
			 #5 hclk = ~hclk;
	 	end
 
	end 
 
	initial begin   // active low reset generation 
 
		hresetn = 1'b0; 
		repeat(10) @(posedge hclk); 
		hresetn = 1'b1;
	end 	
 
	ahb_if inf(hclk, hresetn); // instantiating interface
 
 
	initial begin
 
		uvm_config_db #(virtual ahb_if)::set(null,"*","phy_intf_var",inf);  // registering physical interface to config_db with field name phy_intf_var
	end 
 
	initial begin
 
		run_test();
	end
 
 
endmodule
rakesh2learn
rakesh2learn
Full Access
30 posts
September 02, 2016 at 4:49 am

In reply to chr_sue:

Thanks. Also updated the code in my question.

MayurKubavat
MayurKubavat
Full Access
223 posts
September 02, 2016 at 4:51 am

In reply to rakesh2learn:

Another thought is,

- You are not using monitor component at all? Add and check for any other display messages. Like, "MON: getting interface", "MON: Entered run phase" etc. See if you are creating monitor component, and not just compiling!

- Or run phase is ending immediately, in that case check if you are using objections correctly.

phase.raise_objection(this);
  // Add multiple clock delay
phase.drop_objection(this);

- It is better to use setting of virtual interface and run_test() in same initial block as it might cause fail to get method because of execution order of initial block.

initial
  begin
    uvm_config_db #(virtual ahb_if)::set(null,"*","phy_intf_var",inf);
    run_test();
end

www.linkedin.com/in/mayurkubavat

Srini @ CVCblr.com
Srini @ CVCblr.com
Full Access
248 posts
September 02, 2016 at 8:28 am

In reply to rakesh2learn:

I guess you have the classical setter-no-getters issue here. The set should be done to the agent level typically. I see you are doing at null & * - sort of global name-space. You should be able to debug this quite easily through check_config_settings, see my DVCon US slides @ http://www.go2uvm.org/2016/07/advanced-uvm-tutorial-from-dvcon-us-2016-slides-now-available/

Good Luck
Srini
www.go2uvm.org

rakesh2learn
rakesh2learn
Full Access
30 posts
September 02, 2016 at 8:37 am

In reply to mayurkubavat:

I am getting display messages like for example, 'getting interface' inside build phase and 'entered run phase'. I have made run_test and set interface in the same initial block as suggested. No monitor output yet. Could you check if I am raising and dropping objections correctly as shown below:

class ahb_base_seq extends uvm_sequence #(ahb_tx); // created base sequence
 
	`uvm_object_utils(ahb_base_seq);
 
	function new (string name ="");  
 
		super.new(name); 
 
	endfunction
 
	task pre_body();
 
		if (starting_phase !=null)
 
			starting_phase.raise_objection(this);
 
	endtask
 
	task post_body();
 
		if (starting_phase !=null)
 
			starting_phase.drop_objection(this);
 
	endtask
 
endclass
 
// functional sequence
class ahb_10_tx_seq extends ahb_base_seq;
 
	`uvm_object_utils(ahb_10_tx_seq);
 
	function new (string name ="");  
 
		super.new(name); 
 
	endfunction
 
	task body();
 
		super.pre_body(); 
		repeat(10) `uvm_do_with(req,{ req.wr_rd==1'b1; }); 
		super.post_body();
 
	endtask
 
endclass
cgales
cgales
Forum Moderator
1606 posts
September 02, 2016 at 8:45 am

In reply to rakesh2learn:

Never raise objections in a sequence. Objections should be raised and dropped only at the test level. This is due to the performance overhead related to the raising and dropping of the objection, as well as the complexity required to determine if it should be raised or dropped.

Solution

Solution

rakesh2learn
rakesh2learn
Full Access
30 posts
September 03, 2016 at 2:29 am

I found the problem. Sorry, this was due to my carelessness. The driver was finishing at zero simulation time, because while driving I didn't include clock edge in driver. Thanks to all of your valuable comments, I learned new things from your answers. As I didn't post my driver code here so all the answers/suggestions are valid and helped me to narrow down to the root cause of the problem. Thank you all.

rakesh2learn
rakesh2learn
Full Access
30 posts
September 03, 2016 at 5:37 am

In reply to Srini @ CVCblr.com:

I used NULL while setting interface in top file because here the context represents its parent name and there is no parent for top file and that is why I kept it NULL and for instance argument I used *, so that the interface is set to all instances below top. This is my understanding. Correct me if I am wrong.

Siemens Digital Industries Software

Siemens Digital Industries Software

##TodayMeetsTomorrow

Solutions

  • Cloud
  • Mendix
  • Siemens EDA
  • MindSphere
  • Siemens PLM
  • View all portfolio

Explore

  • Digital Journeys
  • Community
  • Blog
  • Online Store

Siemens

  • About Us
  • Careers
  • Events
  • News and Press
  • Newsletter
  • Customer Stories

Contact Us

USA:

phone-office +1 800 547 3000

See our Worldwide Directory

  • Contact Us
  • Support Center
  • Give us Feedback
©2021 Siemens Digital Industries Software. All Rights Reserved.
Terms of Use Privacy Cookie Policy