Manipulating a single Instance Iterations in Virtuoso

Status
Not open for further replies.

battosai

Newbie level 4
Joined
Dec 12, 2012
Messages
6
Helped
1
Reputation
2
Reaction score
1
Trophy points
1,283
Location
Switzerland
Activity points
1,340
I am trying to manipulate the parameters of a single instance of an array (I1<1024:1>). The instances contain a simple RC network and a current source modelling a rather complex circuit. All the instances are connected in series using a bus-notation. Now I need to add a unique delay to every single one of the current sources in order to simulate a propagating signal through this chain of instances.

My idea was to use a skill function to deduce the number of the instance and use it as a multiplier for a constant delay and add it as a parameter of the internal current source. This way all 1024 instances should have a unique delay that is a function of its instance number.

I am fairly new to Skill and seem to be stuck..I managed to access a single instance using ilInst~>name but this returns me the complete name i.e. I1<x>. That's about as far as I came..

Does anyone have experience with this kind of problem or any hints that might help?
 

According to Andrew Beckett in the Cadence Forums my original approach is not possible. Therefore I have changed my approach a bit. I added the delay parameter i neet to change to the cell using pPar("delay"). In that way the netlister adds the parameter directly to the instance call instead of only the subcircuit. In that way all i need to manipulate is the value of the parameter for every instance. Since it's the first time doing netlist manipulations and the lack of good examples i wrote a custom PrintParameter function that simply overwrites the delay parameter with a fixed value to see if it works:

Code:
(defun MYPrintParameters (formatterId cvId)
    cellview_params = cvId->parameters
    (foreach param cellview_params           
        (if param->name == "delay" then
            param->value = "2u"
            cellview_params = nil
        );; if
    );; foreach
    amsPrintParameters(formatterId cvId)   
);; defun
netId = amsGetNetlister()                  
vlog = netId->vlog
vlog->parametersProc = `MYPrintParameters

I have made the according changes in the CDF editor (under Simulation Information in the spectre settings under netlistProcedures i added MYPrintParameters) for the cell and saved theMYPrintParameters function in the libInit.il file in the library folder and tried to generate the netlist. Unfortunatly it returns the error:

Code:
  *Error* MYPrintParameters: too few arguments (2 expected, 1 given) - (stdobj@0x15ecc170)

Do I have to add another parameter in the CDF editor or where did I go wrong?
I am grateful for any input!
 

Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…