A SKILL and Python Framework for automating IC design in Cadence Virtuoso with the following goals:
- Bring the capabilities of skill to Python so (ideally) you don't have to write skill code to do EDA in Python
- In those cases where you do need to write skill, make it pythonic
Projects Built with Virtue
- Softworks: Software and documentation view types in the Cadence Virtuoso IC design environment.
- Data-panels: Export rich data reports from simulation results to pptx slides and xlsx tables
- Morpheus: Generate Maestro test benches in a standard way compatible with an associated data-panels report
Features
- A SKILL standard library of "batteries included" modules
- A SKILL test framework modeled after pytest
- A SKILL TOML config file reader and writer for the TOML standard
- A SKILL package manager
- Define SKILL++ modules
- Import modules into a SKILL++ lexical scope using the top-level "Import" table
- Create SKILL++ packages
- SKILL environment manager using Conda or Pip Python environments
- Seamless execution of SKILL from Python using SkillBridge
Example SKILL++ Package
let((Str
(module_description "String functions")
(Module Import['Module])
)
Str = let(()
procedure(emptyp(in "g")
"Checks if the input is an empty string
@param Any type of object to be checked
@return A boolean, 't if it is an empty string, otherwise nil"
stringp(in) && strlen(in) == 0)
procedure(str2bool(input_string "t")
"Converts a case-insensitive 'TRUE' or 'FALSE' string to a boolean
('t / nil) If it is not a boolean, the string is returned."
if(stringp(input_string) && (upperCase(input_string) == "TRUE") then
't
else if(stringp(input_string) && (upperCase(input_string) == "FALSE") then
nil
else
error("%s is not a boolean, must be \"TRUE\" or \"FALSE\"
(case insensitive)" input_string)
))
)
list(nil
'emptyp emptyp
'str2bool str2bool
))
Module->New('Str Str
?package Import['Virtue]
?description module_description)
)
Example Test Script
Note the package imports at the top
let(((Str Import['Str])
(Test Import['Test])
(Virtue Import['Virtue])
)
procedure(Test_emptyp()
assert(Str->emptyp(""))
assert(!Str->emptyp("test"))
)
procedure(Test_str2bool()
assert(Str->str2bool("true"))
assert(Str->str2bool("TRUE"))
assert(!Str->str2bool("false"))
)
procedure(Test_str2bool_error()
assert(!errset(Str->str2bool("Nothing")))
)
Test->RunFile(list(nil
'Test_emptyp Test_emptyp
'Test_str2bool Test_str2bool
'Test_str2bool_error Test_str2bool_error
)
?filepath Virtue->GetCurrentFilePath()
)
)
Prints out the following when ran in the CIW:
FILE: /path/to/file/test_Str.ils
passed: Test_emptyp
passed: Test_str2bool
passed: Test_str2bool_error
3 / 3 tests passed
Installation
Virtue requires Python >= 3.7 and can be installed using several methods:
- Conda
- Pip
- From source
See the installation instructions in the documentation for detailed instructions.
Metadata
Release files for virtue-skill 0.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| virtue-skill-0.4.1.tar.gz | 643.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| virtue_skill-0.4.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 682.8 kB
Release files / virtue-skill-0.4.1.tar.gz
| Download URL | virtue-skill-0.4.1.tar.gz |
|---|---|
| Size | 643.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2056bffe00118d39b100ab68d5bf8a3a31a3970308783dc6f11d95e7f5c39066
|
|
BLAKE2b-256 checksum How to use checksums |
3b7ed8592c88d0af9bf4d91fc8592b47c5f787f8f9dcbb10fae7559853ea86f1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.1 CPython/3.9.14
|
Release files / virtue_skill-0.4.1-py3-none-any.whl
| Download URL | virtue_skill-0.4.1-py3-none-any.whl |
|---|---|
| Size | 39.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
70fad81b7af97fb14fb8f8035825e895bfaf91e980db41808d259b3fbc2c9278
|
|
BLAKE2b-256 checksum How to use checksums |
ee3326b7d010e64e61ccd25dce7094e6da1eaf948aeab023f61205a314f5dcc0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.1 CPython/3.9.14
|