{"id":13641421,"url":"https://github.com/pulp-platform/culsans","last_synced_at":"2026-02-07T23:36:20.218Z","repository":{"id":62629629,"uuid":"532762223","full_name":"pulp-platform/culsans","owner":"pulp-platform","description":"Tightly-coupled cache coherence unit for CVA6 using the ACE protocol","archived":false,"fork":false,"pushed_at":"2024-05-04T08:39:59.000Z","size":1446,"stargazers_count":30,"open_issues_count":2,"forks_count":12,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-20T07:41:14.923Z","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":"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":"2022-09-05T05:54:46.000Z","updated_at":"2025-02-11T19:30:59.000Z","dependencies_parsed_at":"2023-10-02T06:38:04.360Z","dependency_job_id":"e20b1e2b-fe97-47b8-95a1-d7fe392f5416","html_url":"https://github.com/pulp-platform/culsans","commit_stats":null,"previous_names":["pulp-platform/culsans","planvtech/culsans"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/pulp-platform/culsans","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fculsans","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fculsans/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fculsans/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fculsans/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pulp-platform","download_url":"https://codeload.github.com/pulp-platform/culsans/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulp-platform%2Fculsans/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29212755,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T23:36:15.537Z","status":"ssl_error","status_checked_at":"2026-02-07T23:36:12.879Z","response_time":63,"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":"2024-08-02T01:01:20.602Z","updated_at":"2026-02-07T23:36:20.204Z","avatar_url":"https://github.com/pulp-platform.png","language":"C","funding_links":[],"categories":["C"],"sub_categories":[],"readme":"# Culsans - tightly-coupled cache coherence unit using the ACE protocol\n\n\n## Introduction\n\nAim of this project is the development of a tightly-coupled cache coherence unit for a multicore processor based on\n[CVA6](https://github.com/openhwgroup/cva6). Like the ancient god [^1], its responsibilities are to maintain order\n(and data consistency) among the memory accesses performed by the 2~4 CPUs which are part of the system.\n\n[^1]: [Culsans](https://en.wikipedia.org/wiki/Culsans) – the Etruscan version of [Janus](https://en.wikipedia.org/wiki/Janus),\nthe two-faced and also four-faced god, god of the first and last of the year, of the beginning and the end, of the\ncardinal points and thus of order in general.\n\n\n## Getting started\n\n```\ngit clone https://github.com/planvtech/culsans.git --recursive\n```\n\nUseful documentation:\n\n- [CVA6's coherent WB cache](https://github.com/planvtech/cva6/blob/culsans_pulp/docs/03_cva6_design/wb_cache_with_coherence_support.md)\n- [ACE Interconnector](https://github.com/planvtech/ace/blob/pulp/doc/ace_ccu_top.md)\n- Testing (see below)\n\n### Synthesis on FPGA (Genesys2)\n\n```\nmake fpga\n```\n\nThe top level file for FPGA synthesis is [`rtl/src/culsans_xilinx.sv`](rtl/src/culsans_xilinx.sv)\n\n\n### SD image generation\n\nMake sure all dependencies specified in [`cva6-sdk`](https://github.com/planvtech/cva6-sdk/blob/culsans_pulp/README.md) are fulfilled.\n\n```\nmake sdk\n```\n\nThen follow the instruction in [`cva6-sdk`](https://github.com/planvtech/cva6-sdk/blob/culsans_pulp/README.md) to copy the generated image to the SD.\n\n\n### RTL tests\n\nSanity check\n\n```\nmake sanity-tests\n```\n\nRegression tests\n\n```\nmake test\n```\n\n\n## Verification\n\n\n### Culsans Integration Test Suite (CITS)\n\nThe CITS is a test platform that tests the integration of components of Culsans.\n\nThere are two layers to the tests.\n\nThere is c code self testing. This is achieved by c code within the test testing what it expects it has effected in the\nmemory. If it fails, it exits early with a code indicative of the core and cacheline that incurred the problem.\n\nThe second (optional) layer is that where an external parser inspects the logs generated by the tests and compares them to an\nexpected sequence. This layer is not further described here.\n\n\n#### Running tests\n\nTests are run in the [`tests/integration`](tests/integration) directory. All commands below are executed in this directory.\n\nTo run a test in the CITS, type\n\n```\nmake -C testlist/\u003ctest_name\u003e all\n```\n\nTo run a test in the CITS in a GUI, type\n\n```\nmake GUI=1 -C testlist/\u003ctest_name\u003e all\n```\n\n\n#### Adding tests\n\nA CITS test consists of a batch of files within the folder `testlist/\u003ctest_name\u003e`. The folder should contain the following files:\n\n| File            | Description |\n|-----------------|-------------|\n| \u003ctest_name\u003e.c/h | This file is the the actual test. See similar files in the CITS for an example of how to write one. |\n| main.c          | This file co-ordinates the core execution and calls the `test_name()` function. See the `main.c` files in the CITS for an example on how to write one. |\n| Makefile        | Symlink to `../../test_automation/Makefile` |\n| sim.tcl         | Symlink to `../../test_automation/sim.tcl` |\n\nThe test function defined in \u003ctest_name\u003e.c should be self-checking and call `exit(arg)` with arg \u003e 0 if the test fails, otherwise `return 0`.\n\n## License\n\nThe Culsans repository is released under Solderpad v0.51 (SHL-0.51) see [LICENSE](LICENSE)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpulp-platform%2Fculsans","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpulp-platform%2Fculsans","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpulp-platform%2Fculsans/lists"}