4.Test
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user