rust-hdl 0.46.0

Write firmware for FPGAs in Rust
Documentation
The [Bits](core::bits::Bits) type supports a subset of operations that can be synthesized in
hardware.  You can perform
 
* Addition between `Bits` of the same size using the `+` operator
* Subtraction between `Bits` of the same size using the `-` operator
* Bitwise logical `AND` between `Bits` of the same size using the `&` operator
* Bitwise logical `OR` between `Bits` of the same size using the `|` operator
* Bitwise logical `XOR` (Exclusive Or) between `Bits` of the same size using the `^` operator
* Bitwise comparisons for equality between `Bits` of the same size using `==` and `!=` operators
* Unsigned comparisons (e.g., `>,>=,<,<=`) between `Bits` of the same size - these are
always treated as unsigned values for comparison purposes.
* Shift left using the `<<` operator
* Shift right (no sign extension!) using the '>>' operator
* Bitwise logical `NOT` using the `!` prefix operator
 
These should feel natural when using RustHDL, as expressions follow Rust's rules (and not Verilog's).
For example:
```rust
# use rust_hdl::prelude::*;
let x: Bits<32> = 0xDEAD_0000_u32.to_bits();
let y: Bits<32> = 0x0000_BEEF_u32.to_bits();
let z = x + y;
assert_eq!(z, 0xDEAD_BEEF_u32.to_bits());
```

You can, of course, construct expressions of arbitrary complexity using parenthesis, etc.
The only real surprise may be at synthesis time, when you try to fit the expression onto hardware.