Cadence® system design and verification solutions, integrated under our Verification Suite, provide the simulation, acceleration, emulation, and management capabilities.
Verification 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.
More Support Log In
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.
The Cadence Academic Network helps build strong relationships between academia and industry, and promotes the proliferation of leading-edge technologies and methodologies at universities renowned for their engineering and design excellence.
Participate in CDNLive
A huge knowledge exchange platform for academia to network with industry. We are looking for academic speakers to talk about their research to the industry attendees at the Academic Track at CDNLive EMEA and Silicon Valley.
Come & Meet Us @ Events
A huge knowledge exchange platform for academia. We are looking for academic speakers to talk about their research to industry attendees.
Americas University Software Program
Join the 250+ qualified Americas member universities who have already incorporated Cadence EDA software into their classrooms and academic research projects.
EMEA University Software Program
In EMEA, Cadence works with EUROPRACTICE to ensure cost-effective availability of our extensive electronic design automation (EDA) tools for non-commercial activities.
Apply Now For Jobs
If you are a recent college graduate or a student looking for internship. Visit our exclusive job search page for interns and recent college graduate jobs.
Cadence is a Great Place to do great work
Learn more about our internship program and visit our careers page to do meaningful work and make a great impact.
Get the most out of your investment in Cadence technologies through a wide range of training offerings.
Overview All Courses Asia Pacific EMEANorth America
Instructor-led training [ILT] are live classes that are offered in our state-of-the-art classrooms at our worldwide training centers, at your site, or as a Virtual classroom.
Online Training is delivered over the web to let you proceed at your own pace, anytime and anywhere.
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 technology. 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.
I would like to run a perl program from my Allegro PCB Skill code.
I have skill code like belowprocedure(test() cid=ipcBeginProcess("perl C:/test.pl") ipcReadProcess(cid 5) )
The perl program(test.pl) is reading data/values from text files containing multiple lines and printing out values using foreach loop(till EOF)
I would like to have some kind of blocking method to pass the values to skill code one at a time(and then returning to perl to run next) so as to manupulate in skill.
You could just use parseString() on the result of ipcReadProcess - e.g. parseString(ipcReadProcess(cid 5) "\n") to split the strings on the carriage return. Other than that you'll have to create some kind of handshaking protocol between the two - and make sure you flush the output in perl after writing each line. By handshaking I mean you'd have to read a line in SKILL, and then send a message back using ipcWriteProcess, and have your perl script wait until it gets the message back before writing the next string.
It's not that clear what you really want to do here or why it needs to do this one at a time. In fact if you only want to read the file and print it out, just doing printf("%s" ipcReadProcess(cid 5)) would be sufficient. So you could do:
procedure(test() cid=ipcBeginProcess("perl C:/test.pl") ipcWaitForProcess(cid) while(ipcIsAliveProcess(cid) printf("%s" ipcReadProcess(cid 5)) ))
BTW - not sure why you posted this in the Custom IC SKILL forum if you're using Allegro SKILL - there's a PCB SKILL forum which would be more appropriate. However, the code above should work in both Virtuoso and Allegro environments, I believe.
In reply to Pawandeep:
I am trying to run a perl script in skill through CIW. I am using ipcBeginProcess("perl filename.pl").Please post the procedure to execute the perl script in skill and see the results.
In reply to Heywire:
Normally perl scripts have buffered output, which tends to mean that you wouldn't see any output until perl's output buffer fills up (1024 chars, I think). So I used this example "nobuf.pl" to illustrate how to change that:
$|=1;print "now you see it...";sleep 10;print "now you don't...";
The "$|" bit is the key to making the output unbuffered.
procedure(CCFprintOutput(cid data) printf("RECEIVED at %s: %s\n" getCurrentTime() data))
procedure(CCFprogramFinished(cid status) printf("FINISHED at %s with exit status %d\n" getCurrentTime() status))
ipcBeginProcess("perl nobuf.pl" "" 'CCFprintOutput 'CCFprintOutput 'CCFprogramFinished)
From which I got:
RECEIVED at Apr 26 20:12:12 2014: now you see it...RECEIVED at Apr 26 20:12:22 2014: now you don't...FINISHED at Apr 26 20:12:22 2014 with exit status 0
If I had run the command for "buf.pl" which is identical except for omitting the first line (the $| statement), I got a 10 second delay and then:
RECEIVED at Apr 26 20:15:11 2014: now you see it...now you don't...FINISHED at Apr 26 20:15:11 2014 with exit status 0
Of course, this example is showing asynchronous communication. It's also possible to just do:
ipcId=ipcBeginProcess("perl nobuf.pl")ipcWaitForProcess(ipcId)ipcReadProcess(ipcId 30) =>"now you see it..."ipcReadProcess(ipcId 30) => "now you don't..." (after a delay)ipcIsAliveProcess(ipcId) => nil
If you want synchronous communication. The 30 is a timeout in case the child process doesn't respond.
Hope that helps!
In reply to Andrew Beckett:
It's been great help. Thanks a lot.
I wanted write skill program(in Virtuoso CIW) and call perl code using ipc process. I want to pass argument/variables from skill domain to the perl code.Please enlighten me regarding the steps and methodolgy.By the way, how can I create an excel/spreadsheet file and write it, in skill?
Thanks and best regards,
Where the Perl program is invoked in the ipcBeginProcess statement (as in the earlier example in this thread), you can use the sprintf function to build the command line for the Perl program up, inserting any SKILL variable values where needed. As an example, you might do something like this:
;; pass the SKILL variables skillStringVar, skNum1 and skNum2 as command line arguments to the Perl program
cmd = sprintf("perlProg %s %d %d" skillStringVar skNum1 skNum2)
Hopefully this answers your question and helps you?
In reply to skillUser:
I think you forgot the `nil' argument to the sprintf function
cmd = sprintf(nil "perlProg %s %d %d" skillStringVar skNum1 skNum2)
cmd;=> "perlProg tata 1 2"
In reply to Anand Mohan:
First of all, the forum guidelines ask you not to post on the end of an old thread - this is actually a thread which is asking about the opposite of what you want. It muddies the water for anyone who searches for related topics.
Secondly, does this post help? It's showing how to implement a socket in Virtuoso that you could then talk to from an external Tcl (or perl, or Python) program.
Although putting the new thread in the Hardware/Software Co-Development, Verification and Integration Forums which has nothing whatsoever to do with what you're asking was probably not the wisest. I don't subscribe to that forum (since it's not really my area), and so would never have seen the post. The Custom IC SKILL Forum would have been a better choice. I'll move it.