{"id":19773192,"url":"https://github.com/mbarbin/bopkit","last_synced_at":"2025-04-30T18:31:45.494Z","repository":{"id":154982337,"uuid":"616367629","full_name":"mbarbin/bopkit","owner":"mbarbin","description":"An educational project for digital circuits programming","archived":false,"fork":false,"pushed_at":"2024-11-10T19:45:01.000Z","size":6457,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-10T20:32:50.591Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://mbarbin.github.io/bopkit/","language":"OCaml","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mbarbin.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","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":"2023-03-20T08:52:01.000Z","updated_at":"2024-11-10T19:45:02.000Z","dependencies_parsed_at":"2024-01-17T19:13:55.390Z","dependency_job_id":"a91597a8-263b-4918-adae-9e2073d5c50b","html_url":"https://github.com/mbarbin/bopkit","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbarbin%2Fbopkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbarbin%2Fbopkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbarbin%2Fbopkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbarbin%2Fbopkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mbarbin","download_url":"https://codeload.github.com/mbarbin/bopkit/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224219621,"owners_count":17275477,"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":[],"created_at":"2024-11-12T05:08:55.035Z","updated_at":"2024-11-12T05:08:55.632Z","avatar_url":"https://github.com/mbarbin.png","language":"OCaml","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cp align=\"center\"\u003eBopkit\u003c/p\u003e\n  \u003cimg\n    src=\"https://github.com/mbarbin/bopkit/blob/assets/image/bopkit-logo.png?raw=true\"\n    width=512\n    alt=\"Logo\"\n  /\u003e\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/mbarbin/bopkit/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/mbarbin/bopkit/workflows/ci/badge.svg\" alt=\"CI Status\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/mbarbin/bopkit/actions/workflows/deploy-doc.yml\"\u003e\u003cimg src=\"https://github.com/mbarbin/bopkit/workflows/deploy-doc/badge.svg\" alt=\"Deploy Doc Status\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nWelcome to Bopkit, an educational project that provides a description language\nfor programming synchronous digital circuits.\n\nWith Bopkit, you can express synchronous digital circuits, simulate them using\nthe Bopkit simulator, and convert your designs to standalone C executables or\nhierarchical Verilog.\n\nBopkit also provides an interface for integrating external blocks written in\nother languages. For example, you can use OCaml blocks for unit-testing, or\nconnect your circuits to user-friendly graphical devices such as the [Bopboard](stdlib/bopboard/) or\na [7-segment display](project/digital-watch/).\n\n# ![ladybug ico](../assets/image/ladybug_32.ico?raw=true) Install\n\nBopkit can be installed via the [opam](https://opam.ocaml.org) package manager.\n\nReleases for this project are published to a custom opam-repo. To add it to your\ncurrent opam switch, run:\n\n```sh\nopam repo add mbarbin https://github.com/mbarbin/opam-repository.git\n```\n\nThen you can install `bopkit` using a normal opam workflow.\n\n```sh\nopam install bopkit\n```\n\n# ![ladybug ico](../assets/image/ladybug_32.ico?raw=true) Documentation\n\nBopkit's documentation is published [here](https://mbarbin.github.io/bopkit). It\nis built with [docusaurus](https://docusaurus.io/), an application developed by\nMeta, Inc to create open source documentation websites.\n\n# ![ladybug ico](../assets/image/ladybug_32.ico?raw=true) Tutorials\n\nCheck out our [tutorials](tutorial/) for an introduction to different parts of\nBopkit, and explore our more substantive [projects](project/), including a\ndigital watch, user-friendly graphical devices, and projects involving\nmicroprocessors, assemblers and compilers. There's plenty of fun stuff there!\n\n# ![ladybug ico](../assets/image/ladybug_32.ico?raw=true) Development\n\n## Build\n\nThe repo depends on unreleased packages that are found in an external\nopam-repository which must be added to the opam switch that you use to build the\nproject. For example, if you use a local opam switch this would look like this:\n\n```sh\ngit clone https://github.com/mbarbin/bopkit.git\ncd bopkit\nopam switch create . 5.2.0 --no-install\neval $(opam env)\nopam repo add mbarbin https://github.com/mbarbin/opam-repository.git\nopam install . --deps-only\n```\n\nOnce this is setup, you can build with dune:\n\n```sh\ndune build\n```\n\n## Preview the doc locally\n\nIn a local clone setup for development you can preview the doc locally with:\n\n```sh\nnpm start\n```\n\nThis will serve the doc on `http://localhost:3000/bopkit/` and update\ndynamically as you edit the sources.\n\n# ![ladybug ico](../assets/image/ladybug_32.ico?raw=true) Origin\n\nThe project originated in 2007 as a class assignment with Professor Jean\nVuillemin[^1]:\n\n\u003e Write a simulator for a hardware description language of your choice; use it\n\u003e to execute on a microprocessor of your design a binary code that will drive\n\u003e the display of a digital calendar.\n\nOcan Sankur and Mathieu Barbin teamed up to complete the project, implementing a\nHDL based on a subset of the language 2Z[^2] used in the course notes, and\ndesigning a microprocessor called visa.\n\nAfter the assignment was completed, Bopkit grew into a fun tool box for\nexperimenting and playing around with various aspects of language implementation\nin OCaml and digital circuit programming.\n\nIn 2023, Bopkit was rediscovered in the archives and was given a new lease of\nlife. The project was updated to work with modern tools and libraries, and\nhosted on GitHub. It was a delightful journey down memory lane!\n\n# ![ladybug ico](../assets/image/ladybug_32.ico?raw=true) Acknowledgments\n\nWe would like to express our gratitude to the following individuals:\n\n* **Jean Vuillemin** for the class and assignment that sparked the beginning of\n  this project.\n* **Ocan Sankur** for co-authoring the initial assignment and for implementing\n  the microprocessor visa with an early version of bopkit that had some rough\n  edges.\n* **Mehdi Bouaziz** for co-authoring the subleq project, which we implemented as\n  a project for **David Naccache**'s class.\n* **Marc Pouzet**[^3] for suggesting the addition of Mode-automata constructs to\n  the language. We implemented this as a project for M. Pouzet's class with\n  **Xun Gong**.\n* **Patrick Cousot**[^4] for teaching the compilation class that served as the\n  basis for the wml project.\n* **Samuel Kvaalen** for the bopkit logo and developing the adorable bopboard.\n\nIn addition, we'd like to thank:\n\n* The **Menhir** developers, for a smooth experience migrating our older\n  ocamlyacc parsers into Menhir.\n* The **Tsdl** programmers, for a smooth experience migrating the bopboard from\n  C/SDL-1 to OCaml.\n* **OpenAI**, for providing **ChatGPT** and the **DALL-E** tool. We used ChatGPT\n  to improve some of the text in this project, and used DALL-E to generate some\n  images in this project. OpenAI is a research organization focused on\n  artificial intelligence. Learn more about ChatGPT and DALL-E at openai.com/.\n\n[^1]:Jean Vuillemin, https://www.di.ens.fr/~jv/\n\n[^2]: F. Bourdoncle, J. Vuillemin and G. Berry, The 2Z reference manual, PRL\nreport ??, Digital Equipment Corp., Paris Research Laboratory, 85, Av. Victor\nHugo. 92563 Rueil-Malmaison Cedex, France, 1994.\n\n[^3]:Marc Pouzet, https://www.di.ens.fr/~pouzet/\n\n[^4]:Patrick Cousot, https://cs.nyu.edu/~pcousot/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmbarbin%2Fbopkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmbarbin%2Fbopkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmbarbin%2Fbopkit/lists"}