top_level.vhd


1
library IEEE;
2
library UNISIM;
3
use IEEE.STD_LOGIC_1164.ALL;
4
use IEEE.STD_LOGIC_ARITH.ALL;
5
use IEEE.STD_LOGIC_UNSIGNED.ALL;
6
use UNISIM.vcomponents.all;
7
8
entity top_level is
9
    Port ( CLK_IN      : in  STD_LOGIC;
10
           taster1    : in   STD_LOGIC;
11
           taster2    : in   STD_LOGIC;
12
           taster3    : in   STD_LOGIC;
13
           taster4    : in   STD_LOGIC;
14
           TxCLK_p    : out STD_LOGIC;
15
           TxCLK_n    : out STD_LOGIC;
16
           TxOUT_p    : out STD_LOGIC_VECTOR( 2 downto 0);
17
           TxOUT_n    : out STD_LOGIC_VECTOR( 2 downto 0));
18
end top_level;
19
20
architecture Behavioral of top_level is
21
Signal TxCLK                  : STD_LOGIC:='0';                      -- Signal zum LVDS Transmitter
22
Signal TxOUT                  : STD_LOGIC_VECTOR( 2 downto 0):="000";      -- Signal zum LVDS Transmitter
23
Signal CLK35, CLK35N, CLK          : STD_LOGIC:='0';                      -- Intern verwendete Taktsignale
24
Signal DCM_NotReady, DCM_Ready35      : STD_LOGIC:='0';                      -- Signal, wenn die DCM eingerastet ist(Enable)
25
Signal RST_Data                : STD_LOGIC:='1';                      -- Synchrones Reset Signal
26
Signal DataIn                  : STD_LOGIC_VECTOR(20 downto 0);
27
28
29
--  COMPONENT dcm_clk
30
--  PORT(
31
--    CLKIN_IN : IN std_logic;          
32
--    CLKFX_OUT : OUT std_logic;
33
--    CLKIN_IBUFG_OUT : OUT std_logic;
34
--    CLK0_OUT : OUT std_logic;
35
--    LOCKED_OUT : OUT std_logic
36
--    );
37
--  END COMPONENT;
38
39
--  COMPONENT DCM_CLK35
40
--  PORT(
41
--    CLKIN_IN        : IN  STD_LOGIC; 
42
--    CLKFX_OUT      : OUT STD_LOGIC;
43
--    CLKFX180_OUT    : OUT STD_LOGIC;
44
--    CLKIN_IBUFG_OUT  : OUT STD_LOGIC;
45
--    CLK0_OUT        : OUT STD_LOGIC;
46
--    LOCKED_OUT      : OUT STD_LOGIC
47
--    );
48
--  END COMPONENT;
49
50
  COMPONENT dcm_all
51
  PORT(
52
    U1_CLKIN_IN : IN std_logic;
53
    U1_RST_IN : IN std_logic;          
54
    U1_CLKDV_OUT : OUT std_logic;
55
    U1_CLKIN_IBUFG_OUT : OUT std_logic;
56
    U1_CLK0_OUT : OUT std_logic;
57
    U2_CLKFX_OUT : OUT std_logic;
58
    U2_CLKFX180_OUT : OUT std_logic;
59
    U2_CLK0_OUT : OUT std_logic;
60
    U2_LOCKED_OUT : OUT std_logic
61
    );
62
  END COMPONENT;
63
  
64
  COMPONENT OBUFDS
65
  port (O          : out STD_ULOGIC;
66
      OB          : out STD_ULOGIC;
67
      I          : in STD_ULOGIC);
68
  END COMPONENT;
69
70
  COMPONENT Display
71
    Port ( clk_in      : in   STD_LOGIC;
72
        RST        : in   STD_LOGIC;
73
          taster1    : in   STD_LOGIC;
74
          taster2    : in   STD_LOGIC;
75
          taster3    : in   STD_LOGIC;
76
          taster4    : in   STD_LOGIC;
77
           red       : out  STD_LOGIC_VECTOR (5 downto 0);
78
           blue       : out  STD_LOGIC_VECTOR (5 downto 0);
79
           green       : out  STD_LOGIC_VECTOR (5 downto 0);
80
           hsync       : out  STD_LOGIC;
81
           vsync       : out  STD_LOGIC;
82
           enable     : out  STD_LOGIC);
83
  END COMPONENT;
84
85
  COMPONENT wrapper
