{"id":24756333,"url":"https://github.com/dalance/sdcx","last_synced_at":"2026-03-10T08:01:46.162Z","repository":{"id":207490355,"uuid":"716391735","full_name":"dalance/sdcx","owner":"dalance","description":null,"archived":false,"fork":false,"pushed_at":"2026-02-11T20:11:42.000Z","size":533,"stargazers_count":21,"open_issues_count":4,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-02-12T04:27:48.879Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dalance.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE-APACHE","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},"funding":{"github":"dalance"}},"created_at":"2023-11-09T03:16:26.000Z","updated_at":"2026-02-11T20:10:48.000Z","dependencies_parsed_at":"2024-05-06T22:23:58.071Z","dependency_job_id":"8628b2e1-5711-4d55-b3fd-d9a0e3d877cc","html_url":"https://github.com/dalance/sdcx","commit_stats":null,"previous_names":["dalance/sdcx"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dalance/sdcx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dalance%2Fsdcx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dalance%2Fsdcx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dalance%2Fsdcx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dalance%2Fsdcx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dalance","download_url":"https://codeload.github.com/dalance/sdcx/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dalance%2Fsdcx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30327553,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T05:25:20.737Z","status":"ssl_error","status_checked_at":"2026-03-10T05:25:17.430Z","response_time":106,"last_error":"SSL_read: 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":[],"created_at":"2025-01-28T13:50:53.388Z","updated_at":"2026-03-10T08:01:46.134Z","avatar_url":"https://github.com/dalance.png","language":"Rust","funding_links":["https://github.com/sponsors/dalance"],"categories":[],"sub_categories":[],"readme":"# SDCx\n\n[![Actions Status](https://github.com/dalance/sdcx/workflows/Regression/badge.svg)](https://github.com/dalance/sdcx/actions)\n[![Crates.io](https://img.shields.io/crates/v/sdcx.svg)](https://crates.io/crates/sdcx)\n\n**SDCx** is SDC (Synopsys Design Constraints) toolkit.\nIt provides a cli tool to handle SDC files and a SDC parsing library of Rust.\n\n# About SDC\n\nSDC (Synopsys Design Constraints) is a de facto standard format to describe constraints for ASIC/FPGA design.\nThe specification of SDC is published through [Technology Access Program (TAP-in)](https://www.synopsys.com/community/interoperability-programs/tap-in.html).\nSDCx supports SDC1.1 ~ SDC2.1 defined at the specification.\n\n# CLI tool\n\n`sdcx` is a CLI frontend of SDCx. This provides the following features.\n\n- Check : Validate an input SDC file.\n- Format: Format an input SDC file.\n\n`sdcx` supports gzip-ed sdc file. If the extension of the specified file name is `.gz`, it is treated as gzip-ed file.\n\n## Check\n\n`sdcx check` validates an input SDC file.\nBy default, `sdcx` uses SDC version according to `set sdc_version` command.\nIf version is not specified, SDC 2.1 will be assumed.\nIf `--force-version` option is provided, the version can be overrided.\n\n```console\n$ cat test.sdc\nset sdc_version 2.1\nset_sense -positive pin; # set_sense is supported on SDC2.1 only\n$ sdcx check test.sdc\n$ sdcx check --force-version 2.0 test.sdc\nerror[sdcx::sdc::SdcError]: Unsupported command at SDC 2.0\n  ┌─ test.sdc:2:1\n  │\n2 │ set_sense -positive pin; # set_sense is supported on SDC2.1 only\n  │ ^^^^^^^^^^^^^^^^^^^^^^^ Found\n```\n\n## Format\n\n`sdcx fmt` formats an input SDC file.\nIf `--output` option is provided, the result will be written to the specified file.\nOtherwise it will be outputted to stdout.\n\nThe formatted result will be:\n\n- Commands are sorted by alphabet-order.\n- Arguments of each command are ordered by the pre-defined order.\n- All unnecessary whitespaces are removed.\n- All comments except file header are removed.\n\nSome EDA tools output randomly ordered commands in SDC file.\nIn the case, formatting can be used to get the stable result.\nAdditionally, the differences between EDA tool vendors can be removed too.\n\n```console\n$ cat test.sdc\nset_units    -time    ns    -capaticance    pF\ncreate_clock  -name    CLK    -period    10\n$ sdcx fmt test.sdc\ncreate_clock -period 10 -name CLK\nset_units -capacitance pF -time ns\n```\n\n# Library\n\n[![Crates.io](https://img.shields.io/crates/v/sdcx.svg)](https://crates.io/crates/sdcx)\n[![Docs.rs](https://docs.rs/sdcx/badge.svg)](https://docs.rs/sdcx)\n\n## Usage\n\n```console\n$ cargo add sdcx\n```\n\n## Example\n\n```rust\n    let code = format!(\"create_clock -period 10 -name CLK\\n\");\n    let sdc = sdcx::Parser::parse(\u0026code, \u0026\"\");\n    dbg!(sdc);\n```\n\n## License\n\nLicensed under either of\n\n * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)\n * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\n\nat your option.\n\n### Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally\nsubmitted for inclusion in the work by you, as defined in the Apache-2.0\nlicense, shall be dual licensed as above, without any additional terms or\nconditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdalance%2Fsdcx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdalance%2Fsdcx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdalance%2Fsdcx/lists"}