From c86294b1f07624eee3c3749fb877aff96413f17b Mon Sep 17 00:00:00 2001 From: Jon Nordby Date: Wed, 14 May 2025 19:55:05 +0200 Subject: bindings: Actually build cic3_pdm code --- bindings/sim_cic3_pdm.cc | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 bindings/sim_cic3_pdm.cc (limited to 'bindings/sim_cic3_pdm.cc') diff --git a/bindings/sim_cic3_pdm.cc b/bindings/sim_cic3_pdm.cc new file mode 100644 index 0000000..e21010b --- /dev/null +++ b/bindings/sim_cic3_pdm.cc @@ -0,0 +1,40 @@ + +#include +#include + +#include "Vcic3_pdm.h" +#include "verilated.h" + + +int +pdm2pcm_cic3(const uint8_t *pdm, int pdm_length, int16_t *pcm, int pcm_length) +{ + + // FIXME: verify that output buffer is large enough + + VerilatedContext *cp = new VerilatedContext; + + Vcic3_pdm *top = new Vcic3_pdm{cp}; + + // Start clock off + top->clk = 0; + + // Go through all the input data + int pcm_sample = 0; + + for (int i = 0; i < pdm_length; i++) { + + top->pdm_in = bool(pdm[i]); + top->clk = 1; + top->eval(); + + if (top->pcm_valid) { + pcm[pcm_sample++] = top->pcm_out; + } + + top->clk = 0; + top->eval(); + } + + return pcm_sample; +} -- cgit v1.2.3