• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Functional Verification
  3. propagating data when generating VE

Stats

  • Locked Locked
  • Replies 2
  • Subscribers 64
  • Views 13167
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

propagating data when generating VE

yongchen
yongchen over 13 years ago

Hi,

I was confused when progapating data to generate VE by using "connect_pointers()" and "keep upper.comp = read_only(comp)".

1) When should I use "connect_pointers" and when should I use "keep ... read_only"? For example, xserial example from Incisive gives an example as this:

extend ACTIVE has_tx_path xserial_agent_u {

   tx_bfm: xserial_bfm_u is instance;

      keep tx_bfm.driver == read_only(tx_driver);

      .....

      connect_pointers() is also {

          tx_bfm.agent = me;

      };

}

 

2) In document from Invisiv 11.1, "Specman IntelliGen User Guide", 3-9, there is an example to show connect_pointers() as:

extend agent {

   bfm: ex_atm_bfm is instance;

  driver: ex_atm_sequence_driver is instance;

  connect_pointers() is also {

    bfm.driver = driver;

    driver.bfm = bfm;

  }

};

My question is : why there is no "!" before driver/bfm? In what case should I add this "!" to unit?

 

thanks

 

  • Cancel
  • StephenH
    StephenH over 13 years ago

    Hello Yongchen.

    In general you would use constraints to connect unit pointers. The connect_pointers() method is provided so that you can avoid deep hierarchical constraints when hooking up TLM ports, monitors to scoreboards etc. For example your bus monitor might have a pointer to a scoreboard "!p_scbd : my_scoreboard". You can then hook that procedurally via connect_pointers() from the top-level: "tb_top.axi_env.monitor = tb_top.scbd". Sometimes it's just easier this way than using constriants. There's no hard rule, so it's up to you to judge what is best.

    You would use the "!" (do-not-generate) attribute on a unit if it's meant to serve as a pointer and will be connected procedurally via connect_pointers(). Without the "!" a unit declaration MUST be either declared "is instance" or constrained to point to a real instance via a keep constraint. The "is instance" tells the generator that this object is a real unit, not a pointer to a unit.

    Hope this helps.

    Steve. 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • yongchen
    yongchen over 13 years ago

    Thanks Steve. It is very helpful.

    Yong Chen 

     

     

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information