IP component

af-pdm-rx

af-pdm-rx generates a microphone clock, samples one or more raw 1-bit PDM input lanes, packs accepted bits into fixed-width words and exposes a valid/ready stream for downstream FPGA logic.

Stage
Prototype
Access
Availability unconfirmed

Raw PDM only: no PDM-to-PCM conversion, no CIC/FIR and no audio processing.

Simulation results are reported; functional board measurements are unconfirmed.

Signal path

  1. Raw PDMMicrophone clock and 1-bit inputs
  2. Capture & packClock, sample and buffer
  3. Raw wordsvalid/ready output

Specifications

ParameterDefaultMeaning
LANES1Number of PDM data pins.
SLOTS_PER_LANE1One microphone per line or phase-separated slots.
WORD_BITS64Packed raw PDM word width.
FIFO_ADDR_BITS4FIFO depth is 2 ** FIFO_ADDR_BITS.
HALF_PERIOD_CYCLES8clk_i cycles per half PDM clock period.
SAMPLE_DELAY_CYCLES4Delay from PDM clock transition to sample enable.
LANE_ID_BITS1Width of out_lane_o; set manually for LANES > 2.
SEQ_BITS32Width of output sequence counter.
PortDirectionMeaning
clk_iinputOnly internal logic clock.
rst_niinputAsynchronous active-low reset.
enable_iinputEnables PDM clocking and capture.
clear_iinputSynchronous one-cycle clear for counters, FIFO, packer and sequence state.
pdm_clk_ooutputExternal PDM microphone clock.
pdm_dat_iinputRaw PDM data lines.
out_valid_ooutputPacked word is available.
out_ready_iinputDownstream accepts the current word.
out_data_ooutputPacked raw PDM bits.
out_lane_ooutputLane ID for the word.
out_slot_ooutputSlot ID for the word.
out_seq_ooutputSequence value for the current output word.
overflow_ooutputSticky overflow/drop indicator until reset or clear_i.
stat_bits_ooutputCount of raw bits accepted by the packer.
stat_words_ooutputCount of output handshakes.
stat_drops_ooutputCount of completed words dropped because FIFO was full.
InterfaceTypeDirectionSignalsDescription
valid_ready_streamvalid/readyoutputout_valid_o, out_ready_i, out_data_o, out_lane_o, out_slot_o, out_seq_oPacked raw PDM words are emitted over a stable valid/ready stream.
pdm_microphonePDMexternalpdm_clk_o, pdm_dat_iExternal microphone clock output and one or more raw PDM data inputs.
control_statussimple wiresmixedenable_i, clear_i, overflow_o, stat_bits_o, stat_words_o, stat_drops_oControl and status wires for enable, synchronous clear, overflow and counters.
ClockRoleNotes
clk_isingle internal clock domainAll internal state is clocked by clk_i.
pdm_clk_oexternal microphone clock outputpdm_clk_o is generated for the microphone and is not used as an internal logic clock.
ResetPolarityTypeNotes
rst_niactive-lowasynchronousPrimary reset for all state.
clear_iactive-highsynchronous one-cycle clearClears counters, FIFO, packer and sequence state.

Verification

Based on the site record dated 2026-05-01. Component revision, test configuration and primary reports are unconfirmed; these results have not been independently repeated.

CheckResult
simulationReported simulation result
synthesisSynthesis: unknown
implementationReported implementation result
programmingReported programming result
hardware functionalHardware functional: unknown
formalFormal: unknown
application acceptanceApplication acceptance: unknown

Primary review: Report and component revision unconfirmed.

The source summary reports 13 Icarus test targets and selected Tang Primer 20K Dock builds and JTAG programming. It is not a primary test report. Read the source summary

Resource usage, fmax and power measurements are not available.

Integration

Keep board-specific clocks and constraints outside the reusable logic.

af_pdm_rx #(
  .LANES(1),
  .SLOTS_PER_LANE(1),
  .WORD_BITS(64),
  .FIFO_ADDR_BITS(4)
) u_af_pdm_rx (
  .clk_i(clk_i),
  .rst_ni(rst_ni),
  .enable_i(enable_i),
  .clear_i(clear_i),
  .pdm_clk_o(pdm_clk_o),
  .pdm_dat_i(pdm_dat_i),
  .out_valid_o(out_valid_o),
  .out_ready_i(out_ready_i),
  .out_data_o(out_data_o)
);

Connections

Connect clk_i, rst_ni, enable_i, clear_i, PDM pins and downstream valid/ready signals. Keep board-local PLLs and constraints outside the reusable RTL core.

Clocking

pdm_clk_o frequency = clk_i frequency / (2 * HALF_PERIOD_CYCLES). Use a board-level PLL or external clock selection when an exact PDM rate is required.

BoardFamilyStatusNotes
Sipeed Tang Primer 20K DockGowin GW2Areported buildReported wrapper, build and JTAG programming. Functional PDM measurements unconfirmed.
Sipeed Tang Nano 20KGowin GW2ARwrapper onlyReported wrapper only. Constraints and functional measurements unconfirmed.
Sipeed Tang Mega 138K DockGowin GW5Awrapper onlyReported wrapper only. Constraints and functional measurements unconfirmed.
ToolchainStatusNotes
Icarus Verilogreported simulationIcarus Verilog / vvp simulation path; source summary only.
OSS CAD Suite / Gowin-compatible flowreported buildSelected Tang Primer 20K Dock builds; component revision unconfirmed.

Limitations

  • The earlier board-build-ready label does not establish functional hardware qualification.
  • Measured PDM clock, GPIO loopback and microphone results are unconfirmed.
  • A board wrapper does not establish functional hardware support.

Licensing

AccelFury Source Available License v1.0. Closed-source or proprietary use requires a separate commercial license.

Review licensing terms ยท Discuss integration support