Wednesday, December 03, 2008     Register | Login | Search | Contact Us
     

Many of you already received communications about the move of the Cadence user community into cadence.com. And many of you have already joined, with over 4000 registrations in the first two weeks.

The new Cadence Community enhances the ability of Cadence users to connect and collaborate. In addition to moving the community into cadence.com -- enabling single sign-on for community, Sourcelink and Cadence events -- the new site is organized around nine technology segments, giving you easy access to product information, training, forums and blogs. Some of the new features include:
  • Ability to respond to posts via e-mail
  • Technology-specific blogs
  • Latest Web 2.0 social networking capabilities
  • Public profile options
  • Private messaging
  • Friends lists
Visit the new Cadence Community today at www.cadence.com/community and join the discussions!

Registration note: Due to the scope of the enhancements and the new SSO registration system, we were not able to migrate existing cdnusers.org member accounts. So new registrations are required, but this enables a broader set of functionality we think you'll enjoy.

Forum note: Under the guidance of forum moderators, we have taken the 20+ cdnusers.org forums and consolidated them into 11 forums on the new site. Posts have been brought over so you can leverage that posting history. CDNusers forums will be set to read only starting 7/30, and cdnusers.org will be redirected to the new community on 8/4.

Best regards,
Mike and Tom

Michael A. Catrambone - Steering Committee Chairman
Distinguished Engineer
PCB/Mechanical
UTStarcom, Inc.

Tom Diederich
Cadence Community Manager
Home
Forums
Subject: dynamically assigning the drivers for a virtual seq
Posting to forums is available to community members only.
Login or Register
Rate this topic:
   
Author Messages
SomeDude
Posts: 12
Online: User is Offline
1/30/2008 12:52 AM  
Hi there, I'm having some sort of "constraint" problem, which some of you might have the answer to. The Scenario is the following, I use a virtual Sequence driver to drive frames onto a dynamic number of phy drivers. The goal is to be able to write a virtual sequence, which can be told on which phy it shall inject its sequences:

extend virtual_seq_driver
{
    !phy_driverΒ] : list of phy_driver_u;
};

extend sve
{
    virt_seq_driver : virtual_seq_driver is instance;
    connect_pointers() is also
    {
        for i from 0 to virtual_seq_driver.phy_driver.size() - 1 do
        {
            virt_seq_driver.phy_driver[i] = pointer_to_list_of_phy_drivers_somewhere[i].driver;
        };
    };
};

sequence virt_seq using created_kind = virtual_sequence_t, created_driver : virtual_seq_driver;

extend virt_seq
{
    !phy_seq : some_phy_seq;
        keep phy_seq.driver = driver.phy_driver[phy_seq.seq_port_no - 1]
    -- ^^ This keep constraint results in a contradiction, because the seq_port_no is not properly constrained
};

extend some_phy_seq
{
    keep gen (seq_port_no) before (driver);
    seq_port_no : uint (bits:4);
    keep soft seq_port_no == 1;
};

The code above does not really work, as seq_port_no is used with a somehow totally unconstraind value (actually PGen tries to use a range). If I comment the constraint on the driver and constrain seq_port_no while calling the sequence with

extend MAIN virt_seq
{

    do phy_seq keeping
    {
        .seq_port_no == 1;
        .driver == driver.phy_driver[.seq_port_no - 1]
    };
};

everything works peachy and I can constrain the sequence dynamically to any Phy Port I want to use. How can I constrain it properly, so I don't have to constrain the driver every time I driver the sequence?

cheers for any solution
thinkverification
Posts: 28
Online: User is Offline
1/30/2008 11:20 PM  
Hi there,

Not sure if this is going to help, but about the "totally unconstrained" problem - try to check if the generated subtype has overridden the soft constraint on seq_port_no.
Another option is to pre-generate the sequence (remove ! from !phy_seq : some_phy_seq;) so the sequence is pre-generated with the desired driver. To activate it use could start_sequence().
Again - not sure if this is going to really help :-)

Yaron

Yaron Ilani
VLSI Verification Specialist
www.ThinkVerification.com
SomeDude
Posts: 12
Online: User is Offline
1/31/2008 12:19 AM  
Hi there,

thanks for your reply. As soon as I pregenerate the sequence, I cannot constrain it anymore in the body() section.

The best solution for this whoel problem would be if it were possible to declare a list of seq

!sequences[no_of_phys] : list of seq;

and later simply

do sequences[desired_port] keeping...

However, as the do cannot handle this, and there's afaik no possiblilty like

do append("sequence[",desired_port,"]") keeping it...

I currently use the following:

I declare only one sequence in the virtual sequence and constrain it to current_port_number, which is itself declared in the virtual sequence (not in the sequence itself, like I tried before):

current_port_number : uint(bits:4);
keep soft current_port_number == 1;

!phy_sequence : phy_seq;
keep phy_seq.driver == driver.phy_driver[current_port_number -1]

That way I can simply set the current_port_number in the virtual sequence body() and it is automatically sent to the correct port. For now that's sufficient, but I'll still try to get the do macro to accept an indexed list_of_seq.

greetings

Posting to forums is available to community members only.
Login or Register

Forums > Functional Verification > e > dynamically assigning the drivers for a virtual seq


ActiveForums 3.6
     
Copyright 2006 Cadence Design Systems, Inc.