{"id":32177608,"url":"https://github.com/cascode-labs/virtue","last_synced_at":"2026-02-18T22:02:24.048Z","repository":{"id":45809712,"uuid":"445541712","full_name":"cascode-labs/virtue","owner":"cascode-labs","description":"A Python and SKILL Framework for Cadence Virtuoso","archived":false,"fork":false,"pushed_at":"2025-12-13T00:20:30.000Z","size":859,"stargazers_count":45,"open_issues_count":14,"forks_count":7,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-12-14T15:16:34.677Z","etag":null,"topics":["cadence","python","skill","viper","virtuoso"],"latest_commit_sha":null,"homepage":"https://www.cascode-labs.org/virtue/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cascode-labs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-01-07T14:07:08.000Z","updated_at":"2025-12-13T00:20:34.000Z","dependencies_parsed_at":"2024-01-08T17:10:38.095Z","dependency_job_id":null,"html_url":"https://github.com/cascode-labs/virtue","commit_stats":{"total_commits":167,"total_committers":2,"mean_commits":83.5,"dds":"0.041916167664670656","last_synced_commit":"5868f463338a7bebdc66a249e6edf768c41dbf75"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/cascode-labs/virtue","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cascode-labs%2Fvirtue","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cascode-labs%2Fvirtue/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cascode-labs%2Fvirtue/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cascode-labs%2Fvirtue/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cascode-labs","download_url":"https://codeload.github.com/cascode-labs/virtue/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cascode-labs%2Fvirtue/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29596329,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T20:59:56.587Z","status":"ssl_error","status_checked_at":"2026-02-18T20:58:41.434Z","response_time":162,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cadence","python","skill","viper","virtuoso"],"created_at":"2025-10-21T20:14:38.928Z","updated_at":"2026-02-18T22:02:24.042Z","avatar_url":"https://github.com/cascode-labs.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Virtue](docs/source/_static/logo/virtue_banner_with_tagline.png \"Virtue\")\n\n[![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/cascode-labs/virtue?include_prereleases)](https://github.com/cascode-labs/virtue/releases/latest)\n[![Conda](https://img.shields.io/conda/v/conda-forge/virtue?label=conda-forge)](https://anaconda.org/conda-forge/virtue)\n[![PyPI](https://img.shields.io/pypi/v/virtue-skill)](https://pypi.org/project/virtue-skill/)\n[![GitHub issues](https://img.shields.io/github/issues/cascode-labs/virtue)](https://github.com/cascode-labs/virtue/issues)\n[![PyPI - License](https://img.shields.io/pypi/l/virtue-skill)](https://choosealicense.com/licenses/mit/)\n\nA SKILL and Python Framework for automating IC design in\n[Cadence Virtuoso](https://www.cadence.com/en_US/home/tools/custom-ic-analog-rf-design/circuit-design.html)\nwith the following goals:\n\n1. Bring the capabilities of skill to Python so (ideally) you don't have\n   to write skill code to do EDA in Python\n2. In those cases where you do need to write skill, make it pythonic\n\n\n## Projects Built with Virtue\n\n- [Softworks](https://github.com/cascode-labs/softworks):\n  Software and documentation view types in the Cadence Virtuoso IC design environment.\n- [Data-panels](https://github.com/cascode-labs/data-panels):\n  Export rich data reports from simulation results to pptx slides and\n  xlsx tables\n- [Morpheus](https://github.com/cascode-labs/morpheus):\n  Generate Maestro test benches in a standard way compatible with an associated\n  data-panels report\n\n\u003e [YouTube Video Explanation](https://www.youtube.com/watch?v=5GJbBLpHo6s\u0026t=1s)\n\n## Features\n\n- A [SKILL standard library](https://www.cascode-labs.org/virtue/reference/skill_api/index.html) of \"batteries included\" modules\n- A [SKILL test framework](https://www.cascode-labs.org/virtue/overview/testing_framework.html) modeled after [pytest](https://docs.pytest.org/en/7.1.x/)\n- A [SKILL TOML config file reader and writer](https://www.cascode-labs.org/virtue/overview/toml.html)\n  for the [TOML standard](https://toml.io)\n- A SKILL package manager\n  - Define [SKILL++ modules](https://www.cascode-labs.org/virtue/overview/packaging/modules.html)\n  - Import modules into a SKILL++ lexical scope using the top-level \"VrtImport\" table\n  - Create [SKILL++ packages](https://www.cascode-labs.org/virtue/overview/packaging/skill_packages.html)\n- SKILL environment manager using\n  [Conda](https://docs.conda.io/en/latest/) or\n  [Pip](https://pip.pypa.io/en/stable/reference/build-system/pyproject-toml/)\n  Python environments\n- Seamless execution of SKILL from Python using\n  [SkillBridge](https://unihd-cag.github.io/skillbridge/)\n\n## Example SKILL++ Package\n\n```scheme\nlet((Str\n     (module_description \"String functions\")\n     (Module VrtImport['Module])\n    )\nStr = let(()\n\nprocedure(emptyp(in \"g\")\n  \"Checks if the input is an empty string\n  @param Any type of object to be checked\n  @return A boolean, 't if it is an empty string, otherwise nil\"\n  stringp(in) \u0026\u0026 strlen(in) == 0)\n\nprocedure(str2bool(input_string \"t\")\n  \"Converts a case-insensitive 'TRUE' or 'FALSE' string to a boolean\n   ('t / nil) If it is not a boolean, the string is returned.\"\n if(stringp(input_string) \u0026\u0026 (upperCase(input_string) == \"TRUE\") then\n   't\n  else if(stringp(input_string) \u0026\u0026 (upperCase(input_string) == \"FALSE\") then\n    nil\n  else\n    error(\"%s is not a boolean, must be \\\"TRUE\\\" or \\\"FALSE\\\"\n           (case insensitive)\" input_string)\n  ))\n)\n\nlist(nil\n  'emptyp emptyp\n  'str2bool str2bool\n))\n\nModule-\u003eNew('Str Str\n             ?parent VrtImport['Virtue]\n             ?description module_description)\n\n)\n```\n\n## Example Test Script\n\nNote the package imports at the top\n\n``` scheme\nlet(((Str VrtImport['Str])\n     (Test VrtImport['Test])\n     (Virtue VrtImport['Virtue])\n    )\n\nprocedure(Test_emptyp()\n    assert(Str-\u003eemptyp(\"\"))\n    assert(!Str-\u003eemptyp(\"test\"))\n)\n\nprocedure(Test_str2bool()\n    assert(Str-\u003estr2bool(\"true\"))\n    assert(Str-\u003estr2bool(\"TRUE\"))\n    assert(!Str-\u003estr2bool(\"false\"))\n)\n\nprocedure(Test_str2bool_error()\n    assert(!errset(Str-\u003estr2bool(\"Nothing\")))\n)\n\nTest-\u003eRunFile(list(nil\n  'Test_emptyp Test_emptyp\n  'Test_str2bool Test_str2bool\n  'Test_str2bool_error Test_str2bool_error\n  )\n  ?filepath Virtue-\u003eGetCurrentFilePath()\n)\n\n)\n```\n\nPrints out the following when ran in the CIW:\n\n``` sh\nFILE: /path/to/file/test_Str.ils\n  passed: Test_emptyp\n  passed: Test_str2bool\n  passed: Test_str2bool_error\n3 / 3 tests passed\n```\n\n## Installation\n\nVirtue requires Python \u003e= 3.7 and can be installed using several methods:\n\n- Conda\n- Pip\n- From source\n\nSee the\n[installation instructions in the documentation](https://www.cascode-labs.org/virtue/overview/index.html#installation)\nfor detailed instructions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcascode-labs%2Fvirtue","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcascode-labs%2Fvirtue","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcascode-labs%2Fvirtue/lists"}