Sunday, October 26, 2014

Project Update

This weekend I started working on the re-sampling block. The "zeroth draft" of the RTL for the zero stuffing block is complete. I will also share the pre-first draft of the spec for the block to show the design intent. This weekend I didn't get a chance to start the RTL for the  filtering block but I have been putting in a lot of mental effort, visualizing how the logic should work (inferred hw multipliers etc). I'm leaving the filtering block for next weekend.


interpolation_filter.png
The Block Diagram for the re-sampling block

Zero Stuffing

Module
Zero Stuffing
Inputs
  • sample_valid_i : active high signal that the slave device uses to determine when the value on the sample bus is valid
  • [11:0] sample_i : the sample data to be read by the slave device
  • sample_rdy_filter_to_zs : active high signal that the master device uses to determine if the slave is ready to receive a sample
  • sample_ack_filter_to_zs : active high signal that the master device uses to determine if the slave successfully received the sample
  • rst : synchronous, active high reset signal
  • en : synchronous, active high enable signal
  • clk : system clock
Outputs
  • sample_rdy_i : active high signal that the slave device uses to indicate it is ready to receive a sample
  • sample_ack_i : active high signal that the slave device uses to indicate that the sample has been successfully received
  • sample_valid_zs_to_filter : active high signal that the master device uses to indicate that the signal on the sample bus is valid
  • [11:0] sample_zs_to_filter : the sample data written by the master devices
Functionality
To achieve an interpolation factor of 6 the first step is zero stuffing. 5 zero samples are appended for every original sample.
<write up>


Filtering

Module
Filtering
Inputs
  • sample_valid_zs_to_filter : active high signal that the slave device uses to determine when the value on the sample bus is valid
  • [11:0] sample_zs_to_filter : the sample data to be read by the slave device
  • sample_rdy_dec_to_filter : active high signal that the master device uses to determine if the slave is ready to receive a sample
  • sample_ack_dec_to_filter : active high signal that the master device uses to determine if the slave successfully received the sample
  • rst : synchronous, active high reset signal
  • en : synchronous, active high enable signal
  • clk : system clock
Outputs
  • sample_rdy_filter_to_zs : active high signal that the slave device uses to indicate it is ready to receive a sample
  • sample_ack_filter_to_zs : active high signal that the slave device uses to indicate that the sample has been successfully received
  • sample_valid_filter_to_dec : active high signal that the master device uses to indicate that the signal on the sample bus is valid
  • [35:0] sample_filter_to_dec : the sample data written by the master devices
Functionality
The filtering block has two roles:
  1. Interpolation filtering
  2. Lowpass filtering to prevent aliasing before decimation
<write up>

Decimation

Module
Decimation
Inputs
  • sample_valid_filter_to_dec : active high signal that the slave device uses to determine when the value on the sample bus is valid
  • [35:0] sample_filter_to_dec : the sample data to be read by the slave device
  • sample_rdy_rs_to_dec : active high signal that the master device uses to determine if the slave is ready to receive a sample
  • sample_ack_rs_to_dec : active high signal that the master device uses to determine if the slave successfully received the sample
  • rst : synchronous, active high reset signal
  • en : synchronous, active high enable signal
  • clk : system clock
Outputs
  • sample_rdy_dec_to_filter : active high signal that the slave device uses to indicate it is ready to receive a sample
  • sample_ack_dec_to_filter : active high signal that the slave device uses to indicate that the sample has been successfully received
  • sample_valid_dec_to_rs : active high signal that the master device uses to indicate that the signal on the sample bus is valid
  • [35:0] sample_dec_to_rs : the sample data written by the master devices
Functionality
The decimation block reduces the sampling rate to 48Ksps. The decimation factor is 25. Only 1 in 25 samples are kept, the other 24 samples are dropped.
<write up>


Rounding / Scaling

Module
Rounding / Scaling
Inputs
  • sample_valid_dec_to_rs : active high signal that the slave device uses to determine when the value on the sample bus is valid
  • [35:0] sample_dec_to_rs : the sample data to be read by the slave device
  • sample_rdy_o : active high signal that the master device uses to determine if the slave is ready to receive a sample
  • sample_ack_o : active high signal that the master device uses to determine if the slave successfully received the sample
  • rst : synchronous, active high reset signal
  • en : synchronous, active high enable signal
  • clk : system clock
Outputs
  • sample_rdy_rs_to_dec : active high signal that the slave device uses to indicate it is ready to receive a sample
  • sample_ack_rs_to_dec : active high signal that the slave device uses to indicate that the sample has been successfully received
  • sample_valid_o : active high signal that the master device uses to indicate that the signal on the sample bus is valid
  • [17:0] sample_o : the sample data written by the master devices
Functionality
The purpose of the round / scaling block is to reduce the bit width of the samples from 36 bits down to 18 bits. The goal is to minimize the loss of information (non audible modifications are desired)
<write up>

No comments:

Post a Comment