Is there a way to force a compiled p-cell to encapsulate the procedures it was originally compiled with? I am working with a collaborative team that spans many sites, and we need to share our p-cells. However, these p-cells and associated procedures are under active development, and they pretty much stay under active development until tapeout. So there are situations where the compiled p-cell libraries can be fully synced between sites, but the procedures defined in the libInit.il can be slightly out of sync which can slightly change the behavior of p-cells between sites.Is there a clean way to avoid this? It would be great if the compiled p-cell had all necessary functions already defined inside of it and was a fully standalone p-cell.Thanks,Mark
Without an adequate implementation of namespaces, this is not a simple task. IC616 added namespaces but remarks on this page say they are not well tested.
The problem is that the lower level functions which are loaded in the libInit.il all exist in the same namespace. Thus, myFunction() from 3 weeks ago cannot exist alongside myFunction() with changes from yesterday. Users developed lots of work arounds for this including naming each function with the version to be used, version1_2_myFunction(), and calling that name. It means that the pcell contains the specific names for the function versions or the version name is passed as a parameter and the function calls concatenate the version and name and then use eval/evalstring/apply to execute the proper version of the function. Pretty messy but version1_2myFunction can exist parallel with version1_3myFunction. This is the methodology used by PAS (PDK specific naming) and is usually implemented by the PDK generation tool.
Another way I have experimented with is to create methods which dispatch on the version name (something SKILL and Lisp can do but most other languages cannot). The version is a parameter on the pcell and the method checks the version number during dispatch. The latest version is always called by generic function so if nothing matches, the latest version is used. It tested out with some simple examples.
I hope they get namespaces fixed as it will put an end to all this sillyness.