rust_hdl_widgets/
auto_reset.rs1use crate::dff::DFF;
2use rust_hdl_core::prelude::*;
3
4#[derive(Clone, Debug, LogicBlock, Default)]
5pub struct AutoReset {
6 pub reset: Signal<Out, Bit>,
7 pub clock: Signal<In, Clock>,
8 dff: DFF<Bits<8>>,
9}
10
11impl Logic for AutoReset {
12 #[hdl_gen]
13 fn update(&mut self) {
14 self.dff.clock.next = self.clock.val();
15 self.dff.d.next = self.dff.q.val();
16 self.reset.next = false.into();
17 if !self.dff.q.val().all() {
18 self.dff.d.next = self.dff.q.val() + 1;
19 self.reset.next = true.into();
20 }
21 }
22}
23
24#[test]
25fn test_synch_reset_synchronizes() {
26 let mut uut = AutoReset::default();
27 uut.connect_all();
28 yosys_validate("sync_reset", &generate_verilog(&uut)).unwrap();
29}