1use crate::bus::{FIFOReadController, FIFOWriteController};
2use rust_hdl_core::prelude::*;
3use rust_hdl_widgets::prelude::*;
4
5#[derive(LogicBlock)]
6pub struct Expander<const DN: usize, const DW: usize> {
7 pub bus_read: FIFOReadController<Bits<DN>>,
8 pub bus_write: FIFOWriteController<Bits<DW>>,
9 pub clock: Signal<In, Clock>,
10 expander: FIFOExpanderN<DN, DW>,
11}
12
13impl<const DW: usize, const DN: usize> Logic for Expander<DN, DW> {
14 #[hdl_gen]
15 fn update(&mut self) {
16 clock!(self, clock, expander);
17 self.bus_read.read.next = self.expander.read.val();
19 self.expander.empty.next = self.bus_read.empty.val();
20 self.expander.data_in.next = self.bus_read.data.val();
21 self.expander.full.next = self.bus_write.full.val();
23 self.bus_write.data.next = self.expander.data_out.val();
24 self.bus_write.write.next = self.expander.write.val();
25 }
26}
27
28impl<const DW: usize, const DN: usize> Expander<DN, DW> {
29 pub fn new(order: WordOrder) -> Self {
30 Self {
31 bus_read: Default::default(),
32 bus_write: Default::default(),
33 clock: Default::default(),
34 expander: FIFOExpanderN::new(order),
35 }
36 }
37}