{"id":19290933,"url":"https://github.com/the-openroad-project/sa-pcb","last_synced_at":"2025-10-14T22:38:14.172Z","repository":{"id":73616936,"uuid":"186046194","full_name":"The-OpenROAD-Project/SA-PCB","owner":"The-OpenROAD-Project","description":"Annealing-based PCB placement tool","archived":false,"fork":false,"pushed_at":"2020-05-26T23:34:53.000Z","size":84726,"stargazers_count":37,"open_issues_count":7,"forks_count":11,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-04-22T07:01:49.579Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/The-OpenROAD-Project.png","metadata":{"files":{"readme":"readme.md","changelog":null,"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":"AUTHORS.md","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-05-10T19:50:31.000Z","updated_at":"2025-04-18T14:01:49.000Z","dependencies_parsed_at":null,"dependency_job_id":"962f465d-8610-4c9e-a4ab-664baf41a9ca","html_url":"https://github.com/The-OpenROAD-Project/SA-PCB","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/The-OpenROAD-Project/SA-PCB","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/The-OpenROAD-Project%2FSA-PCB","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/The-OpenROAD-Project%2FSA-PCB/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/The-OpenROAD-Project%2FSA-PCB/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/The-OpenROAD-Project%2FSA-PCB/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/The-OpenROAD-Project","download_url":"https://codeload.github.com/The-OpenROAD-Project/SA-PCB/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/The-OpenROAD-Project%2FSA-PCB/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273218417,"owners_count":25065913,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-01T02:00:09.058Z","response_time":120,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":"2024-11-09T22:23:03.983Z","updated_at":"2025-10-14T22:38:09.136Z","avatar_url":"https://github.com/The-OpenROAD-Project.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SA-PCB\n  *SA-PCB: Simulated Annealing-based Placement For PCB Layout*\n\n## Getting Started\n  * See https://github.com/The-OpenROAD-Project/PCB-PR-App\n\n## Installation\n\n### Pre-requisites\n  * GCC compiler \u003e= 4.8.5\n  * boost library \u003e= 1.62\n  * cpp-taskflow \u003e= 2.0\n  * Python \u003e= 3.6\n  * shapely \u003e= 1.6.4\n  * matplotlib \u003e= 3.0.2\n  * docopt \u003e= 0.6.2\n  * numpy \u003e= 1.15.4\n  * argparse \u003e= 1.1\n  * tqdm \u003e= 4.30.0 [python-multistart]\n  * numba \u003e= 0.42.1 [python-multistart]\n  * multiprocessing [python-multistart]\n  * yaml\n  * json\n  * Recommended OS: Centos6, Centos7 or Ubuntu 16.04\n\n### Clone repo and submodules\n    $ git clone --recursive https://github.com/choltz95/c-pcb-annealer\n    $ cd ~/c-pcbannealer\n    $ pip install -r requirements.txt\n    $ make install\n    $ make\n\n### Fix eagle2bookshelf errors\n    You may have to fix some Swoop errors. Download DRU.py and place into the eagle2bookshelf\n    directory.\n\n     $ wget https://raw.githubusercontent.com/NVSL/Swoop/master/Swoop/DRU.py\n     $ mv DRU.py eagle2bookshelf\n\n\n### Check your installation\n    To make sure your installation is correct and the current tool version is stable enough,\n    run a Hello World application:\n\n    $ make test\n    $ open test.png\n\n### How to execute\n    ./sa parameters\n       -i \u003coptional, value\u003e : for denoting # outer iterations PER SA INSTANCE\n       -j \u003coptional, value\u003e : for denoting 'j'*#nodes inner iterations\n       -t \u003coptional, value\u003e : for denoting initial temperature\n       -f \u003coptional, str\u003e   : for output filename\n       -e \u003coptional, float\u003e : convergence epsilon\n       -v \u003coptional\u003e        : Ben-amur flag\n       -x \u003coptional, int\u003e   : simulated annealing instance index\n       -p \u003crequired, string\u003e: input placement board\n       -d \u003coptional, {0-3}\u003e : debug verbosity\n       -r \u003coptional, {0-3}\u003e : rotation\n       EXAMPLE: ./sa -i 20000 -j 20 -t 1 -p input -f output\n\n### License\n  * BSD-3-clause License [[Link]](LICENSE)\n\n## Description\n C++ annealer for simple PCB placement of polygonal components.\n Supports the following:\n  - Analytical overlap for arbitrary polygons using boost geometries\n  - Support 90 deg., 45 deg., free rotation [free rotation in progress]\n  - HPWL cost term for wirelength\n  - BEN-AMEUR et al. cost-normalization \u0026 automatic initial temperature\n  - Variable placement shift window, smaller displacement with temperature\n  - Geometric temperature updates (cooling schedule) based on Timberwolf schedule\n  - Bookshelf parser\n  - Bookshelf version translator\n  - Plotting \u0026 animations\n\n## Limitations / Current issues / In development\n  - Parallel multistart [Issues with cpp-taskflow. Still support for multi-start via python script.]\n  - R-Tree spatial indexing for fast overlap computation\n  - Free rotation\n  - Algorithm very sensitive to parameters\n  - Broken support for weighted modules/nets\n  - Set up Dockerfile\n  - Support json configuration files for algorithm parameters\n\n### Authors\n  - Chester Holtz, Devon Merrill, James (Ting-Chou) Lin, Connie (Yen-Yi) Wu (Ph.D. advisor: Chung-Kuan Cheng, Steven Swanson).\n  - Pull requests to improve the tool are very appreciated.\n\n### Citations\n  - Sechen, C. and Sangiovanni-Vincentelli, A. L., \"The Timber-Wolf placement and routing package\", IEEE J. Solid-State Circuits 30:510–522 1985.\n  - Spindler, P. and Johannes, F., \"Fast and Accurate Routing Demand Estimation for Efficient Routability-driven Placement\n\", IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, 2007.\n  - C.-K. Cheng, A. B. Kahng, I. Kang and L. Wang, \"RePlAce: Advancing Solution Quality and Routability Validation in Global Placement\", to appear in IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, 2018. (Digital Object Identifier: 10.1109/TCAD.2018.2859220)\n  - Ben-Ameur, Walid. \"Computing the initial temperature of simulated annealing.\" Computational Optimization and Applications 29, no. 3 (2004): 369-385.\n  - James M. Varanelli and James P. Cohoon. Two-stage simulated annealing methodology. In Proceedings of the 5th Great Lakes Symposium on VLSI, pages 50–53, Buffalo, NY, 16.-18. March 1995. IEEE, Los Alamitos, CA. †EI M153001/95\n  - K. D. Boese A. B. Kahng and S. Muddu A new adaptive multistart technique for combinatorial global optimizations, Operations Research Letters, 16(2): 101-113, September, 1993.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthe-openroad-project%2Fsa-pcb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthe-openroad-project%2Fsa-pcb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthe-openroad-project%2Fsa-pcb/lists"}