<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>UVM Forums</title>
		<link>http://www.uvmworld.org/forums/</link>
		<description>UVM World Official Forum</description>
		<language>en</language>
		<lastBuildDate>Fri, 18 May 2012 04:56:15 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>60</ttl>
		<image>
			<url>http://www.uvmworld.org/forums/images/misc/rss.png</url>
			<title>UVM Forums</title>
			<link>http://www.uvmworld.org/forums/</link>
		</image>
		<item>
			<title>UVM_ANALYSIS port in sequence</title>
			<link>http://www.uvmworld.org/forums/showthread.php?663-UVM_ANALYSIS-port-in-sequence&amp;goto=newpost</link>
			<pubDate>Fri, 18 May 2012 00:45:46 GMT</pubDate>
			<description><![CDATA[Can I declare a uvm_analysis port in sequence ? 
 
I get message like 
 
Error-[ICTTFC] Incompatible complex type usage...]]></description>
			<content:encoded><![CDATA[<div>Can I declare a uvm_analysis port in sequence ?<br />
<br />
I get message like<br />
<br />
Error-[ICTTFC] Incompatible complex type usage<br />
/tools/eda/VCS/vF-2011.12/etc/uvm-1.1/tlm1/uvm_analysis_port.svh, 112<br />
  Incompatible complex type usage in task or function call.<br />
  The following expression is incompatible with the formal parameter of the <br />
  function. The type of the actual is 'class ....'<br />
<br />
Thanks</div>

 ]]></content:encoded>
			<category domain="http://www.uvmworld.org/forums/forumdisplay.php?2-Methodology-and-BCL-Forum">Methodology and BCL Forum</category>
			<dc:creator>bverma</dc:creator>
			<guid isPermaLink="true">http://www.uvmworld.org/forums/showthread.php?663-UVM_ANALYSIS-port-in-sequence</guid>
		</item>
		<item>
			<title>Simulation blocked at waiting statement in main_phase</title>
			<link>http://www.uvmworld.org/forums/showthread.php?662-Simulation-blocked-at-waiting-statement-in-main_phase&amp;goto=newpost</link>
			<pubDate>Thu, 17 May 2012 01:00:23 GMT</pubDate>
			<description>Dear, 
 
