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/] [LCG.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 cowboyor
--/////////////////////////LCG BLOCK///////////////////////////////
2
--Purpose: to produce functionality equivalent to following C code:
3
--         #define LCG(x) ((69069 * x) + 1) & 0xffffffffUL
4
--
5
--Created by: Minzhen Ren
6
--Last Modified by: Minzhen Ren
7
--Last Modified Date: November 2, 2010
8
--Lately Updates: Pipelined
9
--/////////////////////////////////////////////////////////////////
10
library ieee;
11
        use ieee.std_logic_1164.all;
12
        use ieee.std_logic_unsigned.all;
13
        use ieee.numeric_std.all;
14
        use ieee.math_real.all;
15
 
16
entity LCG is
17
        generic(
18
                DATA_WIDTH : Natural := 32
19
        );
20
        port(
21
                CLK   : in  std_logic;
22
                RESET : in  std_logic;
23
                X_IN  : in  std_logic_vector( DATA_WIDTH-1 downto 0 );
24
                X_OUT : out std_logic_vector( DATA_WIDTH-1 downto 0 )
25
        );
26
end LCG;
27
 
28
architecture BEHAV of LCG is
29
 
30
        signal MASK : std_logic_vector( DATA_WIDTH-1 downto 0 );
31
        signal MULTIPLICAND : std_logic_vector( DATA_WIDTH-1 downto 0 );
32
        signal OP_Q : std_logic_vector( 2*DATA_WIDTH-1 downto 0 );
33
        signal OP_D : std_logic_vector( 2*DATA_WIDTH-1 downto 0 );
34
        signal OP_TEMP : std_logic_vector( 2*DATA_WIDTH-1 downto 0 );
35
 
36
        component REG is
37
                generic( BIT_WIDTH  : Natural := 64);   -- Default is 8 bits
38
                port(
39
                        CLK       : in  std_logic;
40
                        RESET     : in  std_logic; -- high asserted
41
                        DATA_IN   : in  std_logic_vector( BIT_WIDTH-1 downto 0 );
42
                        DATA_OUT  : out std_logic_vector( BIT_WIDTH-1 downto 0 )
43
        );
44
        end component;
45
 
46
        begin
47
 
48
                MASK <= ( others => '1' ); --0xffffffffUL
49
                MULTIPLICAND <= "00000000000000010000110111001101"; --69069
50
 
51
                OP_D <= X_IN * MULTIPLICAND; -- + 1;
52
 
53
                OP_REG : REG
54
                generic map(
55
                        BIT_WIDTH => 64
56
                )
57
                port map(
58
                        CLK => CLK,
59
                        RESET => RESET,
60
                        DATA_IN => OP_D,
61
                        DATA_OUT => OP_Q
62
                );
63
 
64
                OP_TEMP <= OP_Q + 1;
65
                X_OUT <= MASK and OP_TEMP( DATA_WIDTH-1 downto 0);
66
 
67
end BEHAV;
68
 

powered by: WebSVN 2.1.0

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