{"id":13958921,"url":"https://github.com/pulp-platform/pulpino","last_synced_at":"2026-02-07T23:36:01.410Z","repository":{"id":40643520,"uuid":"52028096","full_name":"pulp-platform/pulpino","owner":"pulp-platform","description":"An open-source microcontroller system based on RISC-V","archived":false,"fork":false,"pushed_at":"2024-02-06T11:08:38.000Z","size":17545,"stargazers_count":984,"open_issues_count":128,"forks_count":314,"subscribers_count":84,"default_branch":"master","last_synced_at":"2025-10-31T21:51:28.674Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://www.pulp-platform.org","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pulp-platform.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":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-02-18T18:15:49.000Z","updated_at":"2025-10-31T01:58:11.000Z","dependencies_parsed_at":"2024-11-28T02:42:51.418Z","dependency_job_id":null,"html_url":"https://github.com/pulp-platform/pulpino","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/pulp-platform/pulpino","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fpulpino","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fpulpino/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fpulpino/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fpulpino/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pulp-platform","download_url":"https://codeload.github.com/pulp-platform/pulpino/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fpulpino/sbom","scorecard":{"id":749356,"data":{"date":"2025-08-11","repo":{"name":"github.com/pulp-platform/pulpino","commit":"6631c49ba38a9258da44d6b120d902f7b81f9233"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.5,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/20 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":["Info: Possibly incomplete results: error parsing shell code: a command can only contain words and redirects; encountered (: vsim/tcl_files/run.tcl:0","Info: Possibly incomplete results: error parsing shell code: a command can only contain words and redirects; encountered (: vsim/tcl_files/run_spi.tcl:0","Info: Possibly incomplete results: error parsing shell code: a command can only contain words and redirects; encountered (: vsim/tcl_files/run_zero-riscy_spi.tcl:0"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 11 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-22T19:48:05.597Z","repository_id":40643520,"created_at":"2025-08-22T19:48:05.597Z","updated_at":"2025-08-22T19:48:05.597Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29212754,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T23:14:30.912Z","status":"ssl_error","status_checked_at":"2026-02-07T23:14:17.253Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":[],"created_at":"2024-08-08T13:02:06.795Z","updated_at":"2026-02-07T23:36:01.393Z","avatar_url":"https://github.com/pulp-platform.png","language":"C","readme":"\u003cimg src=\"https://raw.githubusercontent.com/pulp-platform/pulpino/master/doc/datasheet/figures/pulpino_logo_inline1.png\" width=\"400px\" /\u003e\n\n# Introduction\n\nPULPino is an open-source single-core microcontroller system, based on 32-bit\nRISC-V cores developed at ETH Zurich. PULPino is configurable to use either \nthe RISCY or the zero-riscy core.\n\nRISCY is an in-order, single-issue core with 4 pipeline stages and it has\nan IPC close to 1, full support for the base integer instruction set (RV32I),\ncompressed instructions (RV32C) and multiplication instruction set\nextension (RV32M). It can be configured to have single-precision floating-point\ninstruction set extension (RV32F). It implements several ISA extensions such as:\nhardware loops, post-incrementing load and store instructions, bit-manipulation\ninstructions, MAC operations, support fixed-point operations, packed-SIMD instructions\nand the dot product. It has been designed to increase the energy efficiency of\nin ultra-low-power signal processing applications.\nRISCY implementes a subset of the 1.9 privileged specification.\nFurther informations can be found in http://ieeexplore.ieee.org/abstract/document/7864441/.\n\nzero-riscy is an in-order, single-issue core with 2 pipeline stages and it has\nfull support for the base integer instruction set (RV32I) and \ncompressed instructions (RV32C). It can be configured to have multiplication instruction set\nextension (RV32M) and the reduced number of registers extension (RV32E).\nIt has been designed to target ultra-low-power and ultra-low-area constraints.\nzero-riscy implementes a subset of the 1.9 privileged specification.\n\nWhen the core is idle, the platform can be put into a low power mode, \nwhere only a simple event unit is active and everything else is clock-gated and consumes minimal power (leakage).\nA specialized event unit wakes up the core in case an event/interrupt arrives.\n\nFor communication with the outside world, PULPino contains a broad set of\nperipherals, including I2S, I2C, SPI and UART. The platform internal devices\ncan be accessed from outside via JTAG and SPI which allows pre-loading\nRAMs with executable code. In standalone mode, the platform boots from an\ninternal boot ROM and loads its program from an external SPI flash.\n\nThe PULPino platform is available for RTL simulation as well FPGA.\nPULPino has been taped-out as an ASIC in UMC 65nm in January 2016. It has full\ndebug support on all targets. In addition we support extended profiling with\nsource code annotated execution times through KCacheGrind in RTL simulations.\n\n\n## Requirements\n\nPULPino has the following requirements\n\n- ModelSim in reasonably recent version (we tested it with versions \u003e= 10.2c)\n- CMake \u003e= 2.8.0, versions greater than 3.1.0 recommended due to support for ninja\n- riscv-toolchain, specifically you need riscv32-unknown-elf-gcc compiler and\n  friends. There are two choices for this toolchain: Either using the official\n  RISC-V toolchain supported by Berkeley or the custom RISC-V toolchain from\n  ETH. The ETH versions supports all the ISA extensions that were incorporated\n  into the RI5CY core as well as the reduced base instruction set for zero-riscy.\n  Please make sure you are using the newlib version of the toolchain.\n- python2 \u003e= 2.6\n- verilator 3.884 only necessary if you want to use Verilator to evaluate PULPino.\n\n## ISA Support\n\nPULPino can run either with RISCY or zero-riscy.\nThe software included in this repository is compatible with both the cores\nand automatically targets the correct ISA based on the flags used.\nThe simulator (modelsim) must be explicitely told which edition you want to build.\nUse the environment variable `USE_ZERO_RISCY` and set it to either `1` for zero-riscy or \n`0` for RISCY.\n\n## Version Control\n\nPULPino uses multiple git subrepositories\n\nTo clone those subrepositores and update them, use\n\n    ./update-ips.py\n\nThis script will read the `ips_lists.txt` file and update to the versions\nspecified in there. You can choose specific commits, tags or branches.\n\n\n## Documentation\n\nThere is a preliminary datasheet available that includes a block diagram and a memory map of PULPino.\nSee docs/datasheet/ in this repository.\n\nIt is written in LaTeX and there is no pdf included in the repository. Simply type\n\n    make all\n\ninside the folder to generate the pdf. Note that you need a working version of latex for this step.\n\n\n## Running simulations\n\nThe software is built using CMake.\nCreate a build folder somewhere, e.g. in the sw folder\n\n    mkdir build\n\nCopy the cmake-configure.{*}.gcc.sh bash script to the build folder.\nThis script can be found in the sw subfolder of the git repository.\n\nModify the cmake-configure script to your needs and execute it inside the build folder.\nThis will setup everything to perform simulations using ModelSim.\n\nFour cmake-configure bash scripts have been already configured:\n\n1) cmake_configure.riscv.gcc.sh\n\nIt automatically selects the RISCY cores and compiles SW with all the PULP-extensions \nand the RV32IM support.\nThe GCC ETH compiler is needed and the GCC march flag set to \"IMXpulpv2\".\n\n2) cmake_configure.riscvfloat.gcc.sh\n\nIt automatically selects the RISCY cores and compiles SW with all the PULP-extensions \nand the RV32IMF support.\nThe GCC ETH compiler is needed and he GCC march flag set to \"IMFXpulpv2\".\n\n3) cmake_configure.zeroriscy.gcc.sh\n\nIt automatically selects the zero-riscy cores and compiles SW with the RV32IM support\n(march flag set to RV32IM).\n\n4) cmake_configure.microriscy.gcc.sh\n\nIt automatically selects the zero-riscy cores and compiles SW with the RV32E support.\nThe slim GCC ETH compiler is needed and he GCC march flag set to \"RV32I\" and the \"-m16r\"\nis passed to the compiler to use only the RV32E ISA support.\n\n\nActivate the RVC flag in the cmake file if compressed instructions are desired.\n\n\nInside the build folder, execute\n\n    make vcompile\n\nto compile the RTL libraries using ModelSim.\n\nTo run a simulation in the modelsim GUI use\n\n    make helloworld.vsim\n\n\nTo run simulations in the modelsim console use\n\n    make helloworld.vsimc\n\nThis will output a summary at the end of the simulation.\nThis is intended for batch processing of a large number of tests.\n\nReplace helloworld with the test/application you want to run.\n\n\n### Using ninja instead of make\n\nYou can use ninja instead make to build software for PULPino, just replace all\noccurrences of make with ninja.\nThe same targets are supported on both make and ninja.\n\n\n\n## Interactive debug\n\nTo interactively debug software via gdb, you need the jtag bridge as well as a\nworking version of gdb for the ISA you want to debug. The debug bridge depends\non the `jtag_dpi` package that emulates a JTAG port and provides a TCP socket\nto which the jtag bridge can connect to.\n\n\n## Utilities\n\nWe additionally provide some utilitiy targets that are supposed to make\ndevelopment for PULPino easier.\n\nFor disassembling a program call\n\n    make helloworld.read\n\nTo regenerate the bootcode and copy it to the `rtl` folder use\n\n    make boot_code.install\n\n## FPGA\n\nPULPino can be synthesized and run on a ZedBoard.\nTake a look at the `fpga` subfolder for more information.\n\n## Creating a tarball of the PULPino sources\n\nIf for some reason you don't want to use the git sub-repository approach, you\ncan create a tarball of the whole design by executing `./create-tarball.py`.\nThis will download the latest PULPino sources, including all IPS, remove the\ngit internal folders and create a tar gz.\n\n\n## Arduino compatible libraries\n\nMost of official Arduino libraries are supported by PULPino software, they can\nbe compiled, simulated and uploded the same way as traditional software programs\nusing the available PULPino utilities. You only need to include main.cpp at the\nbeginning of the program:\n\n\t#include \"main.cpp\"\n\nTake a look at the `sw/libs/Arduino_libs` subfolder for more information about\nthe status of the currently supported libraries.\n","funding_links":[],"categories":["CPU RISC-V","Hardware"],"sub_categories":["网络服务_其他","Android Things"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpulp-platform%2Fpulpino","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpulp-platform%2Fpulpino","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpulp-platform%2Fpulpino/lists"}