rust_hdl_widgets/
dff_with_init.rs1use crate::{dff::DFF, dff_setup};
2use rust_hdl_core::prelude::*;
3use std::ops::BitXor;
4
5#[derive(Clone, Debug, LogicBlock)]
6pub struct DFFWithInit<T: Synth + BitXor<Output = T>> {
7 pub d: Signal<In, T>,
8 pub q: Signal<Out, T>,
9 pub clock: Signal<In, Clock>,
10 pub init: Constant<T>,
11 pub dff: DFF<T>,
12}
13
14impl<T: Synth + BitXor<Output = T>> DFFWithInit<T> {
15 pub fn new(init: T) -> Self {
16 Self {
17 d: Default::default(),
18 q: Default::default(),
19 clock: Default::default(),
20 init: Constant::new(init),
21 dff: Default::default(),
22 }
23 }
24}
25
26impl<T: Synth + BitXor<Output = T>> Logic for DFFWithInit<T> {
27 #[hdl_gen]
28 fn update(&mut self) {
29 self.dff.clock.next = self.clock.val();
30 self.q.next = self.dff.q.val() ^ self.init.val();
31 self.dff.d.next = self.d.val() ^ self.init.val();
32 }
33}