This commit is contained in:
beckal87649
2026-01-13 10:53:22 +01:00
parent c90753aa23
commit 4d0bb79521
4 changed files with 528 additions and 135 deletions
+30 -3
View File
@@ -3,10 +3,37 @@
#include "system/data_channel.h"
#include "system/float_word.h"
int task_rand_run( void * task ) {
int task_rand_run(void *task)
{
rand_config *config = (rand_config *)task;
// TODO
uint32_t data_channel_base = config->base.sink;
data_channel_clear(data_channel_base);
float_word seed_fw = { .value = config->seed };
uint32_t lfsr = seed_fw.word;
for (uint32_t i = 0; i < DATA_CHANNEL_DEPTH; ++i) {
uint32_t sign = (lfsr >> 31) & 0x1u;
uint32_t mant = lfsr & 0x007FFFFFu; // 23 Bit Mantisse
uint32_t exp_rand = (lfsr >> 23) & 0xFFu; // 8 Bit Exponent
uint32_t exp_new;
if (exp_rand & 0x80u) {
exp_new = 0x80u | (exp_rand & 0x01u);
} else {
exp_new = 0x7Cu | (exp_rand & 0x03u);
}
float_word out;
out.word = (sign << 31) | (exp_new << 23) | mant;
data_channel_write(data_channel_base, out.word);
uint32_t fb = ((lfsr >> 31) ^ (lfsr >> 21) ^ (lfsr >> 1) ^ (lfsr >> 0)) & 0x1u;
lfsr = (lfsr << 1) | fb;
}
return 0;
}