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;
|