OpenCores
URL https://opencores.org/ocsvn/complex-gaussian-pseudo-random-number-generator/complex-gaussian-pseudo-random-number-generator/trunk

Subversion Repositories complex-gaussian-pseudo-random-number-generator

[/] [complex-gaussian-pseudo-random-number-generator/] [trunk/] [urng/] [MT_SHIFTING.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 cowboyor
--/////////////////////////MT_SHIFTING BLOCK///////////////////////////////
2
--Purpose: to produce functionality equivalent to following C code:
3
--       k = mt[state->mti];
4
--               k ^= (k >> 11);
5
--           k ^= (k << 7) & 0x9d2c5680UL;
6
--       k ^= (k << 15) & 0xefc60000UL;
7
--       k ^= (k >> 18); 
8
--
9
--Created by: Minzhen Ren
10
--Last Modified by: Minzhen Ren
11
--Last Modified Date: Auguest 30, 2010
12
--Lately Updates: 
13
--/////////////////////////////////////////////////////////////////
14
library ieee;
15
        use ieee.std_logic_1164.all;
16
        use ieee.std_logic_unsigned.all;
17
        use ieee.numeric_std.all;
18
        use ieee.math_real.all;
19
 
20
entity MT_SHIFTING is
21
        generic(
22
                DATA_WIDTH : Natural := 32
23
        );
24
        port(
25
                signal INPUT  : in  std_logic_vector( DATA_WIDTH-1 downto 0 );
26
                signal OUTPUT : out std_logic_vector( DATA_WIDTH-1 downto 0 )
27
        );
28
end MT_SHIFTING;
29
 
30
architecture BEHAVE of MT_SHIFTING is
31
 
32
        --constant
33
        signal MASK1 : std_logic_vector( DATA_WIDTH-1 downto 0 );
34
        signal MASK2 : std_logic_vector( DATA_WIDTH-1 downto 0 );
35
        --internal signals
36
        signal SIGNAL_S1 : std_logic_vector( DATA_WIDTH-1 downto 0 );
37
        signal SIGNAL_I1 : std_logic_vector( DATA_WIDTH-1 downto 0 );
38
        signal SIGNAL_S2 : std_logic_vector( DATA_WIDTH-1 downto 0 );
39
        signal SIGNAL_I2 : std_logic_vector( DATA_WIDTH-1 downto 0 );
40
        signal SIGNAL_S3 : std_logic_vector( DATA_WIDTH-1 downto 0 );
41
        signal SIGNAL_I3 : std_logic_vector( DATA_WIDTH-1 downto 0 );
42
        signal SIGNAL_S4 : std_logic_vector( DATA_WIDTH-1 downto 0 );
43
 
44
        begin
45
        --constant
46
        MASK1 <= "10011101001011000101011010000000"; -- Ox9d2c5680UL
47
        MASK2 <= "11101111110001100000000000000000"; -- Oxefc60000UL
48
 
49
        SIGNAL_S1 <= "00000000000" & INPUT(DATA_WIDTH-1 downto 11);
50
        SIGNAL_I1 <= INPUT xor SIGNAL_S1;
51
        SIGNAL_S2 <= SIGNAL_I1(DATA_WIDTH-8 downto 0) & "0000000";
52
        SIGNAL_I2 <= SIGNAL_I1 xor (SIGNAL_S2 and MASK1);
53
        SIGNAL_S3 <= SIGNAL_I2(DATA_WIDTH-16 downto 0) & "000000000000000";
54
        SIGNAL_I3 <= SIGNAL_I2 xor (SIGNAL_S3 and MASK2);
55
        SIGNAL_S4 <= "000000000000000000" & SIGNAL_I3(DATA_WIDTH-1 downto 18);
56
 
57
        OUTPUT <= SIGNAL_I3 xor SIGNAL_S4;
58
 
59
end BEHAVE;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.