aboutsummaryrefslogtreecommitdiffstats
path: root/manual/PRESENTATION_ExAdv/select.v
blob: 1b0bb7eeb67e6f7336a0b641e929de813efb4981 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
module test(clk, s, a, y);
    input clk, s;
    input [15:0] a;
    output [15:0] y;
    reg [15:0] b, c;

    always @(posedge clk) begin
        b <= a;
        c <= b;
    end

    wire [15:0] state_a = (a ^ b) + c;
    wire [15:0] state_b = (a ^ b) - c;
    assign y = !s ? state_a : state_b;
endmodule
ss="cp">#define FASTLED_RAND16_2053 ((uint16_t)(2053)) #define FASTLED_RAND16_13849 ((uint16_t)(13849)) /// random number seed extern uint16_t rand16seed;// = RAND16_SEED; /// Generate an 8-bit random number LIB8STATIC uint8_t random8(void) { rand16seed = (rand16seed * FASTLED_RAND16_2053) + FASTLED_RAND16_13849; // return the sum of the high and low bytes, for better // mixing and non-sequential correlation return (uint8_t)(((uint8_t)(rand16seed & 0xFF)) + ((uint8_t)(rand16seed >> 8))); } /// Generate a 16 bit random number LIB8STATIC uint16_t random16(void) { rand16seed = (rand16seed * FASTLED_RAND16_2053) + FASTLED_RAND16_13849; return rand16seed; } /// Generate an 8-bit random number between 0 and lim /// @param lim the upper bound for the result LIB8STATIC uint8_t random8_max(uint8_t lim) { uint8_t r = random8(); r = (r*lim) >> 8; return r; } /// Generate an 8-bit random number in the given range /// @param min the lower bound for the random number /// @param lim the upper bound for the random number LIB8STATIC uint8_t random8_min_max(uint8_t min, uint8_t lim) { uint8_t delta = lim - min; uint8_t r = random8_max(delta) + min; return r; } /// Generate an 16-bit random number between 0 and lim /// @param lim the upper bound for the result LIB8STATIC uint16_t random16_max(uint16_t lim) { uint16_t r = random16(); uint32_t p = (uint32_t)lim * (uint32_t)r; r = p >> 16; return r; } /// Generate an 16-bit random number in the given range /// @param min the lower bound for the random number /// @param lim the upper bound for the random number LIB8STATIC uint16_t random16_min_max( uint16_t min, uint16_t lim) { uint16_t delta = lim - min; uint16_t r = random16_max(delta) + min; return r; } /// Set the 16-bit seed used for the random number generator LIB8STATIC void random16_set_seed(uint16_t seed) { rand16seed = seed; } /// Get the current seed value for the random number generator LIB8STATIC uint16_t random16_get_seed(void) { return rand16seed; } /// Add entropy into the random number generator LIB8STATIC void random16_add_entropy(uint16_t entropy) { rand16seed += entropy; } ///@} #endif