{"id":37072729,"url":"https://github.com/pulp-platform/padrick","last_synced_at":"2026-01-14T08:32:28.223Z","repository":{"id":40349930,"uuid":"358975429","full_name":"pulp-platform/padrick","owner":"pulp-platform","description":"Padrick - A Smart Pad-Multiplexer IP Generator for SoCs","archived":false,"fork":false,"pushed_at":"2024-03-12T16:21:21.000Z","size":2255,"stargazers_count":5,"open_issues_count":7,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-23T03:38:46.789Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","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/pulp-platform.png","metadata":{"files":{"readme":"README.org","changelog":"CHANGELOG.rst","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.rst"}},"created_at":"2021-04-17T20:26:04.000Z","updated_at":"2023-10-31T20:36:43.000Z","dependencies_parsed_at":"2023-12-19T17:20:11.421Z","dependency_job_id":"9bb5bfa6-aedd-4b6d-8662-6c51e48e1496","html_url":"https://github.com/pulp-platform/padrick","commit_stats":{"total_commits":158,"total_committers":5,"mean_commits":31.6,"dds":"0.42405063291139244","last_synced_commit":"4f35abb9cb0d3632b8a3fc40cdf9b27888856da5"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/pulp-platform/padrick","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fpadrick","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fpadrick/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fpadrick/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fpadrick/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pulp-platform","download_url":"https://codeload.github.com/pulp-platform/padrick/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fpadrick/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28414208,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:31:27.429Z","status":"ssl_error","status_checked_at":"2026-01-14T08:31:19.098Z","response_time":107,"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":"2026-01-14T08:32:27.608Z","updated_at":"2026-01-14T08:32:28.190Z","avatar_url":"https://github.com/pulp-platform.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"#+title: Padrick - A flexible Padframe Generator for SoCs\n#+author: Manuel Eggimann\n#+OPTIONS: ^:nil toc:5\n* State of Development\n  *WARNING* Padrick is still in it's very early stage of development and not yet\n   ready for production. Do not yet use it for actual tapeouts without asking\n   the author about the current state of development.\n* Purpose of this Tool\n  Modern SoCs contain a large number of peripherals and functional blocks that\n  need to communicate with the outside world. Most of the time, the number of IO\n  pins required to map every IO facing port of the whole SoC to dedicated IO\n  pads is infeasible due to limited available area dedicated for IO pads.\n  Instead, most modern SoCs use multiplexing logic to use a single IO pad for\n  several different functionalities according to some user-programmable\n  configuration register. While some SoCs (e.g. Nordic nRF52 series  of BLE\n  chips) allow mapping of every module port (e.g. SPI MOSI signal) to every\n  available IO pad in a full crossbar fashion, traditionally the PULP chips\n  taped out so far only used the approach to assign 2-3 Module ports to one\n  dedicated IO pad. I.e. the user can chose to use e.g. IO Pad 43 as either\n  GPIO4 or I2C_SCK but the SPI_MOSI signal for example cannot be routed to IO\n  Pad 43. While the full-crossbar like approach can have its demerits (e.g.\n  routing can become trickier if very fast IO signals are involfed), the\n  full-crossbar routing approach makes the resulting SoC way more flexible for\n  dynamic adaptation to the workload and simplifies a lot the PCB design process\n  and repurposing of existing PCBs by means of rerouting the IO signals.\n\n  Since the padframe is always a custom tailored component for one particular\n  SoCs, a lot of time has been spent in the past writing this padframe\n  multiplexing and routing logic. This design process is very labouruos and\n  extremely error prone which is where Padrick enters the stage;\n\n  Padrick aims to solve the problem of painstakingly writing the multiplexing\n  logic and interconnection logic for padframes by hand. Not only does it\n  (optionally) allow full-crossbar like routing of every periphery port to every\n  IO pad it also generates C-drivers and Documentation to interact with the\n  auto-generated peripherals.\n\n  How does it work? The user provides a YAML description of the desired Padrame\n  configuration. The configuration file's syntax is tailored in a way such that\n  large portions of it can be copy pasted or even entirely reused from one SoC\n  to the other while only minor modifications of e.g. the involved IO pads need\n  to be performed. After parsing and internaly validating the configuration file\n  with a couple of sanity checks, Padrick generates several SystemVerilog\n  modules that instantiate the desired IO Pads, implements the IO Multiplexing\n  logic and exposes the SoC facing IO signal and either an AXI-lite or APB\n  interface to be attached to the SoC configuration bus for at-runtime control\n  over the IO Pads.\n* Getting Started\n\n** Download Padrick Binary\n   You can find the latest binary x86 release on the github [[https://github.com/pulp-platform/padrick/releases][release page]].\n\n   Use the following snippet to download the appimage in your current path:\n\n   #+BEGIN_SRC  bash\n     curl https://api.github.com/repos/pulp-platform/padrick/releases/latest \\\n         | grep \"Padrick-x86_64.AppImage\" \\\n         | cut -d : -f 2,3 \\\n         | tr -d \\\" \\\n         | wget -qi -\n     mv Padrick-x86_64.AppImage padrick\n     chmod a+x padrick\n   #+END_SRC\n\n   Now you can directly start using the downloaded binary. E.g. use this command to\n   show the built-in help::\n\n   #+BEGIN_SRC bash\n     ./padrick --help\n   #+END_SRC\n\n** Installation with Python pip\n  If you want to modify padrick yourself or don't want to use one of the binary\n  releases, installation of padrick is straight forward:\n\n  #+BEGIN_SRC bash\n    pip install git+ssh://git@github.com:pulp-platform/padrick.git\n  #+END_SRC\n\n  Or if you prefer an https connection over SSH:\n  #+BEGIN_SRC bash\n    pip install git+https://github.com/pulp-platform/padrick\n  #+END_SRC\n\n  If you plan to modify or frequently update padrick you might want to install\n  it with the pip editable flag so changes to the source code of padrick take\n  effect immediately to all Python environments were you installed padrick.\n\n  #+BEGIN_SRC bash\n    git clone https://github.com/pulp-platform/padrick\n    pip install -e ./padrick\n  #+END_SRC\n\n  Both installation schemes will automatically install all the required\n  dependencies. This will install the new command line tool ~padrick~.\n\n** Write the Padframe Configuration File\n  Now that you installed padrick, you can start writing your padframe\n  configuration file. Have a look at some of the examples in the ~examples~\n  folder to become familiar with the syntax and read the [[https://padrick.readthedocs.io/en/latest/][documentation]].\n\n** Generating the Padframe\n   With your padframe configuration file ready you can now invoke the ~padrick~\n   command to generate the padframe project:\n\n   #+BEGIN_SRC bash\n     padrick generate rtl -output my_padframe my_padframe_config.yml\n   #+END_SRC\n\n   This command will first parse your configuration file and pass it through a\n   number of sanity checks to ensure it has the proper format. If there is a\n   mistake in the config file, you will see an error message with hints to where\n   the error occured.\n\n   After successfully parsing the config file, padrick will generate a complete\n   RTL project in the subdirectory ~my_padframe~. If the folder doesn't exist,\n   it will be created for you. Amongst the various SystemVerilog RTL files, the\n   folder will also be populated with appropriate Bender and IPApprox IP\n   configuration file to simplify the integration of the auto-generated\n   padframe.\n\n** Instantiating the Padframe within your Design\n   Now that your padframe IP is generated you can instantiate it within your\n   design. The toplevel module for user instantiation is called\n   ~\u003cpadframe.name\u003e_top.sv~. The structs that make up the interface of this\n   SystemVerilog module are defined in ~pkg_\u003cpadframe.name\u003e.sv~.\n* Documentation\n  For more in-depth documentation of Padrick, visit the project Documentation\n  site at [[https://padrick.readthedocs.io/en/latest/]]\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpulp-platform%2Fpadrick","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpulp-platform%2Fpadrick","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpulp-platform%2Fpadrick/lists"}