1 |
5 |
ktt1 |
--------------------------------------------------------------------------------
|
2 |
|
|
-- _ _ __ ____ --
|
3 |
|
|
-- / / | | / _| | __| --
|
4 |
|
|
-- | |_| | _ _ / / | |_ --
|
5 |
|
|
-- | _ | | | | | | | | _| --
|
6 |
|
|
-- | | | | | |_| | \ \_ | |__ --
|
7 |
|
|
-- |_| |_| \_____| \__| |____| microLab --
|
8 |
|
|
-- --
|
9 |
|
|
-- Bern University of Applied Sciences (BFH) --
|
10 |
|
|
-- Quellgasse 21 --
|
11 |
|
|
-- Room HG 4.33 --
|
12 |
|
|
-- 2501 Biel/Bienne --
|
13 |
|
|
-- Switzerland --
|
14 |
|
|
-- --
|
15 |
|
|
-- http://www.microlab.ch --
|
16 |
|
|
--------------------------------------------------------------------------------
|
17 |
|
|
-- GECKO4com
|
18 |
|
|
--
|
19 |
|
|
-- 2010/2011 Dr. Theo Kluter
|
20 |
|
|
--
|
21 |
|
|
-- This VHDL code is free code: you can redistribute it and/or modify
|
22 |
|
|
-- it under the terms of the GNU General Public License as published by
|
23 |
|
|
-- the Free Software Foundation, either version 3 of the License, or
|
24 |
|
|
-- (at your option) any later version.
|
25 |
|
|
--
|
26 |
|
|
-- This VHDL code is distributed in the hope that it will be useful,
|
27 |
|
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
28 |
|
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
29 |
|
|
-- GNU General Public License for more details.
|
30 |
|
|
-- You should have received a copy of the GNU General Public License
|
31 |
|
|
-- along with these sources. If not, see <http://www.gnu.org/licenses/>.
|
32 |
|
|
--
|
33 |
|
|
|
34 |
|
|
-- The unisim library is used for simulation of the xilinx specific components
|
35 |
|
|
-- For generic usage please use:
|
36 |
|
|
-- LIBRARY work;
|
37 |
|
|
-- USE work.xilinx_generic.all;
|
38 |
|
|
-- And use the xilinx generic package found in the xilinx generic module
|
39 |
|
|
LIBRARY unisim;
|
40 |
|
|
USE unisim.all;
|
41 |
|
|
|
42 |
|
|
ARCHITECTURE xilinx OF cmd_18_1e_if IS
|
43 |
|
|
|
44 |
|
|
COMPONENT RAMB16_S9
|
45 |
|
|
GENERIC ( INIT_00 : bit_vector;
|
46 |
|
|
INIT_01 : bit_vector;
|
47 |
|
|
INIT_02 : bit_vector;
|
48 |
|
|
INIT_03 : bit_vector;
|
49 |
|
|
INIT_04 : bit_vector;
|
50 |
|
|
INIT_05 : bit_vector;
|
51 |
|
|
INIT_06 : bit_vector;
|
52 |
|
|
INIT_07 : bit_vector;
|
53 |
|
|
INIT_08 : bit_vector;
|
54 |
|
|
INIT_09 : bit_vector;
|
55 |
|
|
INIT_0A : bit_vector;
|
56 |
|
|
INIT_0B : bit_vector;
|
57 |
|
|
INIT_0C : bit_vector;
|
58 |
|
|
INIT_0D : bit_vector;
|
59 |
|
|
INIT_0E : bit_vector;
|
60 |
|
|
INIT_0F : bit_vector;
|
61 |
|
|
INIT_10 : bit_vector;
|
62 |
|
|
INIT_11 : bit_vector;
|
63 |
|
|
INIT_12 : bit_vector;
|
64 |
|
|
INIT_13 : bit_vector;
|
65 |
|
|
INIT_14 : bit_vector;
|
66 |
|
|
INIT_15 : bit_vector;
|
67 |
|
|
INIT_16 : bit_vector;
|
68 |
|
|
INIT_17 : bit_vector;
|
69 |
|
|
INIT_18 : bit_vector;
|
70 |
|
|
INIT_19 : bit_vector;
|
71 |
|
|
INIT_1A : bit_vector;
|
72 |
|
|
INIT_1B : bit_vector;
|
73 |
|
|
INIT_1C : bit_vector;
|
74 |
|
|
INIT_1D : bit_vector;
|
75 |
|
|
INIT_1E : bit_vector;
|
76 |
|
|
INIT_1F : bit_vector;
|
77 |
|
|
INIT_20 : bit_vector;
|
78 |
|
|
INIT_21 : bit_vector;
|
79 |
|
|
INIT_22 : bit_vector;
|
80 |
|
|
INIT_23 : bit_vector;
|
81 |
|
|
INIT_24 : bit_vector;
|
82 |
|
|
INIT_25 : bit_vector;
|
83 |
|
|
INIT_26 : bit_vector;
|
84 |
|
|
INIT_27 : bit_vector;
|
85 |
|
|
INIT_28 : bit_vector;
|
86 |
|
|
INIT_29 : bit_vector;
|
87 |
|
|
INIT_2A : bit_vector;
|
88 |
|
|
INIT_2B : bit_vector;
|
89 |
|
|
INIT_2C : bit_vector;
|
90 |
|
|
INIT_2D : bit_vector;
|
91 |
|
|
INIT_2E : bit_vector;
|
92 |
|
|
INIT_2F : bit_vector;
|
93 |
|
|
INIT_30 : bit_vector;
|
94 |
|
|
INIT_31 : bit_vector;
|
95 |
|
|
INIT_32 : bit_vector;
|
96 |
|
|
INIT_33 : bit_vector;
|
97 |
|
|
INIT_34 : bit_vector;
|
98 |
|
|
INIT_35 : bit_vector;
|
99 |
|
|
INIT_36 : bit_vector;
|
100 |
|
|
INIT_37 : bit_vector;
|
101 |
|
|
INIT_38 : bit_vector;
|
102 |
|
|
INIT_39 : bit_vector;
|
103 |
|
|
INIT_3A : bit_vector;
|
104 |
|
|
INIT_3B : bit_vector;
|
105 |
|
|
INIT_3C : bit_vector;
|
106 |
|
|
INIT_3D : bit_vector;
|
107 |
|
|
INIT_3E : bit_vector;
|
108 |
|
|
INIT_3F : bit_vector);
|
109 |
|
|
PORT ( DO : OUT std_logic_vector( 7 DOWNTO 0 );
|
110 |
|
|
DOP : OUT std_logic_vector( 0 DOWNTO 0 );
|
111 |
|
|
ADDR : IN std_logic_vector( 10 DOWNTO 0 );
|
112 |
|
|
DI : IN std_logic_vector( 7 DOWNTO 0 );
|
113 |
|
|
DIP : IN std_logic_vector( 0 DOWNTO 0 );
|
114 |
|
|
EN : IN std_logic;
|
115 |
|
|
WE : IN std_logic;
|
116 |
|
|
CLK : IN std_logic;
|
117 |
|
|
SSR : IN std_logic );
|
118 |
|
|
END COMPONENT;
|
119 |
|
|
|
120 |
|
|
SIGNAL s_n_clock : std_logic;
|
121 |
|
|
SIGNAL s_string_data : std_logic_vector( 7 DOWNTO 0 );
|
122 |
|
|
SIGNAL s_string_index : std_logic_vector(10 DOWNTO 0 );
|
123 |
|
|
SIGNAL s_push : std_logic;
|
124 |
|
|
SIGNAL s_valid_command : std_logic;
|
125 |
|
|
SIGNAL s_string_select_reg : std_logic_vector( 4 DOWNTO 0 );
|
126 |
|
|
SIGNAL s_string_cnt_reg : std_logic_vector( 5 DOWNTO 0 );
|
127 |
|
|
|
128 |
|
|
BEGIN
|
129 |
|
|
--------------------------------------------------------------------------------
|
130 |
|
|
--- Here the outputs are defined ---
|
131 |
|
|
--------------------------------------------------------------------------------
|
132 |
|
|
push_size <= s_string_data(7);
|
133 |
|
|
push_data <= "0"&s_string_data(6 DOWNTO 0);
|
134 |
|
|
push <= s_push;
|
135 |
|
|
|
136 |
|
|
--------------------------------------------------------------------------------
|
137 |
|
|
--- Here the control signals are defined ---
|
138 |
|
|
--------------------------------------------------------------------------------
|
139 |
|
|
s_n_clock <= NOT(clock);
|
140 |
|
|
s_push <= '0' WHEN s_string_data = X"00" OR
|
141 |
|
|
fifo_full = '1' ELSE '1';
|
142 |
|
|
s_valid_command <= '1' WHEN start_command = '1' AND
|
143 |
|
|
(command_id = "0011000" OR
|
144 |
|
|
command_id = "0011110") ELSE '0';
|
145 |
|
|
s_string_index <= s_string_select_reg&s_string_cnt_reg;
|
146 |
|
|
|
147 |
|
|
--------------------------------------------------------------------------------
|
148 |
|
|
--- Here the processes are defined ---
|
149 |
|
|
--------------------------------------------------------------------------------
|
150 |
|
|
make_command_done : PROCESS( clock , s_push , s_string_data )
|
151 |
|
|
BEGIN
|
152 |
|
|
IF (clock'event AND (clock = '1')) THEN
|
153 |
|
|
IF (s_push = '1' AND
|
154 |
|
|
s_string_data = X"0A") THEN command_done <= '1';
|
155 |
|
|
ELSE command_done <= '0';
|
156 |
|
|
END IF;
|
157 |
|
|
END IF;
|
158 |
|
|
END PROCESS make_command_done;
|
159 |
|
|
|
160 |
|
|
make_string_select_reg : PROCESS( clock , reset , s_valid_command ,
|
161 |
|
|
command_id , n_usb_power , n_usb_charge ,
|
162 |
|
|
n_bus_power , fpga_configured ,
|
163 |
|
|
fpga_type , flash_empty )
|
164 |
|
|
BEGIN
|
165 |
|
|
IF (clock'event AND (clock = '1')) THEN
|
166 |
|
|
IF (reset = '1') THEN s_string_select_reg <= (OTHERS => '0');
|
167 |
|
|
ELSIF (s_valid_command = '1') THEN
|
168 |
|
|
IF (command_id = "0011000") THEN
|
169 |
|
|
s_string_select_reg <= "1"&flash_empty&n_usb_power&n_usb_charge&n_bus_power;
|
170 |
|
|
ELSE
|
171 |
|
|
s_string_select_reg <= "0"&fpga_configured&fpga_type;
|
172 |
|
|
END IF;
|
173 |
|
|
END IF;
|
174 |
|
|
END IF;
|
175 |
|
|
END PROCESS make_string_select_reg;
|
176 |
|
|
|
177 |
|
|
make_string_cnt_reg : PROCESS( clock , reset , s_valid_command , s_push )
|
178 |
|
|
BEGIN
|
179 |
|
|
IF (clock'event AND (clock = '1')) THEN
|
180 |
|
|
IF (reset = '1') THEN s_string_cnt_reg <= (OTHERS => '1');
|
181 |
|
|
ELSIF (s_valid_command = '1') THEN s_string_cnt_reg <= (OTHERS => '0');
|
182 |
|
|
ELSIF (s_push = '1') THEN
|
183 |
|
|
s_string_cnt_reg <= unsigned(s_string_cnt_reg) + 1;
|
184 |
|
|
END IF;
|
185 |
|
|
END IF;
|
186 |
|
|
END PROCESS make_string_cnt_reg;
|
187 |
|
|
|
188 |
|
|
--------------------------------------------------------------------------------
|
189 |
|
|
--- Here the string rom is defined ---
|
190 |
|
|
--------------------------------------------------------------------------------
|
191 |
|
|
string_rom : RAMB16_S9
|
192 |
|
|
GENERIC MAP ( INIT_00 => X"36373647474630303031533343582033206E61747261705320786E696C6958B0",
|
193 |
|
|
INIT_01 => X"0000000000000000000000000000000A646572756769666E6F6320746F6E202C",
|
194 |
|
|
INIT_02 => X"36373647474630303531533343582033206E61747261705320786E696C6958B0",
|
195 |
|
|
INIT_03 => X"0000000000000000000000000000000A646572756769666E6F6320746F6E202C",
|
196 |
|
|
INIT_04 => X"36373647474630303032533343582033206E61747261705320786E696C6958B0",
|
197 |
|
|
INIT_05 => X"0000000000000000000000000000000A646572756769666E6F6320746F6E202C",
|
198 |
|
|
INIT_06 => X"36373647474630303034533343582033206E61747261705320786E696C6958B0",
|
199 |
|
|
INIT_07 => X"0000000000000000000000000000000A646572756769666E6F6320746F6E202C",
|
200 |
|
|
INIT_08 => X"36373647474630303035533343582033206E61747261705320786E696C6958B0",
|
201 |
|
|
INIT_09 => X"0000000000000000000000000000000A646572756769666E6F6320746F6E202C",
|
202 |
|
|
INIT_0A => X"41475046206E776F6E6B6E7520726F206465746E756F6D2041475046206F4EA5",
|
203 |
|
|
INIT_0B => X"00000000000000000000000000000000000000000000000000000A6570797420",
|
204 |
|
|
INIT_0C => X"41475046206E776F6E6B6E7520726F206465746E756F6D2041475046206F4EA5",
|
205 |
|
|
INIT_0D => X"00000000000000000000000000000000000000000000000000000A6570797420",
|
206 |
|
|
INIT_0E => X"41475046206E776F6E6B6E7520726F206465746E756F6D2041475046206F4EA5",
|
207 |
|
|
INIT_0F => X"00000000000000000000000000000000000000000000000000000A6570797420",
|
208 |
|
|
INIT_10 => X"36373647474630303031533343582033206E61747261705320786E696C6958A9",
|
209 |
|
|
INIT_11 => X"000000000000000000000000000000000000000000000A676E696E6E7572202C",
|
210 |
|
|
INIT_12 => X"36373647474630303531533343582033206E61747261705320786E696C6958A9",
|
211 |
|
|
INIT_13 => X"000000000000000000000000000000000000000000000A676E696E6E7572202C",
|
212 |
|
|
INIT_14 => X"36373647474630303032533343582033206E61747261705320786E696C6958A9",
|
213 |
|
|
INIT_15 => X"000000000000000000000000000000000000000000000A676E696E6E7572202C",
|
214 |
|
|
INIT_16 => X"36373647474630303034533343582033206E61747261705320786E696C6958A9",
|
215 |
|
|
INIT_17 => X"000000000000000000000000000000000000000000000A676E696E6E7572202C",
|
216 |
|
|
INIT_18 => X"36373647474630303035533343582033206E61747261705320786E696C6958A9",
|
217 |
|
|
INIT_19 => X"000000000000000000000000000000000000000000000A676E696E6E7572202C",
|
218 |
|
|
INIT_1A => X"41475046206E776F6E6B6E7520726F206465746E756F6D2041475046206F4EA5",
|
219 |
|
|
INIT_1B => X"00000000000000000000000000000000000000000000000000000A6570797420",
|
220 |
|
|
INIT_1C => X"41475046206E776F6E6B6E7520726F206465746E756F6D2041475046206F4EA5",
|
221 |
|
|
INIT_1D => X"00000000000000000000000000000000000000000000000000000A6570797420",
|
222 |
|
|
INIT_1E => X"41475046206E776F6E6B6E7520726F206465746E756F6D2041475046206F4EA5",
|
223 |
|
|
INIT_1F => X"00000000000000000000000000000000000000000000000000000A6570797420",
|
224 |
|
|
INIT_20 => X"626F727020676E697265646C6F73202C65746174532064656E696665646E55A4",
|
225 |
|
|
INIT_21 => X"0000000000000000000000000000000000000000000000000000000A3F6D656C",
|
226 |
|
|
INIT_22 => X"7265776F70202C6465696C7070757320425355203A6E69616D344F4B434547B9",
|
227 |
|
|
INIT_23 => X"0000000000000A64656D6D6172676F7270206873616C46202C53554220676E69",
|
228 |
|
|
INIT_24 => X"626F727020676E697265646C6F73202C65746174532064656E696665646E55A4",
|
229 |
|
|
INIT_25 => X"0000000000000000000000000000000000000000000000000000000A3F6D656C",
|
230 |
|
|
INIT_26 => X"6873616C46202C6465696C7070757320425355203A6E69616D344F4B434547AB",
|
231 |
|
|
INIT_27 => X"00000000000000000000000000000000000000000A64656D6D6172676F727020",
|
232 |
|
|
INIT_28 => X"6F70202C6465696C7070757320314F494E4547203A6E69616D344F4B434547BC",
|
233 |
|
|
INIT_29 => X"0000000A64656D6D6172676F7270206873616C46202C53554220676E69726577",
|
234 |
|
|
INIT_2A => X"626F727020676E697265646C6F73202C65746174532064656E696665646E55A4",
|
235 |
|
|
INIT_2B => X"0000000000000000000000000000000000000000000000000000000A3F6D656C",
|
236 |
|
|
INIT_2C => X"6C46202C6465696C7070757320314F494E4547203A6E69616D344F4B434547AE",
|
237 |
|
|
INIT_2D => X"00000000000000000000000000000000000A64656D6D6172676F727020687361",
|
238 |
|
|
INIT_2E => X"626F727020676E697265646C6F73202C65746174532064656E696665646E55A4",
|
239 |
|
|
INIT_2F => X"0000000000000000000000000000000000000000000000000000000A3F6D656C",
|
240 |
|
|
INIT_30 => X"626F727020676E697265646C6F73202C65746174532064656E696665646E55A4",
|
241 |
|
|
INIT_31 => X"0000000000000000000000000000000000000000000000000000000A3F6D656C",
|
242 |
|
|
INIT_32 => X"7265776F70202C6465696C7070757320425355203A6E69616D344F4B434547B4",
|
243 |
|
|
INIT_33 => X"00000000000000000000000A7974706D65206873616C46202C53554220676E69",
|
244 |
|
|
INIT_34 => X"626F727020676E697265646C6F73202C65746174532064656E696665646E55A4",
|
245 |
|
|
INIT_35 => X"0000000000000000000000000000000000000000000000000000000A3F6D656C",
|
246 |
|
|
INIT_36 => X"6873616C46202C6465696C7070757320425355203A6E69616D344F4B434547A6",
|
247 |
|
|
INIT_37 => X"000000000000000000000000000000000000000000000000000A7974706D6520",
|
248 |
|
|
INIT_38 => X"6F70202C6465696C7070757320314F494E4547203A6E69616D344F4B434547B7",
|
249 |
|
|
INIT_39 => X"00000000000000000A7974706D65206873616C46202C53554220676E69726577",
|
250 |
|
|
INIT_3A => X"626F727020676E697265646C6F73202C65746174532064656E696665646E55A4",
|
251 |
|
|
INIT_3B => X"0000000000000000000000000000000000000000000000000000000A3F6D656C",
|
252 |
|
|
INIT_3C => X"6C46202C6465696C7070757320314F494E4547203A6E69616D344F4B434547A9",
|
253 |
|
|
INIT_3D => X"000000000000000000000000000000000000000000000A7974706D6520687361",
|
254 |
|
|
INIT_3E => X"626F727020676E697265646C6F73202C65746174532064656E696665646E55A4",
|
255 |
|
|
INIT_3F => X"0000000000000000000000000000000000000000000000000000000A3F6D656C")
|
256 |
|
|
PORT MAP ( DO => s_string_data,
|
257 |
|
|
DOP => OPEN,
|
258 |
|
|
ADDR => s_string_index,
|
259 |
|
|
DI => X"00",
|
260 |
|
|
DIP => "0",
|
261 |
|
|
EN => '1',
|
262 |
|
|
WE => '0',
|
263 |
|
|
CLK => s_n_clock,
|
264 |
|
|
SSR => '0' );
|
265 |
|
|
|
266 |
|
|
END xilinx;
|