diff --git a/src/periph/fpga.cpp b/src/periph/fpga.cpp
index 9439435fe23a4c4352fde87d899ba8aedc6ad233..ddfecd2a02d54f4b6a54a32ba65cc0a98769b304 100644
--- a/src/periph/fpga.cpp
+++ b/src/periph/fpga.cpp
@@ -2380,16 +2380,20 @@ bool Periph_fpga::read_subband_weights(TermOutput& termout, int format) {
 
 bool Periph_fpga::read_signal_input_data_buffer(TermOutput& termout, int format) {
     bool retval = true;
-    uint32_t *_ptr = (uint32_t *)termout.val;
+    uint32_t data[C_V_si_db];
+    int16_t *_ptr = (int16_t *)termout.val;
 
     string regname;
-    uint32_t span;
 
     for (uint i=0; i<C_S_pn; i++) {
         regname = "mm/0/RAM_DIAG_DATA_BUFFER_BSN/" + to_string(i) + "/data";
-        span = mmap->getSpan((regname));
-        retval = Read(regname, _ptr);
-        _ptr += span;
+        retval &= Read(regname, data);
+        for (uint j=0; j<C_V_si_db; j++) {
+            if (retval) {
+                *_ptr = (int16_t)data[j];
+            }
+             _ptr++;
+        }
     }
     termout.nof_vals = C_S_pn * C_V_si_db;
     termout.datatype = format;