diff --git a/rust-hdl-widgets/src/mac_fir.rs b/rust-hdl-widgets/src/mac_fir.rs index 1017a000..8c6468b5 100644 --- a/rust-hdl-widgets/src/mac_fir.rs +++ b/rust-hdl-widgets/src/mac_fir.rs @@ -46,6 +46,8 @@ pub struct MultiplyAccumulateSymmetricFiniteImpulseResponseFilter>, // FIR state state: DFF, + // The output of the Multiply + multiply_output: Signal>, // The output of the MAC slice mac_output: Signal>, // The next write location for data @@ -96,9 +98,8 @@ impl Logic self.right_sample.next = 0.into(); } // Wire up the accumulator - self.mac_output.next = signed_bit_cast::<48, 32>( - (self.left_sample.val() + self.right_sample.val()) * (self.coeff_memory.data.val()), - ) + self.accum.q.val(); + self.multiply_output.next = (self.left_sample.val() + self.right_sample.val()) * self.coeff_memory.data.val(); + self.mac_output.next = signed_bit_cast::<48, 32>(self.multiply_output.val()) + self.accum.q.val(); if self.state.q.val() == MACFIRState::Idle { self.mac_output.next = 0.into(); } @@ -185,6 +186,7 @@ impl MultiplyAccumulateSymmetricFiniteImpulseResponseFil right_sample: Default::default(), accum: Default::default(), state: Default::default(), + multiply_output: Default::default(), mac_output: Default::default(), data_write: Default::default(), taps: Constant::new(taps.to_bits()),