z

customizing status toolbar

Hi,

I would like to add items like length of selected metal or area also in status tool bar. I have tried below option but I am getting warning as shown below. Could you please give suggestions. 

envGetVal("layout" "statusToolbarFields")

*WARNING* envGetVal: Could not find variable 'statusToolbarFields' in tool[.partition] 'layout'

Regards,

Varsha




z

Celebrating Five Years of Performance-Optimized Arm-Based SoCs: Now including AMBA5

It’s been quite a long 5-year journey building and deploying Performance Analysis, Verification, and Debug capabilities for Arm-based SoCs. We worked with some of the smartest engineers on the planet. First with the engineers at Arm, with whom we...(read more)




z

DAC 2019 Preview – Multi-MHz Prototyping for Billion Gate Designs, AI, ML, 5G, Safety, Security and More

Vegas, here we come. All of us fun EDA engineers at once. Be prepared, next week’s Design Automation Conference will be busy! The trends I had outlined after last DAC in 2018—system design, cloud, and machine learning—have...(read more)




z

Library Characterization Tidbits: Recharacterize What Matters - Save Time!

Recently, I read an article about how failure is the stepping stone to success in life. It instantly struck a chord and a thought came zinging from nowhere about what happens to the failed arcs of a...

[[ Click on the title to access the full blog on the Cadence Community site. ]]




z

Specman: Analyze Your Coverage with Python

In the former blog about Python and Specman: Specman: Python Is here!, we described the technical information around Specman-Python integration. Since Python provides so many easy to use existing libraries in various fields, it is very tempting to leverage these cool Python apps.

Coverage has always been the center of the verification methodology, however in the last few years it gets even more focus as people develop advanced utilities, usually using Machine Learning aids. Anyhow, any attempt to leverage your coverage usually starts with some analysis of the behavior and trends of some typical tests. Visualizing the data makes it easier to understand, analyze, and communicate. Fortunately, Python has many Visualization libraries.

In this blog, we show an example of how you can use the plotting Python library (matplotlib) to easily display coverage information during a run. In this blog, we use the Specman Coverage API to extract coverage data, and a Python module to display coverage grades interactively during a single run and the way to connect both.

Before we look at the example, if you have read the former blog about Specman and Python and were concerned about the fact that python3 is not supported, we are glad to update that in Specman 19.09, Python3 is now supported (in addition to Python2).

The Testcase
Let’s say I have a stable verification environment and I want to make it more efficient. For example: I want to check whether I can make the tests shorter while hardly harming the coverage. I am not sure exactly how to attack this task, so a good place to start is to visually analyze the behavior of the coverage on some typical test I chose. The first thing we need to do is to extract the coverage information of the interesting entities. This can be done using the old Coverage API. 

Coverage API
Coverage API is a simple interface to extract coverage information at a certain point. It is implemented through a predefined struct type named user_cover_struct. To use it, you need to do the following:

  1. Define a child of user_cover_structusing like inheritance (my_cover_struct below).
  2. Extend its relevant methods (in our example we extend only the end_group() method) and access the relevant members (you can read about the other available methods and members in cdnshelp).
  3. Create an instance of the user_cover_structchild and call the predefined scan_cover() method whenever you want to query the data (even in every cycle). Calling this method will result in calling the methods you extended in step 2.  

 The code example below demonstrates these three steps. We chose to extend the end_group() method and we keep the group grade in some local variable. Note that we divide it by 100,000,000 to get a number between 0 to 1 since the grade in this API is an integer from 0 to 100,000,000. 

 struct my_cover_struct like user_cover_struct {
      !cur_group_grade:real;
   
      //Here we extend user_cover_struct methods
      end_group() is also {
      cur_group_grade = group_grade/100000000;        
      }
};
 
extend sys{
      !cover_info : my_cover_struct;
       run() is also {
          start monitor_cover ();
     };
     
     monitor_cover() @any is {
         cover_info = new;
         
         while(TRUE) {
             // wait some delay, for example –
             wait [10000] * cycles;
          
            // scan the packet.packet_cover cover group
            compute cover_info.scan_cover("packet.packet_cover");
          };//while
      };// monitor_cover
};//sys

Pass the Data to a Python Module
After we have extracted the group grade, we need to pass the grade along with the cycle and the coverage group name (assuming there are a few) to a Python module. We will take a look at the Python module itself later. For now, we will first take a look at how to pass the information from the e code to Python. Note that in addition to passing the grade at certain points (addVal method), we need an initialization method (init_plot) with the number of cycles, so that the X axis can be drawn at the beginning, and end_plot() to mark interesting points on the plot at the end. But to begin with, let’s have empty methods on the Python side and make sure we can just call them from the e code.

 # plot_i.py
def init_plot(numCycles):
    print (numCycles)