86
    Port ( CLK       : in  STD_LOGIC;
87
           CLK35       : in  STD_LOGIC;
88
           CLK35N     : in  STD_LOGIC;
89
        RST        : in  STD_LOGIC;  
90
           DataIn     : in  STD_LOGIC_VECTOR (20 downto 0);
91
           TxOUT      : out  STD_LOGIC_VECTOR (2 downto 0);
92
           TxCLK      : out  STD_LOGIC);
93
  END COMPONENT;
94
  
95
begin
96
97
---- DCM für 40MHz
98
--  Inst_DCM_CLK: DCM_CLK PORT MAP(
99
--    CLKIN_IN       => CLK_IN,    -- 80MHz Takt in
100
--    CLKFX_OUT      => CLK40,    -- 40MHz Takt aus
101
--    CLKIN_IBUFG_OUT  => open,
102
--    CLK0_OUT        => open,
103
--    LOCKED_OUT       => open
104
--  );
105
106
-- DCM für 3,5 fachen Tackt = 210Mhz
107
--  Inst_DCM_CLK35: DCM_CLK35 PORT MAP(
108
--    CLKIN_IN       => CLK40,    -- 60MHz Takt in
109
--    CLKFX_OUT      => CLK35,    -- 210MHz Takt aus
110
--    CLKFX180_OUT    => CLK35N,    -- 210MHz negiert Takt aus
111
--    CLKIN_IBUFG_OUT  => open,
112
--    CLK0_OUT        => CLK,      -- 60MHz gepuffert syncron zum 210MHz Takt aus
113
--    LOCKED_OUT       => DCM_Ready35
114
--  );
115
116
  Inst_dcm_all: dcm_all PORT MAP(
117
    U1_CLKIN_IN     => CLK_IN,
118
    U1_RST_IN       => '0',
119
    U1_CLKDV_OUT     => open,
120
    U1_CLKIN_IBUFG_OUT=> open,
121
    U1_CLK0_OUT     => open,
122
    U2_CLKFX_OUT     => CLK35,
123
    U2_CLKFX180_OUT   => CLK35N,
124
    U2_CLK0_OUT     => CLK,
125
    U2_LOCKED_OUT     => DCM_Ready35
126
  );
127
128
-- Wrapper
129
  Inst_wrapper: wrapper PORT MAP(
130
      CLK          =>CLK,
131
      CLK35          =>CLK35,
132
      CLK35N        =>CLK35N,
133
    RST          =>RST_Data,
134
      DataIn        =>DataIn,
135
      TxOUT          =>TxOUT,
136
      TxCLK          =>TxCLK
137
  );
138
139
-- Display
140
  Inst_Display: Display PORT MAP(
141
    clk_in        =>CLK,
142
    RST          => '0',
143
    taster1        =>taster1,
144
    taster2        =>taster2,
145
    taster3        =>taster3,
146
    taster4        =>taster4,
147
    red          =>DataIn( 5 downto  0),
148
    blue          =>DataIn(11 downto  6),
149
    green          =>DataIn(17 downto 12),
150
    hsync          =>DataIn(18),
151
    vsync          =>DataIn(19),
152
    enable        =>DataIn(20)
153
  );  
154
155
156
-- LVDS Transmitter Instanzieren CLK
157
   OBUFDS_TxCLK : OBUFDS
158
   port map (
159
      O  => TxCLK_p,    -- Diff_p output
160
      OB => TxCLK_n,    -- Diff_n output
161
      I  => TxCLK       -- Buffer input 
162
   );
163
  
164
165
-- LVDS Transmitter Instanzieren TxOUT(i)
166
loop0 : for i in 0 to 2 generate 
167
   OBUFDS_TxOUT : OBUFDS
168
   port map (
169
      O  => TxOUT_p(i),    -- Diff_p output
170
      OB => TxOUT_n(i),     -- Diff_n output
171
      I  => TxOUT(i)       -- Buffer input 
172
   );
173
end generate ;
174
175
176
-- Für das Ready Signal der DCM als Reset
177
   DCM_NotReady <= (not DCM_Ready35);
178
179
180
-- Generiert ein syncrones Reset-Signal für den Sendetakt
181
process(CLK)
182
begin
183
if rising_edge(CLK) then
184
  RST_Data <= DCM_NotReady;
185
end if;
186
end process;
187
  
188
end Behavioral;