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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 cowboyor
--/////////////////////////MT_PATH BLOCK///////////////////////////////
2
--Purpose: to produce functionality equivalent to following C code:
3
--         
4
--
5
--Created by: Minzhen Ren
6
--Last Modified by: Minzhen Ren
7
--Last Modified Date: Auguest 29, 2010
8
--Lately Updates: 
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 MT_PATH is
17
        generic(
18
                DATA_WIDTH : Natural := 32
19
        );
20
        port(
21
                signal OPRAND1 : in  std_logic_vector( DATA_WIDTH-1 downto 0 );
22
                signal OPRAND2 : in  std_logic_vector( DATA_WIDTH-1 downto 0 );
23
                signal OPRAND3 : in  std_logic_vector( DATA_WIDTH-1 downto 0 );
24
                signal CLK     : in  std_logic;
25
                signal RESET   : in  std_logic;
26
                signal OUTPUT : out std_logic_vector( DATA_WIDTH-1 downto 0 )
27
        );
28
end MT_PATH;
29
 
30
architecture BEHAVE of MT_PATH is
31
 
32
        --constant
33
        signal UPPER_MASK : std_logic_vector( DATA_WIDTH-1 downto 0 );
34
        signal LOWER_MASK : std_logic_vector( DATA_WIDTH-1 downto 0 );
35
 
36
        --Y calculation
37
        signal Y_OP1 : std_logic_vector( DATA_WIDTH-1 downto 0 );
38
        signal Y_OP2 : std_logic_vector( DATA_WIDTH-1 downto 0 );
39
        signal Y_D       : std_logic_vector( DATA_WIDTH-1 downto 0 );
40
        signal Y_Q   : std_logic_vector( DATA_WIDTH-1 downto 0 );
41
 
42
        signal Y_MAGIC   : std_logic_vector( DATA_WIDTH-1 downto 0 );
43
 
44
        component REG is
45
                generic( BIT_WIDTH  : Natural := 32);   -- Default is 8 bits
46
                port( CLK               : in  std_logic;
47
                          RESET         : in  std_logic; -- high asserted
48
                          DATA_IN       : in  std_logic_vector( BIT_WIDTH-1 downto 0 );
49
                          DATA_OUT      : out std_logic_vector( BIT_WIDTH-1 downto 0 )
50
                        );
51
        end component;
52
 
53
        component MAGIC is
54
                generic(
55
                DATA_WIDTH : Natural := 32
56
                );
57
                port(
58
                        Y_IN  : in  std_logic_vector( DATA_WIDTH-1 downto 0 );
59
                        Y_OUT : out std_logic_vector( DATA_WIDTH-1 downto 0 )
60
                );
61
        end component;
62
 
63
        begin
64
 
65
        --constant
66
        UPPER_MASK <= "10000000000000000000000000000000"; --0x80000000UL
67
        LOWER_MASK <= "01111111111111111111111111111111"; --0x7fffffffUL
68
 
69
        Y_OP1 <= OPRAND1 and UPPER_MASK;
70
        Y_OP2 <= OPRAND2 and LOWER_MASK;
71
        Y_D <= Y_OP1 or Y_OP2;
72
 
73
        Y_REG : REG
74
        port map(
75
                CLK => CLK,
76
                RESET => RESET,
77
                DATA_IN => Y_D,
78
                DATA_OUT => Y_Q
79
        );
80
 
81
        MAGIC_Y : MAGIC
82
        port map(
83
                Y_IN => Y_Q,
84
                Y_OUT => Y_MAGIC
85
        );
86
 
87
        OUTPUT <= (OPRAND3 xor ('0' & Y_Q(DATA_WIDTH-1 downto 1))) xor Y_MAGIC;
88
 
89
end BEHAVE;

powered by: WebSVN 2.1.0

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