def addVal(groupName,cycle,grade):
    print (groupName,cycle,grade)
def end_plot():
    print ("end_plot") 

And add the calls from e code:

struct my_cover_struct like user_cover_struct {
     @import_python(module_name="plot_i", python_name="addVal")
     addVal(groupName:string, cycle:int,grade:real) is imported;
  
     !cur_group_grade:real;
  
     //Here we extend user_cover_struct methods
     end_group() is also {
         cur_group_grade = group_grade/100000000;
         
        //Pass the values to the Python module
         addVal(group_name,sys.time, cur_group_grade);      
     }   //end_group
};//user_cover_struct
 
extend sys{
     @import_python(module_name="plot_i", python_name="init_plot"
     init_plot(numCycles:int) is imported;
    
     @import_python(module_name="plot_i", python_name="end_plot")
     end_plot() is imported;
    
     !cover_info : my_cover_struct;
     run() is also {
         start scenario();
    };
    
    scenario() @any is {
         //initialize the plot in python
         init_plot(numCycles);
        
         while(sys.time<numCycles)
        {
             //Here you add your logic     
             
            //get the current coverage information for packet
            cover_info = new;
            var num_items:=  cover_info.scan_cover("packet.packet_cover");
           
            //Here you add your logic       
        
        };//while
        
        //Finish the plot in python
        end_plot();
   
    }//scenario
}//sys
 
  • The green lines define the methods as they are called from the e
  • The blue lines are pre-defined annotations that state that the method in the following line is imported from Python and define the Python module and the name of the method in it.
  • The red lines are the calls to the Python methods.

 Before running this, note that you need to ensure that Specman finds the Python include and lib directories, and Python finds our Python module. To do this, you need to define a few environment variables: SPECMAN_PYTHON_INCLUDE_DIR, SPECMAN_PYTHON_LIB_DIR, and PYTHONPATH. 

 The Python Module to Draw the Plot
After we extracted the coverage information and ensured that we can pass it to a Python module, we need to display this data in the Python module. There are many code examples out there for drawing a graph with Python, especially with matplotlib. You can either accumulate the data and draw a graph at the end of the run or draw a graph interactively during the run itself- which is very useful especially for long runs.

Below is a code that draws the coverage grade of multiple groups interactively during the run and at the end of the run it prints circles around the maximum point and adds some text to it. I am new to Python so there might be better or simpler ways to do so, but it does the work. The cool thing is that there are so many examples to rely on that you can produce this kind of code very fast.

# plot_i.py
import matplotlib
import matplotlib.pyplot as plt
plt.style.use('bmh')
#set interactive mode
plt.ion()
fig = plt.figure(1)
ax = fig.add_subplot(111)
# Holds a specific cover group
class CGroup:
    def __init__(self, name, cycle,grade ):
        self.name = name
        self.XCycles=[]
        self.XCycles.append(cycle)
        self.YGrades=[]
        self.YGrades.append(grade)  
        self.line_Object= ax.plot(self.XCycles, self.YGrades,label=name)[-1]             
        self.firstMaxCycle=cycle
        self.firstMaxGrade=grade
    def add(self,cycle,grade):
        self.XCycles.append(cycle)
        self.YGrades.append(grade)
        if grade>self.firstMaxGrade:
            self.firstMaxGrade=grade
            self.firstMaxCycle=cycle          
        self.line_Object.set_xdata(self.XCycles)
        self.line_Object.set_ydata(self.YGrades)
        plt.legend(shadow=True)
        fig.canvas.draw()
     
#Holds all the data of all cover groups   
class CData:
    groupsList=[]
    def add (self,groupName,cycle,grade):
        found=0
        for group in self.groupsList:
            if groupName in group.name:
                group.add(cycle,grade)
                found=1
                break
        if found==0:
            obj=CGroup(groupName,cycle,grade)
            self.groupsList.append(obj)
     
    def drawFirstMaxGrade(self):
        for group in self.groupsList:
            left, right = plt.xlim()
            x=group.firstMaxCycle
            y=group.firstMaxGrade
           
            #draw arrow
            #ax.annotate("first maximum grade", xy=(x,y),
            #xytext=(right-50, 0.4),arrowprops=dict(facecolor='blue', shrink=0.05),)
           
            #mark the points on the plot
            plt.scatter(group.firstMaxCycle, group.firstMaxGrade,color=group.line_Object.get_color())
          
            #Add text next to the point   
            text='cycle:'+str(x)+' grade:'+str(y)   
            plt.text(x+3, y-0.1, text, fontsize=9,  bbox=dict(boxstyle='round4',color=group.line_Object.get_color()))                                                                      
       
#Global data
myData=CData()
 
#Initialize the plot, should be called once
def init_plot(numCycles):
    plt.xlabel('cycles')
    plt.ylabel('grade')   
    plt.title('Grade over time')  
    plt.ylim(0,1)
    plt.xlim(0,numCycles)
 
#Add values to the plot
def addVal(groupName,cycle,grade):
    myData.add(groupName,cycle,grade)
#Mark interesting points on the plot and keep it shown
def end_plot():
    plt.ioff();
    myData.drawFirstMaxGrade(); 
   
    #Make sure the plot is being shown
    plt.show();
#uncomment the following lines to run this script with simple example to make sure #it runs properly regardless of the Specman interaction
#init_plot(300)
#addVal("xx",1,0)
#addVal("yy",1,0)
#addVal("xx",50,0.3)
#addVal("yy",60,0.4)
#addVal("xx",100,0.8)
#addVal("xx",120,0.8)
#addVal("xx",180,0.8)
#addVal("yy",200,0.9)
#addVal("yy",210,0.9)
#addVal("yy",290,0.9)
#end_plot()
 

 In the example we used, we had two interesting entities: packet and state_machine, thus we had two equivalent coverage groups. When running our example connecting to the Python module, we get the following graph which is displayed interactively during the run.

 

    

 

When analyzing this specific example, we can see two things. First, packet gets to a high coverage quite fast and significant part of the run does not contribute to its coverage. On the other hand, something interesting happens relating to state_machine around cycle 700 which suddenly boosts its coverage. The next step would be to try to dump graphic information relating to other entities and see if something noticeable happens around cycle 700.

To run a complete example, you can download the files from: https://github.com/okirsh/Specman-Python/

Do you feel like analyzing the coverage behavior in your environment? We will be happy to hear about your outcomes and other usages of the Python interface.

Orit Kirshenberg
Specman team




z

zpm can't be evaluated

Virtuoso Version -- IC6.1.7-64b.500.23

Cadence Spectre Version -- 17.10.515

I have a very simple circuit. Please find attached. It is basically a resistor across a port. I run a S-param simulation and can plot the S-params, but unfortunately not the Z-param or Y-param. 

/resized-image/__size/320x240/__key/communityserver-discussions-components-files/33/Capture_5F00_Sch.JPG

/resized-image/__size/320x240/__key/communityserver-discussions-components-files/33/Capture_5F00_Error.JPG

Can anyone point me in the correct direction to sort out this problem? The zpm does work in another design environment, but not in the new design environment (a new project). The virtuoso and the cadence-spectre versions match in both the project environments. I am at a loss at what to look for. 




z

How to install PLL Macro Model Wizard?

Hello,

I am using virtuoso version IC 6.1.7-64b.500.1, and I am trying to follow the Spectre RF Workshop-Noise-Aware PLL Design Flow(MMSIM 7.1.1) pdf.

I could find the workshop library "pllMMLib", but I cannot find PLL Macro Model Wizard, and I attached my screen.

Could you please help me install the module "PLL Macro Model Wizard"?

Thanks a lot!




z

Noise figure optimization of LNA

Hello, I looking for reaching minimal NOISE FIRUGE by peaking a combination of the RLC on the output load as shown bellow.
I tried to do it with PNOISE  but it gives me an error on the |f(in)| i am not sure regarding the sidebands in my case(its not a mixer)

How can i show Noise Figure and optimize it using my output RLC?

Thanks





z

To Escalate or Not? This Is Modi’s Zugzwang Moment

This is the 17th installment of The Rationalist, my column for the Times of India.

One of my favourite English words comes from chess. If it is your turn to move, but any move you make makes your position worse, you are in ‘Zugzwang’. Narendra Modi was in zugzwang after the Pulwama attacks a few days ago—as any Indian prime minister in his place would have been.

An Indian PM, after an attack for which Pakistan is held responsible, has only unsavoury choices in front of him. He is pulled in two opposite directions. One, strategy dictates that he must not escalate. Two, politics dictates that he must.

Let’s unpack that. First, consider the strategic imperatives. Ever since both India and Pakistan became nuclear powers, a conventional war has become next to impossible because of the threat of a nuclear war. If India escalates beyond a point, Pakistan might bring their nuclear weapons into play. Even a limited nuclear war could cause millions of casualties and devastate our economy. Thus, no matter what the provocation, India needs to calibrate its response so that the Pakistan doesn’t take it all the way.

It’s impossible to predict what actions Pakistan might view as sufficient provocation, so India has tended to play it safe. Don’t capture territory, don’t attack military assets, don’t kill civilians. In other words, surgical strikes on alleged terrorist camps is the most we can do.

Given that Pakistan knows that it is irrational for India to react, and our leaders tend to be rational, they can ‘bleed us with a thousand cuts’, as their doctrine states, with impunity. Both in 2001, when our parliament was attacked and the BJP’s Atal Bihari Vajpayee was PM, and in 2008, when Mumbai was attacked and the Congress’s Manmohan Singh was PM, our leaders considered all the options on the table—but were forced to do nothing.

But is doing nothing an option in an election year?

Leave strategy aside and turn to politics. India has been attacked. Forty soldiers have been killed, and the nation is traumatised and baying for blood. It is now politically impossible to not retaliate—especially for a PM who has criticized his predecessor for being weak, and portrayed himself as a 56-inch-chested man of action.

I have no doubt that Modi is a rational man, and knows the possible consequences of escalation. But he also knows the possible consequences of not escalating—he could dilute his brand and lose the elections. Thus, he is forced to act. And after he acts, his Pakistan counterpart will face the same domestic pressure to retaliate, and will have to attack back. And so on till my home in Versova is swallowed up by a nuclear crater, right?

Well, not exactly. There is a way to resolve this paradox. India and Pakistan can both escalate, not via military actions, but via optics.

Modi and Imran Khan, who you’d expect to feel like the loneliest men on earth right now, can find sweet company in each other. Their incentives are aligned. Neither man wants this to turn into a full-fledged war. Both men want to appear macho in front of their domestic constituencies. Both men are masters at building narratives, and have a pliant media that will help them.

Thus, India can carry out a surgical strike and claim it destroyed a camp, killed terrorists, and forced Pakistan to return a braveheart prisoner of war. Pakistan can say India merely destroyed two trees plus a rock, and claim the high moral ground by returning the prisoner after giving him good masala tea. A benign military equilibrium is maintained, and both men come out looking like strong leaders: a win-win game for the PMs that avoids a lose-lose game for their nations. They can give themselves a high-five in private when they meet next, and Imran can whisper to Modi, “You’re a good spinner, bro.”

There is one problem here, though: what if the optics don’t work?

If Modi feels that his public is too sceptical and he needs to do more, he might feel forced to resort to actual military escalation. The fog of politics might obscure the possible consequences. If the resultant Indian military action causes serious damage, Pakistan will have to respond in kind. In the chain of events that then begins, with body bags piling up, neither man may be able to back down. They could end up as prisoners of circumstance—and so could we.

***

Also check out:

Why Modi Must Learn to Play the Game of Chicken With Pakistan—Amit Varma
The Two Pakistans—Episode 79 of The Seen and the Unseen
India in the Nuclear Age—Episode 80 of The Seen and the Unseen

The India Uncut Blog © 2010 Amit Varma. All rights reserved.
Follow me on Twitter.




z

Error: CMFBC-1 The schematic and the layout constraints were not synchronized

Hi, I am in the middle of a design and had no problem going back and forth between schematics and layout. Now I am getting the error message below. I am using Cadence 17.2.

ERROR: Layout database has probably been reverted to an earlier version than that, which was used in the latest flow or the schematic database was synchronized with another board.

The basecopy file generated by the last back-to-front flow not found.

ERROR: Layout database has probably been reverted to an earlier version than that, which was used in the latest flow or the schematic database was synchronized with another board.

The basecopy file generated by the last back-to-front flow not found.

Error: CMFBC-1: The schematic and the layout constraints were not synchronized as the changes done since the last sync up could not be reconciled. Syncing the current version of the schematic or layout databases with a previous version would result in this issue. The  constraint difference report is displayed.

Continuing with "changes-only" processing may result in incorrect constraint updates.

Thanks for your input

Claudia




z

New comer, need help with VIA drill size change

Greeting to all:

I am new in this tool, only 2 weeks. Trying to create a new Via with smaller size drill hole from exiting 13 mils size to 10 mils size. I got the message as imaged below. Any advise what to do?  Thanks in advance.

 




z

Einstein's puzzle (System Verilog) solved by Incisive92

Hello All,

Following is the einstein's puzzle solved by cadence Incisive92  (solved in less than 3 seconds -> FAST!!!!!!)

Thanks,

Vinay Honnavara

Verification engineer at Keyu Tech

vinayh@keyutech.com

 

 

 

 // Author: Vinay Honnavara

// Einstein formulated this problem : he said that only 2% in the world can solve this problem
// There are 5 different parameters each with 5 different attributes
// The following is the problem

// -> In a street there are five houses, painted five different colors (RED, GREEN, BLUE, YELLOW, WHITE)

// -> In each house lives a person of different nationality (GERMAN, NORWEGIAN, SWEDEN, DANISH, BRITAIN)

// -> These five homeowners each drink a different kind of beverage (TEA, WATER, MILK, COFFEE, BEER),

// -> smoke different brand of cigar (DUNHILL, PRINCE, BLUE MASTER, BLENDS, PALL MALL)

// -> and keep a different pet (BIRD, CATS, DOGS, FISH, HORSES)


///////////////////////////////////////////////////////////////////////////////////////
// *************** Einstein's riddle is: Who owns the fish? ***************************
///////////////////////////////////////////////////////////////////////////////////////

/*
Necessary clues:

1. The British man lives in a red house.
2. The Swedish man keeps dogs as pets.
3. The Danish man drinks tea.
4. The Green house is next to, and on the left of the White house.
5. The owner of the Green house drinks coffee.
6. The person who smokes Pall Mall rears birds.
7. The owner of the Yellow house smokes Dunhill.
8. The man living in the center house drinks milk.
9. The Norwegian lives in the first house.
10. The man who smokes Blends lives next to the one who keeps cats.
11. The man who keeps horses lives next to the man who smokes Dunhill.
12. The man who smokes Blue Master drinks beer.
13. The German smokes Prince.
14. The Norwegian lives next to the blue house.
15. The Blends smoker lives next to the one who drinks water.
*/




typedef enum bit [2:0]  {red, green, blue, yellow, white} house_color_type;
typedef enum bit [2:0]  {german, norwegian, brit, dane, swede} nationality_type;
typedef enum bit [2:0]  {coffee, milk, water, beer, tea} beverage_type;
typedef enum bit [2:0]  {dunhill, prince, blue_master, blends, pall_mall} cigar_type;
typedef enum bit [2:0]  {birds, cats, fish, dogs, horses} pet_type;




class Einstein_problem;

    rand house_color_type house_color[5];
    rand nationality_type nationality[5];
    rand beverage_type beverage[5];
    rand cigar_type cigar[5];
    rand pet_type pet[5];
        rand int arr[5];
    
    constraint einstein_riddle_solver {
    
        
    
        foreach (house_color[i])
            foreach (house_color[j])
               if (i != j)
                house_color[i] != house_color[j];
        foreach (nationality[i])
            foreach (nationality[j])
               if (i != j)
                nationality[i] != nationality[j];
        foreach (beverage[i])
            foreach (beverage[j])
               if (i != j)
                beverage[i] != beverage[j];
        foreach (cigar[i])
            foreach (cigar[j])
               if (i != j)
                cigar[i] != cigar[j];
        foreach (pet[i])
            foreach (pet[j])
               if (i != j)
                pet[i] != pet[j];
    
    
        //1) The British man lives in a red house.
        foreach(nationality[i])
                (nationality[i] == brit) -> (house_color[i] == red);
                
        
        //2) The Swedish man keeps dogs as pets.
        foreach(nationality[i])
                (nationality[i] == swede) -> (pet[i] == dogs);
                
                
        //3) The Danish man drinks tea.        
        foreach(nationality[i])
                (nationality[i] == dane) -> (beverage[i] == tea);
        
        
        //4) The Green house is next to, and on the left of the White house.
        foreach(house_color[i])        
                 if (i<4)
                    (house_color[i] == green) -> (house_color[i+1] == white);
        
        
        //5) The owner of the Green house drinks coffee.
        foreach(house_color[i])
                (house_color[i] == green) -> (beverage[i] == coffee);
                
        
        //6) The person who smokes Pall Mall rears birds.
        foreach(cigar[i])
                (cigar[i] == pall_mall) -> (pet[i] == birds);
        
        
        //7) The owner of the Yellow house smokes Dunhill.
        foreach(house_color[i])
                (house_color[i] == yellow) -> (cigar[i] == dunhill);
        
        
        //8) The man living in the center house drinks milk.
        foreach(house_color[i])
                if (i==2) // i==2 implies the center house (0,1,2,3,4) 2 is the center
                    beverage[i] == milk;
        
        
        
        //9) The Norwegian lives in the first house.
        foreach(nationality[i])        
                if (i==0) // i==0 is the first house
                    nationality[i] == norwegian;
        
        
        
        //10) The man who smokes Blends lives next to the one who keeps cats.
        foreach(cigar[i])        
                if (i==0) // if the man who smokes blends lives in the first house then the person with cats will be in the second
                    (cigar[i] == blends) -> (pet[i+1] == cats);
        
        foreach(cigar[i])        
                if (i>0 && i<4) // if the man is not at the ends he can be on either side
                    (cigar[i] == blends) -> (pet[i-1] == cats) || (pet[i+1] == cats);
        
        foreach(cigar[i])        
                if (i==4) // if the man is at the last
                    (cigar[i] == blends) -> (pet[i-1] == cats);
        
        foreach(cigar[i])        
                if (i==4)
                    (pet[i] == cats) -> (cigar[i-1] == blends);
        
        
        //11) The man who keeps horses lives next to the man who smokes Dunhill.
        foreach(pet[i])
                if (i==0) // similar to the last case
                    (pet[i] == horses) -> (cigar[i+1] == dunhill);
        
        foreach(pet[i])        
                if (i>0 & i<4)
                    (pet[i] == horses) -> (cigar[i-1] == dunhill) || (cigar[i+1] == dunhill);
                    
        foreach(pet[i])        
                if (i==4)
                    (pet[i] == horses) -> (cigar[i-1] == dunhill);
                    


        //12) The man who smokes Blue Master drinks beer.
        foreach(cigar[i])
                (cigar[i] == blue_master) -> (beverage[i] == beer);
        
        
        //13) The German smokes Prince.
        foreach(nationality[i])        
                (nationality[i] == german) -> (cigar[i] == prince);
        

        //14) The Norwegian lives next to the blue house.
        foreach(nationality[i])
                if (i==0)
                    (nationality[i] == norwegian) -> (house_color[i+1] == blue);
        
        foreach(nationality[i])        
                if (i>0 & i<4)
                    (nationality[i] == norwegian) -> (house_color[i-1] == blue) || (house_color[i+1] == blue);
        
        foreach(nationality[i])        
                if (i==4)
                    (nationality[i] == norwegian) -> (house_color[i-1] == blue);
        

        //15) The Blends smoker lives next to the one who drinks water.            
        foreach(cigar[i])            
                if (i==0)
                    (cigar[i] == blends) -> (beverage[i+1] == water);
        
        foreach(cigar[i])        
                if (i>0 & i<4)
                    (cigar[i] == blends) -> (beverage[i-1] == water) || (beverage[i+1] == water);
                    
        foreach(cigar[i])        
                if (i==4)
                    (cigar[i] == blends) -> (beverage[i-1] == water);
        
    } // end of the constraint block
    


    // display all the attributes
    task display ;
        foreach (house_color[i])
            begin
                $display("HOUSE : %s",house_color[i].name());
            end
        foreach (nationality[i])
            begin
                $display("NATIONALITY : %s",nationality[i].name());
            end
        foreach (beverage[i])
            begin
                $display("BEVERAGE : %s",beverage[i].name());
            end
        foreach (cigar[i])
            begin
                $display("CIGAR: %s",cigar[i].name());
            end
        foreach (pet[i])
            begin
                $display("PET : %s",pet[i].name());
            end
        foreach (pet[i])
            if (pet[i] == fish)
                $display("THE ANSWER TO THE RIDDLE : The %s has %s ", nationality[i].name(), pet[i].name());
    
    endtask // end display
    
    
endclass




program main ;

    initial
        begin
            Einstein_problem ep;
            ep = new();
            if(!ep.randomize())
                $display("ERROR");
            ep.display();
        end
endprogram // end of main

        




z

Wrong Constraint Values in Sequential Cell Characterization

Hi,

I am trying to characterize a D flip-flop for low voltage operation (0.6V) using Cadence Liberate (V16). This is a positive edge triggered D flip flop based on true-single-phase clocking scheme. After the characterization, the measurements reported for hold constraint arcs seem to deviate significantly from its (spectre) spice simulation.

The constraint and the power settings to the liberate are as follows : 

# -------------------------------------------- Timing Constraints --------------------------------------------------------------------------------
### Input waveform ###
set_var predriver_waveform 2;# 2=use pre-driver waveform
### Capacitance ###
set_var min_capacitance_for_outputs 1;# write min_capacitance attribute for output pins
### Timing ###
set_var force_condition 4
### Constraint ###
set_var constraint_info 2
#set_var constraint_search_time_abstol 1e-12 ;# 1ps resolution for bisection search
set_var nochange_mode 1 ;# enable nochange_* constraint characterization
### min_pulse_width ###
set_var conditional_mpw 0
set_var constraint_combinational 2


#---------------------------------------------- CCS Settings ----------------------------------------------------------------------------------------
set_var ccsn_include_passgate_attr 1
set_var ccsn_model_related_node_attr 1
set_var write_library_is_unbuffered 1

set_var ccsp_min_pts 15 ;# CCSP accuracy
set_var ccsp_rel_tol 0.01 ;# CCSP accuracy
set_var ccsp_table_reduction 0 ;# CCSP accuracy
set_var ccsp_tail_tol 0.02 ;# CCSP accuracy
set_var ccsp_related_pin_mode 2 ;# use 3 for multiple input switching scnarios and Voltus only libraries


#----------------------------------------------- Power ---------------------------------------------------------------------------------------------------
### Leakage ###
set_var max_leakage_vector [expr 2**10]
set_var leakage_float_internal_supply 0 ;# get worst case leakage for power switch cells when off
set_var reset_negative_leakage_power 1 ;# convert negative leakage current to 0

### Power ###
set_var voltage_map 1 ;# create pg_pin groups, related_power_pin / related_ground_pin
set_var pin_based_power 0 ;# 0=based on VDD only; 1=power based on VDD and VSS (default);
set_var power_combinational_include_output 0 ;# do not include output pins in when conditions for combinational cells

set_var force_default_group 1
set_default_group -criteria {power avg} ;# use average for default power group

#set_var power_subtract_leakage 4 ;# use 4 for cells with exhaustive leakage states.
set_var subtract_hidden_power 2 ;# 1=subtract hidden power for all cells
set_var subtract_hidden_power_use_default 3 ;# 3=subtract hidden power from matched when condition then default group
set_var power_multi_output_binning_mode 1 ;# binning for multi-output cell considered for both timing and power arcs
set_var power_minimize_switching 1
set_var max_hidden_vector [expr 2**10]
#--------------------------------------------------------------------------------------------------------------------------------------------------------------

I specifically used set_var constraint_combinational 2 in the settings, in case the Bisection pass/fail mode fails to capture the constraints. In my spice simulation, the hold_rise (D=1, CLK=R, Q=R) arc at-least requires ~250 ps for minimum CLK/D slew combination (for the  by default smallest capacitive load as per Liberate)  while Liberate reports only ~30 ps. The define_cell template to this flip flop is pretty generic, which does not have any user specified arcs. So which settings most likely affecting the constraint measurements in Liberate and how can I debug this issue ?

Thanks

Anuradha




z

Library Characterization Tidbits: Over the Clouds and Beyond with Arm-Based Graviton and Cadence Liberate Trio

Cadence Liberate Trio Characterization Suite, ARM-based Graviton Processors, and Amazon Web Services (AWS) Cloud have joined forces to cater to the High-Performance Computing, Machine Learning/Artificial Intelligence, and Big Data Analytics sectors. (read more)




z

Library Characterization Tidbits: Exploring Intuitive Means to Characterize Large Mixed-Signal Blocks

Let’s review a key characteristic feature of Cadence Liberate AMS Mixed-Signal Characterization that offers to you ease of use along with many other benefits like automation of standard Liberty model creation and improvement of up to 20X throughput.(read more)





z

Are You Stuck While Synthesizing Your Design Due to Low-Power Issues? We Have the Solution!

Optimizing power can be a very convoluted and crucial process. To make design chips meet throughput goals along with optimal power consumption, you need to plan right from the beginning! (read more)





z

Library Characterization Tidbits: Recharacterize What Matters - Save Time!

Read how the Cadence Liberate Characterization solution effectively enables you to characterize only the failed or new arcs of a standard cell.(read more)




z

Virtuosity: Can You Build Lego Masterpieces with All Blocks of One Size?

The way you need blocks of different sizes and styles to build great Lego masterpieces, a complex WSP-based design requires stitching together routing regions with multiple patterns that follow different WSSPDef periods. Let's see how you can achieve this. (read more)




z

News18 Urdu: Latest News Muzaffarpur

visit News18 Urdu for latest news, breaking news, news headlines and updates from Muzaffarpur on politics, sports, entertainment, cricket, crime and more.




z

News18 Urdu: Latest News Zunheboto

visit News18 Urdu for latest news, breaking news, news headlines and updates from Zunheboto on politics, sports, entertainment, cricket, crime and more.




z

News18 Urdu: Latest News Azamgarh

visit News18 Urdu for latest news, breaking news, news headlines and updates from Azamgarh on politics, sports, entertainment, cricket, crime and more.




z

News18 Urdu: Latest News Nizamabad

visit News18 Urdu for latest news, breaking news, news headlines and updates from Nizamabad on politics, sports, entertainment, cricket, crime and more.




z

VIZAG: વાલ્વ ખરાબ થવાથી ઝેરી ગેસ લીક થયો, 11નાં મોત, 5 ગામ પ્રભાવિત

ફેક્ટરીથી ઝેરી ગેસ લીક, આંખમાં બળતરા અને શ્વાસની તકલીફની સાથે 5000 લોકો બીમાર




z

ભોપાલ : લૉકડાઉન 3.0ના પ્રથમ લગ્નમાં Sanitizerથી થયું જાનૈયાનું સ્વાગત

આ પહેલા લગ્ન હતા જેમાં રિવાજો પણ ફોલો કરવામાં આવ્યા અને કોરોના બચાવની મોટા ભાગની ગાઇડલાઇન્સ પણ.




z

Vizag: ગેસ લીક થતાં રસ્તાઓ પર બેભાન પડ્યા હતા લોકો, બાળકોથી હૉસ્પિટલો ઉભરાઈ

ગેસ લીકેજના કારણે 7 લોકોએ પોતાના જીવ ગુમાવ્યા છે જ્યારે કેટલાક લોકો હજુ પણ ગંભીર છે




z

Vizag tragedy: જાણો વિશ્વની સૌથી મોટી ઔદ્યોગિક દુર્ઘટનાઓ વિશે

વિશાખાપટ્ટનમ ખાતે ગુરુવારે થયેલી ગેસ લીકની દુર્ઘટનાએ ઇતિહાસની સૌથી મોટી ભોપાલ ગેસ દુર્ઘટનાની સ્મૃતિ તાજા કરી દીધી. દુનિયાએ જોયેલી કેટલીક આવી જ ઔદ્યોગિક દુર્ઘટનાઓ પર એક નજર કરીએ...




z

OMG! Zomatoમાંથી પિઝા મંગાવવું મહિલાને એક લાખ રૂપિયામાં પડ્યું

મહિલાએ ઓનલાઈન ફૂડ સર્વિસ આપનારી કંપની Zomatoના કસ્ટમર કેર નંબર ઉપર ફોન કરીને પિઝા બુક કરાવ્યો હતો. જેના પૈસા પણ ચૂકવી દીધા હતા.




z

News18 Urdu: Latest News Muzaffar Nagar

visit News18 Urdu for latest news, breaking news, news headlines and updates from Muzaffar Nagar on politics, sports, entertainment, cricket, crime and more.




z

News18 Urdu: Latest News Firozabad

visit News18 Urdu for latest news, breaking news, news headlines and updates from Firozabad on politics, sports, entertainment, cricket, crime and more.




z

જીવના જોખમે કામ કરતાં ડિલિવરી એજન્ટોને Amazon, BigBasket, Grofers અને MedLife ની સલામ

Amazon, BigBasket, Grofers અને MedLife, લોકડાઉન દરમિયાન જીવના જોખમે ડિલિવરી કરતા બહાદૂુરોને બિરદાવે છે.




z

Amazonની નવી પહેલ, કોરોનાના કપરા કાળમાં તમે PM-CARESમાં દાન કરી શકો છો

ચાલો જરૂરિયાતના આવા સમયે એકબીજાને મદદ કરીએ, અને આ મદદ કરવા માટે અમારી પાસે એક સરળ રીત છે.




z

કોરોનાકાલમાં Amazonને થયું અરબો ડૉલરનું નુકસાન, કંપનીએ સરકારથી કરી અપીલ

લોકડાઉનથી એમેઝોનને વિશ્વના અન્ય કોઇ પણ દેશ કરતા ભારતમાં સૌથી મોટું નુક્શાન થયું છે.




z

દારૂની હોમ ડિલીવરીની તૈયારીમાં Zomato, જાણો શું છે કંપનીનો પ્લાન

ભારતમાં હાલના સમયમાં દારૂની હોમ ડિલીવરી માટે કોઈ કાયદાકીય જોગવાઈ નથી




z

News18 Urdu: Latest News Aizawal

visit News18 Urdu for latest news, breaking news, news headlines and updates from Aizawal on politics, sports, entertainment, cricket, crime and more.




z

Amazon, BigBasket, Grofers এবং MedLife, COVID-19-এর লকডাউনের মধ্যে কর্মরত ডেলিভারি এজেন্টদের নির্ভীকতার প্রশংসা জানাচ্ছে




z

করোনা মোকাবিলায় Amazon.in-এর নয়া উদ্যোগ




z

News18 Urdu: Latest News Vizianagaram

visit News18 Urdu for latest news, breaking news, news headlines and updates from Vizianagaram on politics, sports, entertainment, cricket, crime and more.




z

News18 Urdu: Latest News Faizabad

visit News18 Urdu for latest news, breaking news, news headlines and updates from Faizabad on politics, sports, entertainment, cricket, crime and more.




z

News18 Urdu: Latest News Ferozepur

visit News18 Urdu for latest news, breaking news, news headlines and updates from Ferozepur on politics, sports, entertainment, cricket, crime and more.




z

News18 Urdu: Latest News Hazaribagh

visit News18 Urdu for latest news, breaking news, news headlines and updates from Hazaribagh on politics, sports, entertainment, cricket, crime and more.




z

News18 Urdu: Latest News Alapuzzha

visit News18 Urdu for latest news, breaking news, news headlines and updates from Alapuzzha on politics, sports, entertainment, cricket, crime and more.




z

News18 Urdu: Latest News Kozhikode

visit News18 Urdu for latest news, breaking news, news headlines and updates from Kozhikode on politics, sports, entertainment, cricket, crime and more.




z

News18 Urdu: Latest News Mirzapur

visit News18 Urdu for latest news, breaking news, news headlines and updates from Mirzapur on politics, sports, entertainment, cricket, crime and more.




z

News18 Urdu: Latest News Ghaziabad

visit News18 Urdu for latest news, breaking news, news headlines and updates from Ghaziabad on politics, sports, entertainment, cricket, crime and more.




z

News18 Urdu: Latest News Gazipur

visit News18 Urdu for latest news, breaking news, news headlines and updates from Gazipur on politics, sports, entertainment, cricket, crime and more.




z

Man Plans To Fix Up Phone Booth After Finding Bottle In Ocean With Reward From 2600 Magazine