| // Copyright lowRISC contributors. |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| // SPDX-License-Identifier: Apache-2.0 |
| |
| #include <stdbool.h> |
| #include <stdint.h> |
| |
| #include "sw/device/lib/testing/check.h" |
| #include "sw/device/lib/testing/rand_testutils.h" |
| |
| /** |
| * The polynomial co-efficients used in the 32-bit LFSR implementation. |
| * |
| * This implementation matches the RTL design at `hw/ip/prim/rtl/prim_lfsr.sv`. |
| */ |
| const uint32_t kLfsrCoefficients = 0x80000057; |
| |
| uint32_t rand_testutils_gen32(void) { |
| static uint32_t lfsr = 1; |
| bool lsb = lfsr & 0x1u; |
| lfsr >>= 1; |
| if (lsb) { |
| lfsr ^= kLfsrCoefficients; |
| } |
| return lfsr; |
| } |
| |
| uint32_t rand_testutils_gen32_range(uint32_t min, uint32_t max) { |
| CHECK(max >= min); |
| uint32_t range = max - min; |
| if (range == 0) { |
| return min; |
| } |
| return min + (rand_testutils_gen32() % (range + 1)); |
| } |