bittide/bittide-hardware
contains a (very much work-in-progress) hardware
implementation of a Bittide system (also see About Bittide). We
currently target Vivado FPGAs paired with SkyWorks clock adjustment boards.
This project uses a bunch of different languages and tool(chain)s. Nix is used
to manage this. To get a development shell install nix.
Optionally, you can install cachix
to use caches built by our CI infrastructure:
nix profile install nixpkgs#cachix
cachix use bittide-hardware
Run the following command in the root of this repository to get a development shell:
nix develop
The started shell contains everything needed to develop Bittide components.
TODO: Add overview of components
We follow a standard GitHub development flow. Our development branch is called main
. Free free to open a PR. If you're not sure what to do, open a discussion thread.
- The full (expensive) test suite only runs nightly on
main
. If you want to run the full test suite on a PR, add[force_expensive_checks]
to your commit message. - While debugging, we often only want one bittide instance to be tested with our hardware-in-the-loop infrastructure. With the increasing number of bittide instances with are synthesized and tested, these CI runs take a long time. You can add a file
.github/synthesis/debug.json
, with only the instances you want CI to synthesize/test. The CI run will always fail on the 'all' job when this file exists to prevent a premature merge. - You can run
format
in the Nix shell to format all Cabal, Haskell, and Rust files.
Bittide is a novel distributed system architecture based on the idea that synchronous, ahead-of-time scheduling using a logical global clock provides a set of properties that simplify the design and utilization of large systems.
With bittide we aim to build a system with guaranteed performance and robustness and address today's distributed systems inefficiencies and unpredictable long tail latencies. This ranges from simple things like video conferencing without glitches to virtual reality sports competitions with precisely equivalent system response times for all competitors. The properties underlying bittide support the orchestration and composition of microservices into a system without queueing delays.
Bittide is part of Google Research, and is not an official Google product.
This code is shared under by Google LLC under the Apache 2.0 license. See the LICENSE file for terms.
This project uses the REUSE tool to check for license compliance.