I am implementing UVM code for reset test using reset_phase and main_phase with Cadence IES. 
My test sequence injects multiple resets...</description>
			<content:encoded><![CDATA[<div>Dear,<br />
<br />
I am implementing UVM code for reset test using reset_phase and main_phase with Cadence IES.<br />
My test sequence injects multiple resets during simulation.<br />
Main_phase in agent1 waits for event &quot;posedge top.resetn&quot; and another main_phase in agent2 waits for event &quot;negedge top.resetn&quot;.<br />
But two main_phase do not proceed, they are blocked at waiting statement.<br />
What's the problem?<br />
<br />
    Thanks &amp; Regards,<br />
    //JunH Park<br />
<br />
P.S. I attached three contents.<br />
1. my code : test.sv<br />
2. run script<br />
3. irun.log file<br />
<br />
<br />
<br />
1. test.sv<br />
--------------------------------------------------------------------------------------------<br />
import uvm_pkg::*;<br />
`include &quot;uvm_macros.svh&quot;<br />
<br />
// ------------------------------------------<br />
//<br />
// Agent<br />
//<br />
// ------------------------------------------<br />
class simple_agent1 extends uvm_agent;<br />
<br />
   int agent_cnt;<br />
<br />
   `uvm_component_utils(simple_agent1)<br />
<br />
   function new (string name, uvm_component parent);<br />
     super.new(name, parent);<br />
   endfunction : new<br />
<br />
   extern virtual function void build_phase(uvm_phase phase);<br />
   extern virtual task reset_phase(uvm_phase phase);<br />
   extern virtual task main_phase(uvm_phase phase);<br />
<br />
endclass : simple_agent1<br />
<br />
function void simple_agent1::build_phase(uvm_phase phase);<br />
   super.build();<br />
endfunction<br />
<br />
task simple_agent1::reset_phase(uvm_phase phase);<br />
   `uvm_info(get_type_name(), $sformatf(&quot;-----&gt; reset_phase&quot;), UVM_LOW)<br />
   agent_cnt = 1000;<br />
endtask<br />
<br />
task simple_agent1::main_phase(uvm_phase phase);<br />
   `uvm_info(get_type_name(), $sformatf(&quot;main_phase -----&gt;&quot;), UVM_LOW)<br />
   @(posedge top.resetn);<br />
   `uvm_info(get_type_name(), $sformatf(&quot;----- after posedge top.reset&quot;), UVM_LOW)<br />
   forever begin<br />
      agent_cnt++;<br />
      `uvm_info(get_type_name(), $sformatf(&quot;main_phase[%0d]&quot;, agent_cnt), UVM_LOW)<br />
      #10;<br />
   end<br />
   `uvm_info(get_type_name(), $sformatf(&quot;-----&gt; main_phase&quot;), UVM_LOW)<br />
endtask<br />
<br />
// ------------------------------------------<br />
//<br />
// Agent2<br />
//<br />
// ------------------------------------------<br />
class simple_agent2 extends uvm_agent;<br />
<br />
   bit once = 1;<br />
<br />
   `uvm_component_utils(simple_agent2)<br />
<br />
   function new (string name, uvm_component parent);<br />
     super.new(name, parent);<br />
   endfunction : new<br />
<br />
   extern virtual task reset_phase(uvm_phase phase);<br />
   extern virtual task main_phase(uvm_phase phase);<br />
<br />
endclass : simple_agent2<br />
<br />
task simple_agent2::reset_phase(uvm_phase phase);<br />
   `uvm_info(get_type_name(), $sformatf(&quot;-----&gt; reset_phase&quot;), UVM_LOW)<br />
endtask<br />
<br />
task simple_agent2::main_phase(uvm_phase phase);<br />
   `uvm_info(get_type_name(), $sformatf(&quot;main_phase -----&gt;&quot;), UVM_LOW)<br />
<br />
   @(negedge top.resetn);<br />
   `uvm_info(get_type_name(), &quot;&quot;, UVM_LOW)<br />
   `uvm_info(get_type_name(), &quot;&quot;, UVM_LOW)<br />
   `uvm_info(get_type_name(), &quot;--------------- RESET ---------------&quot;, UVM_LOW)<br />
   `uvm_info(get_type_name(), &quot;&quot;, UVM_LOW)<br />
   `uvm_info(get_type_name(), &quot;&quot;, UVM_LOW)<br />
<br />
   `uvm_info(get_type_name(), $sformatf(&quot;-----&gt; main_phase&quot;), UVM_LOW)<br />
<br />
endtask<br />
<br />
// ------------------------------------------<br />
//<br />
// vseqr<br />
//<br />
// ------------------------------------------<br />
class vseqr_c extends uvm_sequencer;<br />
<br />
   `uvm_component_utils(vseqr_c)<br />
<br />
   function new (string name, uvm_component parent);<br />
     super.new(name, parent);<br />
   endfunction : new<br />
<br />
endclass : vseqr_c<br />
<br />
// ------------------------------------------<br />
//<br />
// TB<br />
//<br />
// ------------------------------------------<br />
class tb_c extends uvm_env;<br />
<br />
   `uvm_component_utils(tb_c)<br />
<br />
   vseqr_c        vseqr;<br />
   simple_agent1  agent;<br />
   simple_agent2  agent2;<br />
<br />
   function new (string name, uvm_component parent);<br />
     super.new(name, parent);<br />
   endfunction : new<br />
<br />
   function void build_phase(uvm_phase phase);<br />
      super.build();<br />
      vseqr  = vseqr_c::type_id::create(&quot;vseqr&quot;, this);<br />
      agent  = simple_agent1::type_id::create(&quot;agent&quot;, this);<br />
      agent2 = simple_agent2::type_id::create(&quot;agent2&quot;, this);<br />
   endfunction<br />
<br />
endclass : tb_c<br />
<br />
<br />
// ----------------------------------------<br />
//<br />
// Test case<br />
//<br />
// ----------------------------------------<br />
class simple_test extends uvm_test;<br />
<br />
   bit once = 1;<br />
   tb_c tb;<br />
   int test_cnt;<br />
<br />
   `uvm_component_utils(simple_test)<br />
<br />
   function new(string name, uvm_component parent);<br />
      super.new(name, parent);<br />
   endfunction : new<br />
<br />
   function void build_phase(uvm_phase phase);<br />
      super.build();<br />
      tb = tb_c::type_id::create(&quot;tb&quot;, this);<br />
      uvm_config_db#(uvm_object_wrapper)::set(this, &quot;tb.vseqr.run_phase&quot;, &quot;default_sequence&quot;, simple_vseq_c::type_id::get());<br />
<br />
   endfunction <br />
<br />
endclass : simple_test<br />
<br />
// ------------------------------------------<br />
//<br />
// Verilog top module<br />
//<br />
// ------------------------------------------<br />
module top;<br />
<br />
  reg resetn;<br />
<br />
  initial begin<br />
    run_test(&quot;simple_test&quot;);<br />
  end<br />
<br />
  initial begin<br />
    $shm_open(&quot;test.shm&quot;);<br />
    $shm_probe(&quot;AS&quot;);<br />
  end<br />
<br />
endmodule<br />
<br />
<br />
// ------------------------------------------<br />
//<br />
// TEST sequence - virtual sequence<br />
//<br />
// ------------------------------------------<br />
class simple_vseq_c extends uvm_sequence;<br />
<br />
   `uvm_object_utils_begin(simple_vseq_c)<br />
   `uvm_object_utils_end<br />
<br />
   `uvm_declare_p_sequencer(vseqr_c)<br />
<br />
   function new (string name = &quot;simple_vseq_c&quot;);<br />
     super.new(name);<br />
   endfunction : new<br />
<br />
   virtual task pre_body();<br />
      if (starting_phase != null) begin<br />
         `uvm_info(get_type_name(), &quot;objection is raised&quot;, UVM_LOW)<br />
         starting_phase.raise_objection(this, {&quot;Run sequence '&quot;, get_full_name(), &quot;'&quot;});<br />
      end<br />
   endtask<br />
<br />
   virtual task body();<br />
      `uvm_info(get_type_name(), &quot;Start of body() in vseq&quot;, UVM_LOW)<br />
<br />
      top.resetn = 1;<br />
      `uvm_info(get_type_name(), &quot;RESET = 1&quot;, UVM_LOW)<br />
<br />
      // --- 1st RESET<br />
      #50<br />
      top.resetn = 0;<br />
      `uvm_info(get_type_name(), &quot;RESET = 0&quot;, UVM_LOW)<br />
      #50<br />
      top.resetn = 1;<br />
      `uvm_info(get_type_name(), &quot;RESET = 1&quot;, UVM_LOW)<br />
<br />
      // --- Operation<br />
      #300<br />
<br />
      // --- 2nd RESET<br />
      #50<br />
      top.resetn = 0;<br />
      `uvm_info(get_type_name(), &quot;RESET = 0&quot;, UVM_LOW)<br />
      #50<br />
      top.resetn = 1;<br />
      `uvm_info(get_type_name(), &quot;RESET = 1&quot;, UVM_LOW)<br />
<br />
      // --- Operation<br />
      #400<br />
<br />
      `uvm_info(get_type_name(), &quot;End of body() in vseq&quot;, UVM_LOW)<br />
      <br />
   endtask<br />
<br />
   virtual task post_body();<br />
      if (starting_phase != null) begin<br />
         `uvm_info(get_type_name(), &quot;objection is dropped&quot;, UVM_LOW)<br />
         starting_phase.drop_objection(this, {&quot;Run sequence '&quot;, get_full_name(), &quot;'&quot;});<br />
      end<br />
   endtask<br />
<br />
endclass : simple_vseq_c<br />
<br />
// ------------------------------------------<br />
//<br />
// Define report format<br />
//<br />
// ------------------------------------------<br />
class report_server_c extends uvm_report_server;<br />
   static bit initialized = init();<br />
<br />
   static function bit init();<br />
      uvm_report_global_server global_report_server = new;<br />
      report_server_c mysrv = new;<br />
      global_report_server.set_server(mysrv);<br />
   endfunction: init<br />
<br />
   virtual function string compose_message(uvm_severity severity, <br />
                                           string name,<br />
                                           string id,<br />
                                           string message,<br />
                                           string filename,<br />
                                           int line);<br />
      string msg = &quot;&quot;;<br />
      uvm_severity_type sv;<br />
      sv = uvm_severity_type'(severity);<br />
      $timeformat(-9, 0, &quot;&quot;, 20);<br />
      $sformat(msg, &quot;[%0t] %0s (%0s) %0s&quot;, $time, sv.name, id, message);<br />
      return msg;<br />
   endfunction: compose_message<br />
endclass: report_server_c<br />
--------------------------------------------------------------------------------------------------------------<br />
<br />
2. run_script<br />
--------------------------------------------------------------------------------------------<br />
#!/bin/csh -f<br />
irun \<br />
  test.sv \<br />
  -uvmhome /appl/SOL/INCISIV/INCISIV102s029/tools/uvm-1.1 \<br />
  +UVM_TIMEOUT=1000000 \<br />
  -timescale 1ns/10ps \<br />
  +UVM_VERBOSITY=UVM_LOW \<br />
  -access +rwc<br />
--------------------------------------------------------------------------------------------<br />
<br />
<br />
3. irun.log file<br />
--------------------------------------------------------------------------------------------<br />
irun: 10.21-s010: (c) Copyright 1995-2012 Cadence Design Systems, Inc.<br />
TOOL:	irun	10.21-s010: Started on May 17, 2012 at 08:45:13 KST<br />
irun<br />
	test.sv<br />
	-uvmhome /appl/SOL/INCISIV/INCISIV102s029/tools/uvm-1.1<br />
	+UVM_TIMEOUT=1000000<br />
	-timescale 1ns/10ps<br />
	+UVM_VERBOSITY=UVM_LOW<br />
	-access +rwc<br />
<br />
  ...<br />
<br />
[0] UVM_INFO (RNTST) Running test simple_test...<br />
[0] UVM_INFO (TIMOUTSET) '+UVM_TIMEOUT=1000000' provided on the command line is being applied.<br />
[0] UVM_INFO (simple_vseq_c) objection is raised<br />
[0] UVM_INFO (simple_vseq_c) Start of body() in vseq<br />
[0] UVM_INFO (simple_vseq_c) RESET = 1<br />
[0] UVM_INFO (simple_agent2) -----&gt; reset_phase<br />
[0] UVM_INFO (simple_agent1) -----&gt; reset_phase<br />
[0] UVM_INFO (simple_agent2) main_phase -----&gt;<br />
[0] UVM_INFO (simple_agent1) main_phase -----&gt;<br />
[50] UVM_INFO (simple_vseq_c) RESET = 0<br />
[100] UVM_INFO (simple_vseq_c) RESET = 1<br />
[450] UVM_INFO (simple_vseq_c) RESET = 0<br />
[500] UVM_INFO (simple_vseq_c) RESET = 1<br />
[900] UVM_INFO (simple_vseq_c) End of body() in vseq<br />
[900] UVM_INFO (simple_vseq_c) objection is dropped<br />
[900] UVM_INFO (TEST_DONE) 'run' phase is ready to proceed to the 'extract' phase<br />
<br />
--- UVM Report catcher Summary ---<br />
<br />
<br />
Number of demoted UVM_FATAL reports  :    0<br />
Number of demoted UVM_ERROR reports  :    0<br />
Number of demoted UVM_WARNING reports:    0<br />
Number of caught UVM_FATAL reports   :    0<br />
Number of caught UVM_ERROR reports   :    0<br />
Number of caught UVM_WARNING reports :    0<br />
<br />
--- UVM Report Summary ---<br />
<br />
** Report counts by severity<br />
UVM_INFO :   16<br />
UVM_WARNING :    0<br />
UVM_ERROR :    0<br />
UVM_FATAL :    0<br />
** Report counts by id<br />
[RNTST]     1<br />
[TEST_DONE]     1<br />
[TIMOUTSET]     1<br />
[simple_agent1]     2<br />
[simple_agent2]     2<br />
[simple_vseq_c]     9<br />
Simulation complete via $finish(1) at time 900 NS + 46<br />
/appl/SOL/INCISIV/INCISIV102s029/tools/uvm-1.1/uvm_lib/uvm_sv/sv/base/uvm_root.svh:408     $finish;<br />
ncsim&gt; exit<br />
TOOL:	irun	10.21-s010: Exiting on May 17, 2012 at 08:45:21 KST  (total: 00:00:08)</div>

 ]]></content:encoded>
			<category domain="http://www.uvmworld.org/forums/forumdisplay.php?3-Simulator-Specific-Issues">Simulator Specific Issues</category>
			<dc:creator>jhpark</dc:creator>
			<guid isPermaLink="true">http://www.uvmworld.org/forums/showthread.php?662-Simulation-blocked-at-waiting-statement-in-main_phase</guid>
		</item>
		<item>
			<title>Want to Set NO_REG_TESTS in Environment for some registers</title>
			<link>http://www.uvmworld.org/forums/showthread.php?661-Want-to-Set-NO_REG_TESTS-in-Environment-for-some-registers&amp;goto=newpost</link>
			<pubDate>Wed, 16 May 2012 11:28:07 GMT</pubDate>
			<description>Want to set attribute NO_REG_TESTS for few Status resigters, so that when reset sequence will disable reading the register. 
 
I have made 
...</description>
			<content:encoded><![CDATA[<div>Want to set attribute NO_REG_TESTS for few Status resigters, so that when reset sequence will disable reading the register.<br />
<br />
I have made<br />
<br />
uvm_resource_db#(bit)::set({&quot;REG::&quot;,regmodel.debug  _status.get_full_name(),&quot;.*&quot;},&quot;NO_REG_TESTS&quot;,1,thi  s);<br />
        uvm_resource_db#(bit)::set({&quot;REG::&quot;,regmodel.debug  _status.get_full_name(),&quot;.*&quot;},&quot;NO_REG_HW_RESET_TES  T&quot;,1,this);<br />
<br />
in environment but still i could see debug_status register being tested.<br />
Can anyone give me the solution how to set this attributes.<br />
<br />
-Akshay Rao</div>

 ]]></content:encoded>
			<category domain="http://www.uvmworld.org/forums/forumdisplay.php?2-Methodology-and-BCL-Forum">Methodology and BCL Forum</category>
			<dc:creator>akshay.raoy</dc:creator>
			<guid isPermaLink="true">http://www.uvmworld.org/forums/showthread.php?661-Want-to-Set-NO_REG_TESTS-in-Environment-for-some-registers</guid>
		</item>
		<item>
			<title>uvm_comparer and message verbosity issue</title>
			<link>http://www.uvmworld.org/forums/showthread.php?660-uvm_comparer-and-message-verbosity-issue&amp;goto=newpost</link>
			<pubDate>Mon, 14 May 2012 20:55:12 GMT</pubDate>
			<description><![CDATA[I'm trying to suppress the default messages that occur when you do a 'compare' of two uvm_object's that don't match. It looks like the standard way...]]></description>
			<content:encoded><![CDATA[<div>I'm trying to suppress the default messages that occur when you do a 'compare' of two uvm_object's that don't match. It looks like the standard way to do this would be to create a uvm_comparer object to establish a custom compare policy, but I'm running into problems.<br />
<br />
According to the documentation, there is a 'verbosity' variable within the uvm_comparer object with the purpose of setting the message filter level for such messages... perfect! Unfortunately though... it doesn't work :(<br />
<br />
Below is the actual code from the print_msg() routine of the uvm_comparer object. In the comments for the function, it describes the desired behavior. However, the implementation seems to be wrong, it disregards the 'verbosity' setting altogether, and hardcodes UVM_LOW as the verbosity level:<br />
<br />
<br />
<font face="Courier New"><br />
<div class="bbcode_container">
	<div class="bbcode_description">Quote:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			  // Function: print_msg<br />
  //<br />
  // Causes the error count to be incremented and the message, ~msg~, to be<br />
  // appended to the &lt;miscompares&gt; string (a newline is used to separate<br />
  // messages). <br />
  //<br />
  // If the message count is less than the &lt;show_max&gt; setting, then the message<br />
  // is printed to standard-out using the current verbosity and severity<br />
  // settings. See the &lt;verbosity&gt; and &lt;sev&gt; variables for more information.<br />
<br />
  function void print_msg (string msg);<br />
    result++;<br />
    if(result &lt;= show_max) begin<br />
       msg = {&quot;Miscompare for &quot;, uvm_object::__m_uvm_status_container.scope.get(), &quot;: &quot;, msg};<br />
       uvm_report_info(&quot;MISCMP&quot;, msg, UVM_LOW);<br />
    end<br />
    miscompares = { miscompares, uvm_object::__m_uvm_status_container.scope.get(), &quot;: &quot;, msg, &quot;\n&quot; };<br />
  endfunction
			
		<hr />
	</div>
</div> </font><br />
<br />
<br />
Has anybody else run into this? This looks like a bug in the UVM library, or am I interpretting the desired behavior incorrectly?</div>

 ]]></content:encoded>
			<category domain="http://www.uvmworld.org/forums/forumdisplay.php?2-Methodology-and-BCL-Forum">Methodology and BCL Forum</category>
			<dc:creator>klarson</dc:creator>
			<guid isPermaLink="true">http://www.uvmworld.org/forums/showthread.php?660-uvm_comparer-and-message-verbosity-issue</guid>
		</item>
		<item>
			<title>random variable of type bit with varying width</title>
			<link>http://www.uvmworld.org/forums/showthread.php?659-random-variable-of-type-bit-with-varying-width&amp;goto=newpost</link>
			<pubDate>Sun, 13 May 2012 15:18:42 GMT</pubDate>
			<description>Hi 
In a register sequence i would like to use data of type uvm_reg_data_t where the value of data should be random. 
 
uvm_reg_data_t data; 
 
size...</description>
			<content:encoded><![CDATA[<div>Hi<br />
In a register sequence i would like to use data of type uvm_reg_data_t where the value of data should be random.<br />
<br />
uvm_reg_data_t data;<br />
<br />
size = rg.get_n_bits();<br />
data[size-1:0] = $random;<br />
<br />
What should be the type of the variable size? Should it be a parameter or define?<br />
I would like the value of size to change according to the width of the register. So the width of data should change according to the width of the register.<br />
<br />
What is the best way to do this?</div>

 ]]></content:encoded>
			<category domain="http://www.uvmworld.org/forums/forumdisplay.php?2-Methodology-and-BCL-Forum">Methodology and BCL Forum</category>
			<dc:creator>meenu</dc:creator>
			<guid isPermaLink="true">http://www.uvmworld.org/forums/showthread.php?659-random-variable-of-type-bit-with-varying-width</guid>
		</item>
		<item>
			<title>Locking register blocks and building system-level register blocks.</title>
			<link>http://www.uvmworld.org/forums/showthread.php?658-Locking-register-blocks-and-building-system-level-register-blocks.&amp;goto=newpost</link>
			<pubDate>Fri, 11 May 2012 15:13:37 GMT</pubDate>
			<description><![CDATA[I'm running into an error with my register blocks that works fine for MTI and NCSIM but doesn't work in VCS. 
What's the UVM policy on when a...]]></description>
			<content:encoded><![CDATA[<div>I'm running into an error with my register blocks that works fine for MTI and NCSIM but doesn't work in VCS.<br />
What's the UVM policy on when a lock_model() statement should be called?<br />
<br />
I have a system-level testbench where there are unit-level register blocks that get integrated into the top-level register block. In each unit-level build(), I add all the registers then lock_model(). In the system-level register block I build each unit-level register block, add them as submaps, then lock_model().<br />
<br />
This seems to make sense to me because each unit-level register block does a lock_model() and that exact code can be re-used at the system-level. However, VCS doesn't like that. It only works for me if the lock_model() is done only at the system-level register block.<br />
<br />
Which method is correct? Is it valid to lock unit-level register blocks before locking the top-level register block? I wanted to ask here before filing an issue against VCS.<br />
<br />
VCS generates the following error if the unit-level blocks are locked first:<br />
<font face="Courier New">UVM_FATAL @ 0 ns: reporter [REG/MAP/UNMAPD] Address map &quot;unit_regblk&quot; in block &quot;sys_regblk.unit_regblk&quot; is not mapped in an address map in parent block of type &quot;sys_regblk&quot;.</font><br />
<br />
A related question to this issue is why does VCS have this piece of code checking to see if a map has a parent map when it's not part of the official UVM-1.1 code?<br />
I've search the UVM git repository and can't seem to find anything related to this UNMAPD check that's in the UVM code distributed with VCS.<br />
<br />
Thanks,<br />
Steve</div>

 ]]></content:encoded>
			<category domain="http://www.uvmworld.org/forums/forumdisplay.php?2-Methodology-and-BCL-Forum">Methodology and BCL Forum</category>
			<dc:creator>steveb</dc:creator>
			<guid isPermaLink="true">http://www.uvmworld.org/forums/showthread.php?658-Locking-register-blocks-and-building-system-level-register-blocks.</guid>
		</item>
		<item>
			<title>register reset value issue : uvm_resgister_model  generated usibg ralgen (synopsys)</title>
			<link>http://www.uvmworld.org/forums/showthread.php?657-register-reset-value-issue-uvm_resgister_model-generated-usibg-ralgen-(synopsys)&amp;goto=newpost</link>
			<pubDate>Fri, 11 May 2012 09:41:05 GMT</pubDate>
			<description>Hello All,  
 
      The issue discussed here is regarding  the uvm_register_model that was generated using ralgen script by synopsys.  After reset,...</description>
			<content:encoded><![CDATA[<div>Hello All, <br />
<br />
      The issue discussed here is regarding  the uvm_register_model that was generated using ralgen script by synopsys.  After reset, if the register is accessed  using hierarchy &#8220; &lt;reg_name&gt;.&lt;field_name&gt;.value &#8220;  always returns &#8220;zero&#8221; even for registers that were configured with  &#8220;non_zero&#8221;  reset value. Because of this the coverage collected on the register is wrong. Has anybody faced this issue? The detailed description of the issue is copied below.<br />
<br />
<br />
UVM version used is uvm-1.0p1.<br />
VCS version used is Version E-2011.03-3_Full64<br />
<br />
Detailed description of issue :<br />
---------------------------------------------------------------<br />
The register class copied below was generated using ralgen script.<br />
<br />
Register class description :<br />
------------------------------------------<br />
class register_a extends uvm_reg;<br />
      rand uvm_reg_field A1;<br />
      rand uvm_reg_field A2;<br />
      local uvm_reg_data_t m_current;<br />
      local uvm_reg_data_t m_data;<br />
      local uvm_reg_data_t m_be;<br />
      local bit            m_is_read;<br />
<br />
      <br />
      covergroup cg_vals ();<br />
            option.per_instance = 1;<br />
            A1_value : coverpoint A1.value {<br />
                  bins min = { 16'h0 };<br />
                  bins max = { 16'hFFFF };<br />
                  bins others = { [16'h1:16'hFFFE] };<br />
                  option.weight = 3;<br />
            }<br />
            A2_value : coverpoint A2.value {<br />
                  bins min = { 16'h0 };<br />
                  bins max = { 16'hFFFF };<br />
                  bins others = { [16'h1:16'hFFFE] };<br />
                  option.weight = 3;<br />
            }<br />
      endgroup : cg_vals<br />
<br />
      function new(string name = &quot;rate_chng_timer&quot;);<br />
            super.new(name, 32,build_coverage(UVM_CVR_REG_BITS+UVM_CVR_FIELD_V  ALS));<br />
            if (has_coverage(UVM_CVR_REG_BITS))<br />
                  cg_bits = new();<br />
            if (has_coverage(UVM_CVR_FIELD_VALS))<br />
                  cg_vals = new();<br />
      endfunction: new<br />
<br />
   virtual function void build();<br />
      this.A1 = uvm_reg_field::type_id::create(&quot;A1&quot;);<br />
      this.A1.configure(this, 16, 0, &quot;RW&quot;, 0, 16'hd, 1, 0, 1);<br />
      this.A2 = uvm_reg_field::type_id::create(&quot;A2&quot;);<br />
      this.A2.configure(this, 16, 16, &quot;RW&quot;, 0, 16'hd, 1, 0, 1);<br />
   endfunction: build<br />
<br />
      `uvm_object_utils(register_a)<br />
<br />
<br />
      virtual function void sample(uvm_reg_data_t data,<br />
                                   uvm_reg_data_t byte_en,<br />
                                   bit            is_read,<br />
                                   uvm_reg_map    map);<br />
         if (get_coverage(UVM_CVR_REG_BITS)) begin<br />
            m_current = get();<br />
            m_data    = data;<br />
            m_be      = byte_en;<br />
            m_is_read = is_read;<br />
            cg_bits.sample();<br />
         end<br />
      endfunction<br />
endclass : register_a<br />
<br />
---------------------------------------------------<br />
<br />
Rgeister class snippet :<br />
------------------------------------------------------<br />
The register fields are being configured as below :<br />
      this.A1 = uvm_reg_field::type_id::create(&quot;A1&quot;);<br />
      this.A1.configure(this, 16, 0, &quot;RW&quot;, 0, 16'hd, 1, 0, 1);<br />
      this.A2 = uvm_reg_field::type_id::create(&quot;A2&quot;);<br />
      this.A2.configure(this, 16, 16, &quot;RW&quot;, 0, 16'hd, 1, 0, 1); <br />
<br />
The reset values of the fields as mentioned above is<br />
A1 = 16'hd &amp; A1 = 16'hd.<br />
-----------------------------------------------------------------<br />
<br />
We are facing the following issues :<br />
------------------------------------------------------------------------<br />
Issue1 : After reset, if the register is accessed using the hierarchy :<br />
&lt;register_model_instance_name&gt;.&lt;register_a_instanc  e_name&gt;.A1.value , the value read is always zero. While the expected value is 16'hd.<br />
<br />
Issue 2 : Because of Issue 1 , we see that  the coverage collected on the default value of the register is wrong.<br />
In the coverpoint A1_value , bins &quot;others&quot;  should have been hit because reset value of the register is 16'hd but always bins &quot;min&quot; is hit which is wrong. <br />
---------------------------------------------------------------------------<br />
<br />
Regards<br />
Divya Dhiran</div>

 ]]></content:encoded>
			<category domain="http://www.uvmworld.org/forums/forumdisplay.php?2-Methodology-and-BCL-Forum">Methodology and BCL Forum</category>
			<dc:creator>ddhiran</dc:creator>
			<guid isPermaLink="true">http://www.uvmworld.org/forums/showthread.php?657-register-reset-value-issue-uvm_resgister_model-generated-usibg-ralgen-(synopsys)</guid>
		</item>
		<item>
			<title>UVM SystemVerilog Basics in 24 short videos</title>
			<link>http://www.uvmworld.org/forums/showthread.php?656-UVM-SystemVerilog-Basics-in-24-short-videos&amp;goto=newpost</link>
			<pubDate>Thu, 10 May 2012 16:30:32 GMT</pubDate>
			<description>All, 
 
Axel Scherer manages a team of UVM experts and has recorded their collected experience in a series of 24 UVM SystemVerilog basics videos. ...</description>
			<content:encoded><![CDATA[<div>All,<br />
<br />
Axel Scherer manages a team of UVM experts and has recorded their collected experience in a series of 24 UVM SystemVerilog basics videos.  Each video is between 2 and 5 minutes making them easy to view when you have some free time, and easy to review when you're looking for a refresher.<br />
<br />
The videos are open to all viewers with no registration required. Just a little Cadence EDA360 to help the UVM community.<br />
<br />
<a href="http://www.youtube.com/playlist?list=PL7FE0CE1170C06FDE" target="_blank">http://www.youtube.com/playlist?list=PL7FE0CE1170C06FDE</a> <br />
<br />
The initial set of topics include the following and we expect to do more in the future:<br />
<ol class="decimal"><li>Introducing UVM</li>
<li>Example DUT</li>
<li>UVM Environment</li>
<li>Interface UVC</li>
<li>Collector</li>
<li>Monitor</li>
<li>Sequence Item</li>
<li>Sequence</li>
<li>Driver</li>
<li>Sequencer</li>
<li>Agent</li>
<li>Agent types</li>
<li>Interface UVC environment</li>
<li>Virtual Sequencer - Sequence</li>
<li>Module UVC</li>
<li>Scoreboard</li>
<li>DUT Functional Coverage</li>
<li>Testbench</li>
<li>Test</li>
<li>Configuration</li>
<li>Factory</li>
<li>Phases</li>
<li>Objections</li>
<li>Virtual Interface</li>
</ol><br />
=Adam Sherilog<br />
Cadence Verification Product Director</div>

 ]]></content:encoded>
			<category domain="http://www.uvmworld.org/forums/forumdisplay.php?4-UVM-Commercial-Announcements">UVM Commercial Announcements</category>
			<dc:creator>Adam Sherilog</dc:creator>
			<guid isPermaLink="true">http://www.uvmworld.org/forums/showthread.php?656-UVM-SystemVerilog-Basics-in-24-short-videos</guid>
		</item>
		<item>
			<title>Sequencer Arbitration</title>
			<link>http://www.uvmworld.org/forums/showthread.php?655-Sequencer-Arbitration&amp;goto=newpost</link>
			<pubDate>Thu, 10 May 2012 15:09:11 GMT</pubDate>
			<description>Hi, 
 
Can anyone provide any information about the arbitration scheme used in uvm_sequencer_base?  It appears that I am getting a deadlock between...</description>
			<content:encoded><![CDATA[<div>Hi,<br />
<br />
Can anyone provide any information about the arbitration scheme used in uvm_sequencer_base?  It appears that I am getting a deadlock between the sequence/driver handshaking, as start_item is never returning.  I was looking through the code and it appears to be blocking in the m_wait_for_arbitration_completed method of uvm_sequencer_base, at <br />
    wait(lock_arb_size != m_lock_arb_size );<br />
If anyone has any insight, I would really appreciate it<br />
<br />
Thanks,<br />
Tim</div>

 ]]></content:encoded>
			<category domain="http://www.uvmworld.org/forums/forumdisplay.php?2-Methodology-and-BCL-Forum">Methodology and BCL Forum</category>
			<dc:creator>tkramer</dc:creator>
			<guid isPermaLink="true">http://www.uvmworld.org/forums/showthread.php?655-Sequencer-Arbitration</guid>
		</item>
		<item>
			<title>referencing an array of uvm_analysis_imp in a scoreboard</title>
			<link>http://www.uvmworld.org/forums/showthread.php?654-referencing-an-array-of-uvm_analysis_imp-in-a-scoreboard&amp;goto=newpost</link>
			<pubDate>Tue, 08 May 2012 22:08:12 GMT</pubDate>
			<description><![CDATA[I have been working with SV UVM for about 6 months now, over that time I've learned a combination of 1.0 and 1.1 so things are getting a bit...]]></description>
			<content:encoded><![CDATA[<div>I have been working with SV UVM for about 6 months now, over that time I've learned a combination of 1.0 and 1.1 so things are getting a bit confused.  I am building a new scoreboard component working with new interface UVCs I created.  I have a DUT with multiple identical interfaces which I want to feed into my scoreboard.  I am trying to figure out how these uvm_analysis_imp classes are built and what I can access, in particular how I can access the index of a given handle.  My thought is something like this:<br />
<br />
class packet_scoreboard #(parameter NUM_IF=2) extends uvm_scoreboard;<br />
<br />
`uvm_analysis_imp_decl(_pkt_in)<br />
<br />
uvm_analysis_imp_pkt_in #( packet_in, packet_scoreboard ) pkt_in[NUM_IF-1:0];<br />
<br />
...<br />
<br />
function new ( string name = &quot;packet_scoreboard&quot; );<br />
   super.new(name);<br />
   for ( int i = 0; i &lt; NUM_IF; i++ )<br />
      pkt_in[i] = new( $sformatf(&quot;pkt_in[%0d]&quot;, i), this);<br />
endfunction<br />
<br />
virtual function void write_pkt_in( packet_in pkt );<br />
   ...<br />
   uvm_report_info( get_type_name(), $sformatf(&quot;Received packet on interface %0d&quot;, ???), UVM_DEBUG );<br />
   ...<br />
endfunction<br />
<br />
endclass<br />
<br />
Thanks,<br />
Matt</div>

 ]]></content:encoded>
			<category domain="http://www.uvmworld.org/forums/forumdisplay.php?5-UVM-SystemVerilog-Discussions">UVM SystemVerilog Discussions</category>
			<dc:creator>makers78</dc:creator>
			<guid isPermaLink="true">http://www.uvmworld.org/forums/showthread.php?654-referencing-an-array-of-uvm_analysis_imp-in-a-scoreboard</guid>
		</item>
		<item>
			<title>register access</title>
			<link>http://www.uvmworld.org/forums/showthread.php?653-register-access&amp;goto=newpost</link>
			<pubDate>Tue, 08 May 2012 09:18:44 GMT</pubDate>
			<description>Hi, 
 
from UVM examples on codec, I found some code for register model access like this: 
 
if (!regmodel.RxStatus.Align.get()) begin 
  ...</description>
			<content:encoded><![CDATA[<div>Hi,<br />
<br />
from UVM examples on codec, I found some code for register model access like this:<br />
<br />
if (!regmodel.RxStatus.Align.get()) begin<br />
   regmodel.IntMask.set('h000);<br />
   regmodel.IntMask.SA.set('b1);<br />
   regmodel.IntMask.update(status);<br />
...<br />
end<br />
...<br />
regmodel.IntSrc.write(status, -1);<br />
..<br />
<br />
My questions are:<br />
1) regmodel.IntMask.set('h000) has set the model to 000, why there is a code to set SA field to 'b1 followed? I guess it could be finished by regmodel.IntMask.set('h001), is my guess right?<br />
<br />
2) suppose dut is different from register model for IntMask, <br />
   regmodel.IntMask.set('h00f);<br />
   regmodel.IntMask.update(status);<br />
will write 'h00f to dut and update register model at the same time with same value, it this correct?<br />
<br />
3) In code &quot;regmodel.IntSrc.write(status, -1)&quot;, what does &quot;-1&quot; should be? from simulation (incisive/11.10.002) I found value 0x1ff is written to dut, why? <br />
<br />
thanks</div>

 ]]></content:encoded>
			<category domain="http://www.uvmworld.org/forums/forumdisplay.php?2-Methodology-and-BCL-Forum">Methodology and BCL Forum</category>
			<dc:creator>chenyong</dc:creator>
			<guid isPermaLink="true">http://www.uvmworld.org/forums/showthread.php?653-register-access</guid>
		</item>
		<item>
			<title>Verify shared address map with stand-alone and unified enable signals by RGM or REG?</title>
			<link>http://www.uvmworld.org/forums/showthread.php?652-Verify-shared-address-map-with-stand-alone-and-unified-enable-signals-by-RGM-or-REG&amp;goto=newpost</link>
			<pubDate>Tue, 08 May 2012 07:52:45 GMT</pubDate>
			<description>There are 3 channels in my DUT, these 3 channels have the same register files, which have the same address map. 
There are 4 CE (channel enable...</description>
			<content:encoded><![CDATA[<div>There are 3 channels in my DUT, these 3 channels have the same register files, which have the same address map.<br />
There are 4 CE (channel enable signal) on the interface, CE0, CE1, CE2 and CE_all.<br />
There is only one address signal and one write data signal, like normal bus.<br />
<br />
When a write transaction is initiated ...<br />
  If CE_all is asserted, the selected registers in all 3 channels are written.<br />
  If only CE0 is asserted, only the selected register in channel 0 is written.<br />
  If only CE1 is asserted, only the selected register in channel 1 is written.<br />
  If only CE2 is asserted, only the selected register in channel 2 is written.<br />
<br />
The same address on the bus, but may have 4 different effects.<br />
<br />
I am not sure if I can implement the register files for this specification by Cadence's RGM or UVM_REG?<br />
<br />
The most challenging thing I can imagine so far is that CE_all need to update all register database.<br />
<br />
Shared address map is also a problem, maybe using different register database can help, but contradict CE_all case.<br />
<br />
Please kindly help.<br />
Thanks.</div>

 ]]></content:encoded>
			<category domain="http://www.uvmworld.org/forums/forumdisplay.php?5-UVM-SystemVerilog-Discussions">UVM SystemVerilog Discussions</category>
			<dc:creator>leo_chen</dc:creator>
			<guid isPermaLink="true">http://www.uvmworld.org/forums/showthread.php?652-Verify-shared-address-map-with-stand-alone-and-unified-enable-signals-by-RGM-or-REG</guid>
		</item>
		<item>
			<title>separate logging verbosity for fileio and STDOUT</title>
			<link>http://www.uvmworld.org/forums/showthread.php?651-separate-logging-verbosity-for-fileio-and-STDOUT&amp;goto=newpost</link>
			<pubDate>Mon, 07 May 2012 22:50:16 GMT</pubDate>
			<description>Is there a way to specify accomplish a lower verbosity for messaging to STDOUT, and a higher verbosity for messaging to files? 
 
Thanks a lot for...</description>
			<content:encoded><![CDATA[<div>Is there a way to specify accomplish a lower verbosity for messaging to STDOUT, and a higher verbosity for messaging to files?<br />
<br />
Thanks a lot for your suggestions!</div>

 ]]></content:encoded>
			<category domain="http://www.uvmworld.org/forums/forumdisplay.php?2-Methodology-and-BCL-Forum">Methodology and BCL Forum</category>
			<dc:creator>naveeng</dc:creator>
			<guid isPermaLink="true">http://www.uvmworld.org/forums/showthread.php?651-separate-logging-verbosity-for-fileio-and-STDOUT</guid>
		</item>
		<item>
			<title>Error loading design during QuestaSim simulation of VHDL Design with SystemVerilog TB</title>
			<link>http://www.uvmworld.org/forums/showthread.php?650-Error-loading-design-during-QuestaSim-simulation-of-VHDL-Design-with-SystemVerilog-TB&amp;goto=newpost</link>
			<pubDate>Mon, 07 May 2012 13:35:17 GMT</pubDate>
			<description>Hello, 
 
I am trying to create a UVM testbench on a VHDL Design.  
I have created a make file to simulate the design with UVM testbench.  
I am...</description>
			<content:encoded><![CDATA[<div>Hello,<br />
<br />
I am trying to create a UVM testbench on a VHDL Design. <br />
I have created a make file to simulate the design with UVM testbench. <br />
I am using Questasim 10.1 for the simulations.<br />
<br />
The make file looks like this<br />
&quot;<br />
vlib work <br />
vcom -93 -f compile_source.f <br />
vlog  -f compile_tb.f<br />
vsim -c +UVM_TESTNAME=rcc_base_test rccgpu badge_tb_top<br />
&quot;<br />
<br />
When I run the command , I am able to compile VHDL, SystemVerilog Code. <br />
However I get the following error during elaboration.<br />
<br />
&quot;<br />
Top level modules:<br />
        badge_tb_top<br />
/tools/mentor/questa_sim_10.1/questa_sim/linux/vsim -c +UVM_TESTNAME=rcc_base_test rccgpu badge_tb_top<br />
Reading /tools/mentor/questa_sim_10.1/questa_sim/tcl/vsim/pref.tcl <br />
<br />
# 10.1<br />
<br />
# vsim +UVM_TESTNAME=rcc_base_test -c rccgpu badge_tb_top <br />
# ** Note: (vsim-3812) Design is being optimized...<br />
# //  Questa Sim<br />
# //  Version 10.1 linux Dec  5 2011<br />
# //<br />
# //  Copyright 1991-2011 Mentor Graphics Corporation<br />
# //  All Rights Reserved.<br />
# //<br />
# //  THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION<br />
# //  WHICH IS THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS<br />
# //  LICENSORS AND IS SUBJECT TO LICENSE TERMS.<br />
# //<br />
# Loading std.standard<br />
# Loading std.textio(body)<br />
# Loading ieee.std_logic_1164(body)<br />
# Loading ieee.std_logic_arith(body)<br />
# Loading ieee.std_logic_unsigned(body)<br />
# Loading work.badgefuncpkg(body)<br />
# Loading work.badgepkg<br />
# Loading ieee.numeric_std(body)<br />
# Loading work.rccgpu(rtl)#1<br />
# Loading sv_std.std<br />
# Loading mtiUvm.uvm_pkg<br />
# Loading work.mem_if_sv_unit(fast)<br />
# Loading work.badge_tb_top(fast)<br />
# Loading mtiUvm.questa_uvm_pkg(fast)<br />
# ** Error: (vsim-3171) Could not find machine code for [COLOR=&quot;rgb(255, 140, 0)&quot;]'/home/prra/trunk/badgeComponent/testbench/uvm_tb_rccgpu/work.rccgpu(rtl)'.<br />
# Error loading design<br />
Error loading design<br />
make: *** [questa] Error 12[/COLOR]<br />
&quot;<br />
<br />
I have also created a wrapper file in SystemVerilog and instantiated the wrapper in the top testbench file. <br />
Please help.</div>

 ]]></content:encoded>
			<category domain="http://www.uvmworld.org/forums/forumdisplay.php?3-Simulator-Specific-Issues">Simulator Specific Issues</category>
			<dc:creator>pratyaksharn</dc:creator>
			<guid isPermaLink="true">http://www.uvmworld.org/forums/showthread.php?650-Error-loading-design-during-QuestaSim-simulation-of-VHDL-Design-with-SystemVerilog-TB</guid>
		</item>
		<item>
			<title>IUS92 SV support:</title>
			<link>http://www.uvmworld.org/forums/showthread.php?649-IUS92-SV-support&amp;goto=newpost</link>
			<pubDate>Fri, 04 May 2012 04:12:45 GMT</pubDate>
			<description><![CDATA[Hello, 
   Does IUS92  support sv's process class? 
   Does IUS92  support  template class using virtual class? 
 
   Is there any method to make...]]></description>
			<content:encoded><![CDATA[<div>Hello,<br />
   Does IUS92  support sv's process class?<br />
   Does IUS92  support  template class using virtual class?<br />
<br />
   Is there any method to make IUS92 sim uvm1.1 ? I encounter lots of errors using ius92 and uvm1.1</div>

 ]]></content:encoded>
			<category domain="http://www.uvmworld.org/forums/forumdisplay.php?3-Simulator-Specific-Issues">Simulator Specific Issues</category>
			<dc:creator>shidb02</dc:creator>
			<guid isPermaLink="true">http://www.uvmworld.org/forums/showthread.php?649-IUS92-SV-support</guid>
		</item>
	</channel>
</rss>

