Run-time configurations in OVM

Overriding or changing the existing configuration of VE components from testcases/sequences is something needed every now and then while working in system verilog based environment.  Also in many circumstances we need to share some variables/flags between multiple components of env(ovm_env) not necessarily through the TLMs.

Some of the examples are like,

· Enabling/disabling specific streams of scoreboard.

· Enabling/disabling specific checkers after specific sequences are executed.

· Informing driver/sequencer to inject error into some Nth packet  etc...

Let’s see and understand how this could be achieved in OVM based system-verilog environment. OVM’s configuration table and its methods provide easy way to achieve this.

Let’s assume that one needs to disable the specific stream of scoreboard using OVM’s configuration table from testcases.

Step 1: Define a configuration class containing all the parameters/configuration fields which need to be changed run-time,

class xyz_config extends ovm_object;

  bit sb_stream_disable;

  `ovm_object_utils_begin(xyz_config)

    `ovm_field_int(sb_stream_disable, OVM_ALL_ON)

  `ovm_object_utils_end

  //Constructor

  ….

endclass : xyz_config

Based on the complexity of the environment you can also create multiple configuration classes to configure specific agents or specific set of components.

Step 2: Use the configuration class in scoreboard to disable the applicable data-stream.

class xyz_scoreboard extends ovm_scoreboard;

  xyz_config cfg;

  `ovm_component_utils_begin(xyz_scoreboard)

    `ovm_object_utils(cfg, OVM_ALL_ON)

  `ovm_component_utils_end

  //Constructor

  //Run thread

  task run();

  //Use the cfg.disable_sb_stream to disable the scoreboard data stream

  ....

  endtask : run

endclass : xyz_scoreboard

As it is specified here, `ovm_object_utils is must here. It 'gets' the configuration instance from the OVM’s configuration table for ‘this` class.

Step 3: From the OVM based testcases disable the scoreboard at required point of time in the simulation.

class test extends ovm_test;

  xyz_cfg cfg = new();

  function void build();

    super.build();

    //Sharing the config. instance at target path.

    set_config_obect(“env.scoreboard”,”cfg”,cfg,,0);

  endfunction : build

  task run();

    //Some test code

    //After some time disable the scoreboard stream

    cfg.disable_sb_stream = 1;

   //Other code

  endtask : run

endclass : test

As you can see, one needs to ‘new’ the config. instance and share it with required classes using set_config_object method of ovm. The usage of set_config_object function with proper arguments is one of the crucial point here.
Let’s understand what arguments should be passed to this function,

1st argument is a string which specifies the target path where configuration needs to be shared. One could also use wildcard expressions here as env.*

2nd argument specifies the string-instance name of the object.

3rd argument is the object handle.

4th argument specifies whether object needs to be cloned before passing it to targeted component. For run-time passing set it to 0. This means all the components in env. which attempt to get the "cfg" from configuration table will use the same object throughout the simulation.

In cases where you have only few fields to share, you can also use OVM’sset_field_int and get_field_int methods.

The only additional step needed to pass the config. runtime is to call theapply_config_settings() method on the targeted component, as explained inthis thread under OVM forum.

Enjoy Configuring!!

Broadcom releases satellite-constellation location IC

8521338394_ec9d0e1f06_c Broadcom Corporation has introduced a Global Navigation Satellite System (GNSS) chip, designated BCM47531, that generates positioning data from five satellite constellations simultaneously (GPS, GLONASS, QZSS, SBAS and BeiDou), totaling 88 satellites. The newly added Chinese BeiDou constellation increases the number of satellites available to a smartphone, enhancing navigation accuracy, particularly in urban settings where buildings and obstructions can cause interference.

The company’s new GNSS SoC is based on its widely deployed architecture that reduces the “time to first fix” (TTFF) and allows smartphones to quickly establish location and rapidly deliver mapping data. The SoC also features a tri-band tuner that enables smartphones to receive signals from all major navigation bands (GPS, GLONASS, QZSS, SBAS, and BeiDou) simultaneously.

The BCM47531 platform is available with Broadcom’s Location Based Services (LBS) technology that delivers satellite assistance data to the device and provides an initial fix time within seconds, instead of the minutes that may be required to receive orbit data from the satellites themselves.

The BCM47531 brings a number of powerful features to the table:

  • Simultaneous support of five constellations (GPS, GLONASS, QZSS,SBAS and BeiDou) allows for position calculations based on measurements from any of 88 satellites.
  • Broadcom's tri-band tuner brings the ability to receive all navigation bands, GPS (which includes QZSS and SBAS), GLONASS and BeiDou simultaneously to the commercial GNSS market without having to reconfigure and hop between bands.
  • Utilizes BeiDou signals for up to 2x improved positioning accuracy.
  • Best-in-class Assisted GNSS (AGNSS) data available worldwide from Broadcom's hosted reference network.
  • Allows a device to interchangeably use the best signal from any satellite regardless of the constellation, ensuring better accuracy in urban and mountainous environments.
  • Features advanced digital signal processing for interference rejection that enables satellite signal search and tracking during LTE transmission.
  • Leverages Broadcom's connectivity solutions including Wi-Fi, Bluetooth Smart, Near Field Communications (NFC), Instant Messaging System (IMES) and handset inertial sensor data for best indoor/outdoor location.

Nanobubbles with graphene - diamond substrate

Observing HighPressure Chemistry in Graphene Bubbles<br /> Scientists at the National University of Singapore have come up with a way to trap liquids inside nanoscale bubbles made of graphene, topping a diamond substrate. "We discovered a way to bond the two materials together by heating the diamond to its reconstruction temperature where its surface hydrogen is desorbed," said Kian Ping Loh, the research team leader.

The team were able to use these graphene bubbles as high pressure chemical reactors to perform reactions that are normally forbidden, such as fullerene polymerisation.

Anvil cells generate extremes of pressure by applying a force over as small an area as possible. As one of the thinnest elastic membranes in existence, graphene can be strain-engineered to form nanometre bubbles; spaces small enough to reach extremes of pressure when heated.2 Thanks to the bubbles’ impermeability to almost any fluid, this implies that graphene could be used to seal and pressurise fluids in nano-sized liquid cells.

Read more >>

Popular Posts