{"id":14966276,"url":"https://github.com/ymherklotz/vericert","last_synced_at":"2025-04-13T21:25:18.999Z","repository":{"id":39632482,"uuid":"212417092","full_name":"ymherklotz/vericert","owner":"ymherklotz","description":"A formally verified high-level synthesis tool based on CompCert and written in Coq.","archived":false,"fork":false,"pushed_at":"2024-06-20T19:40:51.000Z","size":23897,"stargazers_count":90,"open_issues_count":4,"forks_count":5,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-04-11T10:28:11.792Z","etag":null,"topics":["coq","high-level-synthesis"],"latest_commit_sha":null,"homepage":"https://vericert.ymhg.org","language":"Coq","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ymherklotz.png","metadata":{"files":{"readme":"README.org","changelog":"ChangeLog.org","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-10-02T18:48:56.000Z","updated_at":"2025-03-24T18:32:41.000Z","dependencies_parsed_at":"2024-09-14T02:01:53.746Z","dependency_job_id":"d384ac3c-fbce-4c22-a6d7-9f5ffa03fd48","html_url":"https://github.com/ymherklotz/vericert","commit_stats":{"total_commits":1122,"total_committers":5,"mean_commits":224.4,"dds":0.1114081996434938,"last_synced_commit":"894337686659182644df3dea5f38fc999d12a4e9"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ymherklotz%2Fvericert","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ymherklotz%2Fvericert/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ymherklotz%2Fvericert/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ymherklotz%2Fvericert/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ymherklotz","download_url":"https://codeload.github.com/ymherklotz/vericert/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248783936,"owners_count":21161021,"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","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":["coq","high-level-synthesis"],"created_at":"2024-09-24T13:36:08.658Z","updated_at":"2025-04-13T21:25:18.979Z","avatar_url":"https://github.com/ymherklotz.png","language":"Coq","funding_links":[],"categories":[],"sub_categories":[],"readme":"#+title:\n\n#+html: \u003ca href=\"https://vericert.ymhg.org\"\u003e\u003cimg src=\"https://vericert.ymhg.org/vericert-main.svg\" width=\"100%\" height=\"144\" /\u003e\u003c/a\u003e\n\nA formally verified high-level synthesis (HLS) tool written in Coq, building on top of [[https://github.com/AbsInt/CompCert][CompCert]].\nThis ensures the correctness of the C to Verilog translation according to our Verilog semantics and\nCompCert's C semantics, removing the need to check the resulting hardware for behavioural\ncorrectness.\n\n** Features\n   :PROPERTIES:\n   :CUSTOM_ID: features\n   :END:\n\nCurrently all proofs of the following features have been completed.\n\n- all int operations,\n- non-recursive function calls,\n- local arrays and pointers\n- control-flow structures such as if-statements, for-loops, etc...\n\n** Building\n   :PROPERTIES:\n   :CUSTOM_ID: building\n   :END:\nTo build Vericert, the provided [[/Makefile][Makefile]] can be used.  External dependencies are needed to build the\nproject, which can be pulled in automatically with [[https://nixos.org/nix/][nix]] using the provided [[/default.nix][default.nix]] and [[/shell.nix][shell.nix]]\nfiles.\n\nThe project is written in Coq, a theorem prover, which is extracted to OCaml so that it can then be\ncompiled and executed. The dependencies of this project are the following:\n\n- [[https://coq.inria.fr/][Coq]]: theorem prover that is used to also program the HLS tool.\n- [[https://ocaml.org/][OCaml]]: the OCaml compiler to compile the extracted files.\n- [[https://github.com/ocaml/dune][dune]]: build tool for ocaml projects to gather all the ocaml files and compile them in the right\n  order.\n- [[http://gallium.inria.fr/~fpottier/menhir/][menhir]]: parser generator for ocaml.\n- [[https://github.com/ocaml/ocamlfind][findlib]] to find installed OCaml libraries.\n- [[https://gcc.gnu.org/][GCC]]: compiler to help build CompCert.\n\nThese dependencies can be installed manually, or automatically through Nix.\n\n*** Downloading Vericert and CompCert\n    :PROPERTIES:\n    :CUSTOM_ID: downloading-compcert\n    :END:\nCompCert is added as a submodule in the =lib/CompCert= directory. It is needed to run the build\nprocess below, as it is the one dependency that is not downloaded by nix, and has to be downloaded\ntogether with the repository. To clone CompCert together with this project, and check it out at the\ncorrect revision, you can run:\n\n#+begin_src shell\ngit clone -b v1.2.2 --recursive https://github.com/ymherklotz/vericert\n#+end_src\n\nIf the repository is already cloned, you can run the following command to make sure that CompCert is\nalso downloaded and the correct branch is checked out:\n\n#+begin_src shell\ngit checkout v1.2.2\ngit submodule update --init\n#+end_src\n\n*** Setting up Nix\n    :PROPERTIES:\n    :CUSTOM_ID: setting-up-nix\n    :END:\nNix is a package manager that can create an isolated environment so that the builds are\nreproducible. Once nix is installed, it can be used in the following way.\n\nTo open a shell which includes all the necessary dependencies, one can use:\n\n#+begin_src shell\nnix-shell\n#+end_src\n\nwhich will open a shell that has all the dependencies loaded.\n\n*** Makefile build\n    :PROPERTIES:\n    :CUSTOM_ID: makefile-build\n    :END:\nIf the dependencies were installed manually, or if one is in the =nix-shell=, the project can be built\nby running:\n\n#+begin_src shell\nmake -j8\n#+end_src\n\nand installed locally, or under the =PREFIX= location using:\n\n#+begin_src shell\n  make install\n#+end_src\n\nWhich will install the binary in =./bin/vericert= by default. However, this can be changed by changing\nthe =PREFIX= environment variable, in which case the binary will be installed in =$PREFIX/bin/vericert=.\n\n** Running\n   :PROPERTIES:\n   :CUSTOM_ID: running\n   :END:\nTo test out =vericert= you can try the following examples which are in the test folder using the\nfollowing:\n\n#+begin_src shell\n./bin/vericert test/loop.c -o loop.v\n./bin/vericert test/conditional.c -o conditional.v\n./bin/vericert test/add.c -o add.v\n#+end_src\n\n** Citation\n\nIf you use Vericert in any way, please cite it using our [[https://yannherklotz.com/papers/fvhls_oopsla21.pdf][OOPSLA'21 paper]]:\n\n#+begin_src bibtex\n@inproceedings{herklotz21_fvhls,\n  author = {Herklotz, Yann and Pollard, James D. and Ramanathan, Nadesh and Wickerson, John},\n  title = {Formal Verification of High-Level Synthesis},\n  year = {2021},\n  number = {OOPSLA},\n  numpages = {30},\n  month = {11},\n  journal = {Proc. ACM Program. Lang.},\n  volume = {5},\n  publisher = {Association for Computing Machinery},\n  address = {New York, NY, USA},\n  doi = {10.1145/3485494}\n}\n#+end_src\n\n** License\n\nThis project is licensed under [[https://www.gnu.org/licenses/gpl-3.0.en.html][GPLv3]].  The license can be seen in [[file:LICENSE][LICENSE]].\n\nThe following external code and its license is present in this repository:\n\n- [[file:src/pipelining][src/pipelining]] :: MIT\n\n#+begin_src text\nCopyright (c) 2008,2009,2010 Jean-Baptiste Tristan and INRIA\n#+end_src\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fymherklotz%2Fvericert","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fymherklotz%2Fvericert","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fymherklotz%2Fvericert/lists"}