• 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. Custom IC Design
  3. $analog_node_alias() usage with vector nets

Stats

  • Locked Locked
  • Replies 1
  • Subscribers 125
  • Views 9312
  • 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

$analog_node_alias() usage with vector nets

dtodorov
dtodorov over 3 years ago

Hello,

I have a top testbench containing design under simulation (DUT - schematic) and next to it I would like to have a checker built with verilogA. My intent is to use $analog_node_alias() or $analog_port_alias() tasks to bind electrical nets within the checker to the one inside the DUT. Something similar to this: 

module checker;

electrical nd1;
electrical [1:0] nd2;

analog initial begin 

   $analog_node_alias(nd1, "$root.DUT.scalar_net_of_interest");  // having only this line seems to work as expected
   $analog_node_alias(nd2, "$root.DUT.vector_of_interest<1:0>"); // when trying to probe electrical vectors the simulation would run, but nd2 would be always read 0V

end 

analog begin 
    V(nd1) <+ I(nd1)*1k;
    V(nd2[0]) <+ I(nd2[0])*1k;
    V(nd2[1]) <+ I(nd2[1])*1k;
end

endmodule

When I run the simulation ( using Spectre Version 20.1.0.269.isr8 64bit -- 30 Jun 2021) there are no errors in the logfile, but the aliased nets nd1 and nd2 are behaving strange. When I remove the vector nd2 alias function, the nd1 would be the value I expect, but when I try to include it, both nd1 and nd2 become 0V and still no error/warning is reported. 

So I mainly have two questions:

  1. What is the right way to access vectors using $analog_node/port_alias() tasks? Should there be special character escapes, like "vect_of_interest\<1:0\>" or anything specific to the vector access syntax?
  2. Are there any other ways of binding to nets across the design hierarchy? 

Best regards,

Dimitar

  • Cancel
  • dtodorov
    dtodorov over 3 years ago

    Hi again,

    after going through the VerilogA LRM once again I decided to not try aliasing entire vectors, but rather split the nodes in a scalar fashion (i.e. slice each alias). Something like this:

    module checker;

    electrical nd1;
    electrical nd2_0;
    electrical nd2_1;

    analog initial begin 
       $analog_node_alias(nd1, "$root.DUT.scalar_net_of_interest"); 
       $analog_node_alias(nd2_0, "$root.DUT.vector_of_interest<0>");
       $analog_node_alias(nd2_1, "$root.DUT.vector_of_interest<1>");
    end 

    analog begin 
        V(nd1) <+ I(nd1)*1k;
        V(nd2_0) <+ I(nd2_0)*1k;
        V(nd2_1) <+ I(nd2_1)*1k;
    end

    endmodule

    Also, seems there is no need for special character escape. "node<1>" works identically to "node\<1\>".

    • 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