Cadence® system design and verification solutions, integrated under our System Development Suite, provide the simulation, acceleration, emulation, and management capabilities.
System Development Suite Related Products A-Z
Cadence® digital design and signoff solutions provide a fast path to design closure and better predictability, helping you meet your power, performance, and area (PPA) targets.
Full-Flow Digital Solution Related Products A-Z
Cadence® custom, analog, and RF design solutions can help you save time by automating many routine tasks, from block-level and mixed-signal simulation to routing and library characterization.
Overview Related Products A-Z
Driving efficiency and accuracy in advanced packaging, system planning, and multi-fabric interoperability, Cadence® package implementation products deliver the automation and accuracy.
Cadence® PCB design solutions enable shorter, more predictable design cycles with greater integration of component design and system-level simulation for a constraint-driven flow.
An open IP platform for you to customize your app-driven SoC design.
Comprehensive solutions and methodologies.
Helping you meet your broader business goals.
A global customer support infrastructure with around-the-clock help.
24/7 Support - Cadence Online Support
Locate the latest software updates, service request, technical documentation, solutions and more in your personalized environment.
Cadence offers various software services for download. This page describes our offerings, including the Allegro FREE Physical Viewer.
Get the most out of your investment in Cadence technologies through a wide range of training offerings.
This course combines our Allegro PCB Editor Basic Techniques, followed by Allegro PCB Editor Intermediate Techniques.
Virtuoso Analog Design Environment Verifier 16.7
Learn learn to perform requirements-driven analog verification using the Virtuoso ADE Verifier tool.
Exchange ideas, news, technical information, and best practices.
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.
It's not all about the technlogy. Here we exchange ideas on the Cadence Academic Network and other subjects of general interest.
Cadence is a leading provider of system design tools, software, IP, and services.
Hi All,We are trying this kind of example. We are having two files of these. It's giving "Hierarchical reference not allowed from within a package." at class1_instance.class1_function(.....) class2_instance.class2_function(......)I tried passing both classes as members of a structure. but it giving same error when accessing member class functions from structure. What's the solution to access functions of these classes in Program main Blocks.file1.sv_______________________program main;class1 class1_instance;class 2 class2_instance;initial begin class1_instance=new; class2_instance=new; call_task_from_other_file(class1_instance, class2_instance);endendprogramfile2.sv________________________task call_task_from_other_file(class1 class1_instance, class2 class2_instance); class1_instance.class1_function(.....) class2_instance.class2_function(......)endtaskRegardsMayank
A similar code segment worked fine on another simulator, so I would imagine there is some issue with your tool-version. Did you try a later version/patch? Also your error message mentions usage of a package while the code snippet doesn't. Maybe if you post full code someone can help better.RegardsAjeetha, CVCwww.noveldv.com
Thanks Ajeetha, for your reply. code contains no package declaration or keyword. Just group of files with `include statements and all in include_path.Even it's giving same Hierarchical reference not allowed from within a package." for this type of code also, or when calling sub_module tasks from class functions. interface intf1(input logic clk);endinterfaceprogram main (intf1 intf1_instance); forked_task;endprogramtask forked_task
endtaskmodule dut (intf1 intf1_instance); task dut_task; endtaskendmodulemodule top; reg clk;
intf1 intf1_instance (clk);
dut dut_instance (intf1_instance);
main main_instance (intf1_instance);
Mayank, I will try your code soon on another simulator. But if you were to accept constructive comments - the above code is hard to follow and maintain IMHO. Use of stuff in $root and referencing one from another is a "sphagetti" style that is highly discouraged. Maybe this was a code written to show here in this forum/email, then it is fine, but be ware when you have to deploy such a code in real life. Refer to a good methodology in your case it can be URM (since you use CDN tools anyway).I haven't seen URM much but hopefully it has some TLM flavor a la VMM/AVM thereby keeping things modular.Just in case if you are based in Bangalore, my company can help you to appreciate the value of a methodology if needed.RegardsAjeetha, CVCwww.noveldv.com
Hello Mayank,I created a mini-testcase with the hope of understanding the issue you are running into. I was able to run my mini-test with the IUS5.83s3 release and an early adopter version of IUS6.1. Here is my code. Please try it out and let me know if it runs on your installation. Also - if I have misinterpreted your question, please let me know!Thanks!Kathleen Meadepackage my_pkg;class class1; integer v1 = 100; function void class1_function (); $display("class1_function: v1 is %0d", v1); endfunctionendclass : class1class class2; integer v2 = 200; function void class2_function (); $display("class2_function: v2 is %0d", v2); endfunctionendclass : class2task call_task_from_other_file (input class1 c1_inst, input class2 c2_inst); c1_inst.class1_function(); c2_inst.class2_function();endtaskendpackage : my_pkg;program main;import my_pkg::*;class1 class1_inst;class2 class2_inst;initial begin class1_inst = new(); class2_inst = new(); call_task_from_other_file(class1_inst, class2_inst);end endprogram
Hello Mayank,I looked at your second code example. IUS does not yet support declaring tasks/functions in the global space but you would be able to declare the forked_task task in the top module, the main program or in a package. The other issue I see with your code example is that the main program must use an initial block to call the forked_task.I hope this helps!Kathleen MeadeHere is a modified version of your second code example that works on the IUS5.83-s3 release:interface intf1 (input logic clk);endinterfaceprogram main (intf1 intf1_instance); initial forked_task();endprogrammodule dut (intf1 intf1_instance); task dut_task; $display("I am in dut_task"); endtaskendmodulemodule top; reg clk; intf1 intf1_instance (clk); dut dut_instance (intf1_instance); main main_instance (intf1_instance); // this task can be declared in the program, the top module or in a package. task forked_task(); dut_instance.dut_task; endtaskendmodule