OpenCores
URL https://opencores.org/ocsvn/gecko4/gecko4/trunk

Subversion Repositories gecko4

[/] [gecko4/] [trunk/] [GECKO4com/] [spartan200_an/] [vhdl/] [scpi_if/] [scpi_if-behavior-xilinx.vhdl] - Blame information for rev 5

Details | Compare with Previous | View Log

Line No. Rev Author Line
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 SCPI_INTERFACE IS
43
 
44
   COMPONENT RAM16X1S
45
      GENERIC ( INIT : bit_vector(15 DOWNTO 0 ) );
46
      PORT ( O     : OUT std_ulogic;
47
             A0    : IN  std_ulogic;
48
             A1    : IN  std_ulogic;
49
             A2    : IN  std_ulogic;
50
             A3    : IN  std_ulogic;
51
             D     : IN  std_ulogic;
52
             WCLK  : IN  std_ulogic;
53
             WE    : IN  std_ulogic );
54
   END COMPONENT;
55
 
56
   COMPONENT RAMB16_S9
57
      GENERIC ( INIT_00 : bit_vector;
58
                INIT_01 : bit_vector;
59
                INIT_02 : bit_vector;
60
                INIT_03 : bit_vector;
61
                INIT_04 : bit_vector;
62
                INIT_05 : bit_vector;
63
                INIT_06 : bit_vector;
64
                INIT_07 : bit_vector;
65
                INIT_08 : bit_vector;
66
                INIT_09 : bit_vector;
67
                INIT_0A : bit_vector;
68
                INIT_0B : bit_vector;
69
                INIT_0C : bit_vector;
70
                INIT_0D : bit_vector;
71
                INIT_0E : bit_vector;
72
                INIT_0F : bit_vector;
73
                INIT_10 : bit_vector;
74
                INIT_11 : bit_vector;
75
                INIT_12 : bit_vector;
76
                INIT_13 : bit_vector;
77
                INIT_14 : bit_vector;
78
                INIT_15 : bit_vector;
79
                INIT_16 : bit_vector;
80
                INIT_17 : bit_vector;
81
                INIT_18 : bit_vector;
82
                INIT_19 : bit_vector;
83
                INIT_1A : bit_vector;
84
                INIT_1B : bit_vector;
85
                INIT_1C : bit_vector;
86
                INIT_1D : bit_vector;
87
                INIT_1E : bit_vector;
88
                INIT_1F : bit_vector;
89
                INIT_20 : bit_vector;
90
                INIT_21 : bit_vector;
91
                INIT_22 : bit_vector;
92
                INIT_23 : bit_vector;
93
                INIT_24 : bit_vector;
94
                INIT_25 : bit_vector;
95
                INIT_26 : bit_vector;
96
                INIT_27 : bit_vector;
97
                INIT_28 : bit_vector;
98
                INIT_29 : bit_vector;
99
                INIT_2A : bit_vector;
100
                INIT_2B : bit_vector;
101
                INIT_2C : bit_vector;
102
                INIT_2D : bit_vector;
103
                INIT_2E : bit_vector;
104
                INIT_2F : bit_vector;
105
                INIT_30 : bit_vector;
106
                INIT_31 : bit_vector;
107
                INIT_32 : bit_vector;
108
                INIT_33 : bit_vector;
109
                INIT_34 : bit_vector;
110
                INIT_35 : bit_vector;
111
                INIT_36 : bit_vector;
112
                INIT_37 : bit_vector;
113
                INIT_38 : bit_vector;
114
                INIT_39 : bit_vector;
115
                INIT_3A : bit_vector;
116
                INIT_3B : bit_vector;
117
                INIT_3C : bit_vector;
118
                INIT_3D : bit_vector;
119
                INIT_3E : bit_vector;
120
                INIT_3F : bit_vector);
121
      PORT ( DO   : OUT std_logic_vector(  7 DOWNTO 0 );
122
             DOP  : OUT std_logic_vector(  0 DOWNTO 0 );
123
             ADDR : IN  std_logic_vector( 10 DOWNTO 0 );
124
             DI   : IN  std_logic_vector(  7 DOWNTO 0 );
125
             DIP  : IN  std_logic_vector(  0 DOWNTO 0 );
126
             EN   : IN  std_logic;
127
             WE   : IN  std_logic;
128
             CLK  : IN  std_logic;
129
             SSR  : IN  std_logic );
130
   END COMPONENT;
131
 
132
   TYPE SCPI_STATES IS (IDLE,INIT_COMMAND_READ,READ_ONE_COMMAND,
133
                        FLUSH_MESSAGE,SIGNAL_ERROR,
134
                        INIT_COMMAND_SEARCH_7 , COMMAND_SEARCH_7 ,
135
                        INIT_COMMAND_SEARCH_6 , COMMAND_SEARCH_6 ,
136
                        INIT_COMMAND_SEARCH_5 , COMMAND_SEARCH_5 ,
137
                        INIT_COMMAND_SEARCH_4 , COMMAND_SEARCH_4 ,
138
                        INIT_COMMAND_SEARCH_3 , COMMAND_SEARCH_3 ,
139
                        INIT_COMMAND_SEARCH_2 , COMMAND_SEARCH_2 ,
140
                        INIT_COMMAND_SEARCH_1 , COMMAND_SEARCH_1 ,
141
                        INIT_COMMAND_SEARCH_0 , COMMAND_SEARCH_0 ,
142
                        FETCH_COMMAND_ID , WAIT_FOR_DONE );
143
   CONSTANT c_small_a_1 : std_logic_vector( 7 DOWNTO 0 ) := X"60";
144
   CONSTANT c_small_z_1 : std_logic_vector( 7 DOWNTO 0 ) := X"7B";
145
 
146
   SIGNAL s_scpi_state_machine         : SCPI_STATES;
147
   SIGNAL s_n_clock                    : std_logic;
148
   SIGNAL s_pop_byte                   : std_logic;
149
   SIGNAL s_upcased_char               : std_logic_vector(  7 DOWNTO 0 );
150
   SIGNAL s_is_lower_case              : std_logic;
151
   SIGNAL s_is_command_seperator       : std_logic;
152
   SIGNAL s_command_buffer_address_reg : std_logic_vector(  3 DOWNTO 0 );
153
   SIGNAL s_write_byte                 : std_logic;
154
   SIGNAL s_command_too_long           : std_logic;
155
   SIGNAL s_command_stored             : std_logic;
156
   SIGNAL s_command_byte               : std_logic_vector(  7 DOWNTO 0 );
157
   SIGNAL s_command_char               : std_logic_vector(  7 DOWNTO 0 );
158
   SIGNAL s_command_rom_search_addr    : std_logic_vector( 10 DOWNTO 0 );
159
   SIGNAL s_command_rom_data           : std_logic_vector(  7 DOWNTO 0 );
160
   SIGNAL s_rom_data_zero              : std_logic;
161
   SIGNAL s_buffer_data_zero           : std_logic;
162
   SIGNAL s_command_match              : std_logic;
163
   SIGNAL s_command_smaller            : std_logic;
164
   SIGNAL s_command_bigger             : std_logic;
165
   SIGNAL s_search_command             : std_logic;
166
   SIGNAL s_cmd_gen_respons_reg        : std_logic;
167
   SIGNAL s_message_in_progress_reg    : std_logic;
168
 
169
BEGIN
170
--------------------------------------------------------------------------------
171
--- Here the outputs are defined                                             ---
172
--------------------------------------------------------------------------------
173
   pop             <= s_pop_byte OR slave_pop;
174
   unknown_command <= '1' WHEN s_scpi_state_machine = COMMAND_SEARCH_0 AND
175
                               (s_command_smaller = '1' OR
176
                                s_command_bigger = '1') ELSE '0';
177
   make_command : PROCESS( clock , reset , s_scpi_state_machine ,
178
                           s_command_rom_data , s_cmd_gen_respons_reg )
179
   BEGIN
180
      IF (clock'event AND (clock = '1')) THEN
181
         IF (reset = '1') THEN start_command   <= '0';
182
                               command_id      <= (OTHERS => '0');
183
                               cmd_gen_respons <= '0';
184
                          ELSE
185
            IF (s_scpi_state_machine = FETCH_COMMAND_ID) THEN
186
               start_command   <= '1';
187
               command_id      <= s_command_rom_data( 6 DOWNTO 0 );
188
               cmd_gen_respons <= s_cmd_gen_respons_reg;
189
                                                         ELSE
190
               start_command   <= '0';
191
               cmd_gen_respons <= '0';
192
            END IF;
193
         END IF;
194
      END IF;
195
   END PROCESS make_command;
196
 
197
--------------------------------------------------------------------------------
198
--- Here the state machine is defined                                        ---
199
--------------------------------------------------------------------------------
200
   make_scpi_state_machine : PROCESS( clock , reset , s_scpi_state_machine ,
201
                                      transparent_mode  , pop_empty,
202
                                      s_command_too_long ,
203
                                      s_command_stored , s_command_match ,
204
                                      s_command_bigger , s_command_smaller )
205
      VARIABLE v_next_state : SCPI_STATES;
206
   BEGIN
207
      CASE (s_scpi_state_machine) IS
208
         WHEN IDLE                  => IF (transparent_mode = '0' AND
209
                                           pop_empty = '0') THEN
210
                                          v_next_state := INIT_COMMAND_READ;
211
                                                            ELSE
212
                                          v_next_state := IDLE;
213
                                       END IF;
214
         WHEN INIT_COMMAND_READ     => v_next_state := READ_ONE_COMMAND;
215
         WHEN READ_ONE_COMMAND      => IF (s_command_too_long = '1') THEN
216
                                          v_next_state := FLUSH_MESSAGE;
217
                                       ELSIF (s_command_stored = '1') THEN
218
                                          v_next_state := INIT_COMMAND_SEARCH_7;
219
                                       ELSIF (pop_last = '1' AND
220
                                              pop_empty = '0') THEN
221
                                          v_next_state := SIGNAL_ERROR;
222
                                                                      ELSE
223
                                          v_next_state := READ_ONE_COMMAND;
224
                                       END IF;
225
         WHEN INIT_COMMAND_SEARCH_7 => v_next_state := COMMAND_SEARCH_7;
226
         WHEN COMMAND_SEARCH_7      => IF (s_command_match = '1') THEN
227
                                          v_next_state := FETCH_COMMAND_ID;
228
                                       ELSIF (s_command_smaller = '1' OR
229
                                              s_command_bigger = '1') THEN
230
                                          v_next_state := INIT_COMMAND_SEARCH_6;
231
                                                                      ELSE
232
                                          v_next_state := COMMAND_SEARCH_7;
233
                                       END IF;
234
         WHEN INIT_COMMAND_SEARCH_6 => v_next_state := COMMAND_SEARCH_6;
235
         WHEN COMMAND_SEARCH_6      => IF (s_command_match = '1') THEN
236
                                          v_next_state := FETCH_COMMAND_ID;
237
                                       ELSIF (s_command_smaller = '1' OR
238
                                              s_command_bigger = '1') THEN
239
                                          v_next_state := INIT_COMMAND_SEARCH_5;
240
                                                                      ELSE
241
                                          v_next_state := COMMAND_SEARCH_6;
242
                                       END IF;
243
         WHEN INIT_COMMAND_SEARCH_5 => v_next_state := COMMAND_SEARCH_5;
244
         WHEN COMMAND_SEARCH_5      => IF (s_command_match = '1') THEN
245
                                          v_next_state := FETCH_COMMAND_ID;
246
                                       ELSIF (s_command_smaller = '1' OR
247
                                              s_command_bigger = '1') THEN
248
                                          v_next_state := INIT_COMMAND_SEARCH_4;
249
                                                                      ELSE
250
                                          v_next_state := COMMAND_SEARCH_5;
251
                                       END IF;
252
         WHEN INIT_COMMAND_SEARCH_4 => v_next_state := COMMAND_SEARCH_4;
253
         WHEN COMMAND_SEARCH_4      => IF (s_command_match = '1') THEN
254
                                          v_next_state := FETCH_COMMAND_ID;
255
                                       ELSIF (s_command_smaller = '1' OR
256
                                              s_command_bigger = '1') THEN
257
                                          v_next_state := INIT_COMMAND_SEARCH_3;
258
                                                                      ELSE
259
                                          v_next_state := COMMAND_SEARCH_4;
260
                                       END IF;
261
         WHEN INIT_COMMAND_SEARCH_3 => v_next_state := COMMAND_SEARCH_3;
262
         WHEN COMMAND_SEARCH_3      => IF (s_command_match = '1') THEN
263
                                          v_next_state := FETCH_COMMAND_ID;
264
                                       ELSIF (s_command_smaller = '1' OR
265
                                              s_command_bigger = '1') THEN
266
                                          v_next_state := INIT_COMMAND_SEARCH_2;
267
                                                                      ELSE
268
                                          v_next_state := COMMAND_SEARCH_3;
269
                                       END IF;
270
         WHEN INIT_COMMAND_SEARCH_2 => v_next_state := COMMAND_SEARCH_2;
271
         WHEN COMMAND_SEARCH_2      => IF (s_command_match = '1') THEN
272
                                          v_next_state := FETCH_COMMAND_ID;
273
                                       ELSIF (s_command_smaller = '1' OR
274
                                              s_command_bigger = '1') THEN
275
                                          v_next_state := INIT_COMMAND_SEARCH_1;
276
                                                                      ELSE
277
                                          v_next_state := COMMAND_SEARCH_2;
278
                                       END IF;
279
         WHEN INIT_COMMAND_SEARCH_1 => v_next_state := COMMAND_SEARCH_1;
280
         WHEN COMMAND_SEARCH_1      => IF (s_command_match = '1') THEN
281
                                          v_next_state := FETCH_COMMAND_ID;
282
                                       ELSIF (s_command_smaller = '1' OR
283
                                              s_command_bigger = '1') THEN
284
                                          v_next_state := INIT_COMMAND_SEARCH_0;
285
                                                                      ELSE
286
                                          v_next_state := COMMAND_SEARCH_1;
287
                                       END IF;
288
         WHEN INIT_COMMAND_SEARCH_0 => v_next_state := COMMAND_SEARCH_0;
289
         WHEN COMMAND_SEARCH_0      => IF (s_command_match = '1') THEN
290
                                          v_next_state := FETCH_COMMAND_ID;
291
                                       ELSIF (s_command_smaller = '1' OR
292
                                              s_command_bigger = '1') THEN
293
                                          v_next_state := FLUSH_MESSAGE;
294
                                                                      ELSE
295
                                          v_next_state := COMMAND_SEARCH_0;
296
                                       END IF;
297
         WHEN FETCH_COMMAND_ID      => v_next_state := WAIT_FOR_DONE;
298
         WHEN WAIT_FOR_DONE         => IF (command_error = '1') THEN
299
                                          v_next_state := FLUSH_MESSAGE;
300
                                       ELSIF (command_done = '1') THEN
301
                                          v_next_state := IDLE;
302
                                                                  ELSE
303
                                          v_next_state := WAIT_FOR_DONE;
304
                                       END IF;
305
         WHEN FLUSH_MESSAGE         => IF (s_message_in_progress_reg = '1') THEN
306
                                          v_next_state := FLUSH_MESSAGE;
307
                                                                            ELSE
308
                                          v_next_state := SIGNAL_ERROR;
309
                                       END IF;
310
         WHEN OTHERS                => v_next_state := IDLE;
311
      END CASE;
312
      IF (clock'event AND (clock = '1')) THEN
313
         IF (reset = '1') THEN s_scpi_state_machine <= IDLE;
314
                          ELSE s_scpi_state_machine <= v_next_state;
315
         END IF;
316
      END IF;
317
   END PROCESS make_scpi_state_machine;
318
 
319
--------------------------------------------------------------------------------
320
--- Here the message in progress reg is defined                              ---
321
--------------------------------------------------------------------------------
322
   make_message_in_progress_reg : PROCESS( clock , reset ,
323
                                           s_scpi_state_machine )
324
   BEGIN
325
      IF (clock'event AND (clock = '1')) THEN
326
         IF (reset = '1' OR
327
             (pop_last = '1' AND
328
              (s_pop_byte = '1' OR
329
               slave_pop = '1'))) THEN s_message_in_progress_reg <= '0';
330
         ELSIF (s_scpi_state_machine = INIT_COMMAND_READ) THEN
331
            s_message_in_progress_reg <= '1';
332
         END IF;
333
      END IF;
334
   END PROCESS make_message_in_progress_reg;
335
 
336
--------------------------------------------------------------------------------
337
--- Here the input fifo handling is defined                                  ---
338
--------------------------------------------------------------------------------
339
   s_pop_byte <= '1' WHEN (s_scpi_state_machine = READ_ONE_COMMAND OR
340
                           (s_scpi_state_machine = FLUSH_MESSAGE AND
341
                            s_message_in_progress_reg = '1')) AND
342
                           pop_empty = '0'
343
                     ELSE '0';
344
 
345
--------------------------------------------------------------------------------
346
--- Here the command buffer handling is defined                              ---
347
--------------------------------------------------------------------------------
348
   s_n_clock                  <= NOT( clock );
349
   s_upcased_char(7 DOWNTO 6) <= pop_data(7 DOWNTO 6);
350
   s_upcased_char(         5) <= pop_data(5) XOR s_is_lower_case;
351
   s_upcased_char(4 DOWNTO 0) <= pop_data(4 DOWNTO 0);
352
   s_command_rom_search_addr( 3 DOWNTO 0 ) <= s_command_buffer_address_reg;
353
 
354
 
355
   s_is_lower_case            <= '1' WHEN
356
                                    (unsigned(pop_data) > unsigned(c_small_a_1)) AND
357
                                    (unsigned(pop_data) < unsigned(c_small_z_1)) ELSE '0';
358
   s_is_command_seperator     <= '1' WHEN pop_data = X"0A" OR
359
                                          pop_data = X"20" OR
360
                                          pop_data = X"3B" ELSE '0';
361
   s_write_byte               <= '1' WHEN
362
                                    (s_is_command_seperator = '0' AND
363
                                     s_pop_byte = '1' AND
364
                                     s_scpi_state_machine = READ_ONE_COMMAND) OR
365
                                    s_scpi_state_machine = INIT_COMMAND_SEARCH_7 ELSE '0';
366
   s_command_too_long         <= '1' WHEN s_is_command_seperator = '0' AND
367
                                          pop_empty = '0' AND
368
                                          s_command_buffer_address_reg = X"F"
369
                                     ELSE '0';
370
   s_command_stored           <= '1' WHEN
371
                                    (s_pop_byte = '1' AND
372
                                     s_is_command_seperator = '1' AND
373
                                     s_command_buffer_address_reg /= X"0")
374
                                     ELSE '0';
375
   s_command_byte             <= X"00" WHEN s_scpi_state_machine = INIT_COMMAND_SEARCH_7
376
                                       ELSE s_upcased_char;
377
   s_rom_data_zero            <= '1' WHEN s_command_rom_data = X"00" ELSE '0';
378
   s_buffer_data_zero         <= '1' WHEN s_command_char = X"00" ELSE '0';
379
   s_command_match            <= s_rom_data_zero AND s_buffer_data_zero;
380
   s_command_smaller          <= '1' WHEN unsigned(s_command_char) <
381
                                          unsigned(s_command_rom_data) ELSE '0';
382
   s_command_bigger           <= '1' WHEN unsigned(s_command_char) >
383
                                          unsigned(s_command_rom_data) ELSE '0';
384
   s_search_command           <= '1' WHEN
385
                                    s_scpi_state_machine = COMMAND_SEARCH_7 OR
386
                                    s_scpi_state_machine = COMMAND_SEARCH_6 OR
387
                                    s_scpi_state_machine = COMMAND_SEARCH_5 OR
388
                                    s_scpi_state_machine = COMMAND_SEARCH_4 OR
389
                                    s_scpi_state_machine = COMMAND_SEARCH_3 OR
390
                                    s_scpi_state_machine = COMMAND_SEARCH_2 OR
391
                                    s_scpi_state_machine = COMMAND_SEARCH_1 OR
392
                                    s_scpi_state_machine = COMMAND_SEARCH_0
393
                                     ELSE '0';
394
 
395
   make_cmd_gen_respons_reg : PROCESS( clock , reset , s_scpi_state_machine ,
396
                                       s_command_byte , s_write_byte )
397
   BEGIN
398
      IF (clock'event AND (clock = '1')) THEN
399
         IF (s_scpi_state_machine = INIT_COMMAND_READ OR
400
            reset = '1') THEN s_cmd_gen_respons_reg <= '0';
401
         ELSIF (s_write_byte = '1' AND
402
            s_command_byte = X"3F") THEN
403
            s_cmd_gen_respons_reg <= '1';
404
         END IF;
405
      END IF;
406
   END PROCESS make_cmd_gen_respons_reg;
407
 
408
   make_command_rom_search_addr_7 : PROCESS( clock , reset ,
409
                                             s_scpi_state_machine ,
410
                                             s_command_smaller )
411
   BEGIN
412
      IF (clock'event AND (clock = '1')) THEN
413
         IF (s_scpi_state_machine = INIT_COMMAND_SEARCH_7 OR
414
             reset = '1') THEN s_command_rom_search_addr(10) <= '1';
415
         ELSIF (s_scpi_state_machine = COMMAND_SEARCH_7 AND
416
                s_command_smaller = '1') THEN
417
            s_command_rom_search_addr(10) <= '0';
418
         END IF;
419
      END IF;
420
   END PROCESS make_command_rom_search_addr_7;
421
 
422
   make_command_rom_search_addr_6 : PROCESS( clock , reset ,
423
                                             s_scpi_state_machine ,
424
                                             s_command_smaller )
425
   BEGIN
426
      IF (clock'event AND (clock = '1')) THEN
427
         IF (s_scpi_state_machine = INIT_COMMAND_SEARCH_7 OR
428
             reset = '1') THEN s_command_rom_search_addr(9) <= '0';
429
         ELSIF (s_scpi_state_machine = INIT_COMMAND_SEARCH_6) THEN
430
            s_command_rom_search_addr(9) <= '1';
431
         ELSIF (s_scpi_state_machine = COMMAND_SEARCH_6 AND
432
                s_command_smaller = '1') THEN
433
            s_command_rom_search_addr(9) <= '0';
434
         END IF;
435
      END IF;
436
   END PROCESS make_command_rom_search_addr_6;
437
 
438
   make_command_rom_search_addr_5 : PROCESS( clock , reset ,
439
                                             s_scpi_state_machine ,
440
                                             s_command_smaller )
441
   BEGIN
442
      IF (clock'event AND (clock = '1')) THEN
443
         IF (s_scpi_state_machine = INIT_COMMAND_SEARCH_7 OR
444
             reset = '1') THEN s_command_rom_search_addr(8) <= '0';
445
         ELSIF (s_scpi_state_machine = INIT_COMMAND_SEARCH_5) THEN
446
            s_command_rom_search_addr(8) <= '1';
447
         ELSIF (s_scpi_state_machine = COMMAND_SEARCH_5 AND
448
                s_command_smaller = '1') THEN
449
            s_command_rom_search_addr(8) <= '0';
450
         END IF;
451
      END IF;
452
   END PROCESS make_command_rom_search_addr_5;
453
 
454
   make_command_rom_search_addr_4 : PROCESS( clock , reset ,
455
                                             s_scpi_state_machine ,
456
                                             s_command_smaller )
457
   BEGIN
458
      IF (clock'event AND (clock = '1')) THEN
459
         IF (s_scpi_state_machine = INIT_COMMAND_SEARCH_7 OR
460
             reset = '1') THEN s_command_rom_search_addr(7) <= '0';
461
         ELSIF (s_scpi_state_machine = INIT_COMMAND_SEARCH_4) THEN
462
            s_command_rom_search_addr(7) <= '1';
463
         ELSIF (s_scpi_state_machine = COMMAND_SEARCH_4 AND
464
                s_command_smaller = '1') THEN
465
            s_command_rom_search_addr(7) <= '0';
466
         END IF;
467
      END IF;
468
   END PROCESS make_command_rom_search_addr_4;
469
 
470
   make_command_rom_search_addr_3 : PROCESS( clock , reset ,
471
                                             s_scpi_state_machine ,
472
                                             s_command_smaller )
473
   BEGIN
474
      IF (clock'event AND (clock = '1')) THEN
475
         IF (s_scpi_state_machine = INIT_COMMAND_SEARCH_7 OR
476
             reset = '1') THEN s_command_rom_search_addr(6) <= '0';
477
         ELSIF (s_scpi_state_machine = INIT_COMMAND_SEARCH_3) THEN
478
            s_command_rom_search_addr(6) <= '1';
479
         ELSIF (s_scpi_state_machine = COMMAND_SEARCH_3 AND
480
                s_command_smaller = '1') THEN
481
            s_command_rom_search_addr(6) <= '0';
482
         END IF;
483
      END IF;
484
   END PROCESS make_command_rom_search_addr_3;
485
 
486
   make_command_rom_search_addr_2 : PROCESS( clock , reset ,
487
                                             s_scpi_state_machine ,
488
                                             s_command_smaller )
489
   BEGIN
490
      IF (clock'event AND (clock = '1')) THEN
491
         IF (s_scpi_state_machine = INIT_COMMAND_SEARCH_7 OR
492
             reset = '1') THEN s_command_rom_search_addr(5) <= '0';
493
         ELSIF (s_scpi_state_machine = INIT_COMMAND_SEARCH_2) THEN
494
            s_command_rom_search_addr(5) <= '1';
495
         ELSIF (s_scpi_state_machine = COMMAND_SEARCH_2 AND
496
                s_command_smaller = '1') THEN
497
            s_command_rom_search_addr(5) <= '0';
498
         END IF;
499
      END IF;
500
   END PROCESS make_command_rom_search_addr_2;
501
 
502
   make_command_rom_search_addr_1 : PROCESS( clock , reset ,
503
                                             s_scpi_state_machine ,
504
                                             s_command_smaller )
505
   BEGIN
506
      IF (clock'event AND (clock = '1')) THEN
507
         IF (s_scpi_state_machine = INIT_COMMAND_SEARCH_7 OR
508
             s_scpi_state_machine = INIT_COMMAND_SEARCH_0 OR
509
             reset = '1') THEN s_command_rom_search_addr(4) <= '0';
510
         ELSIF (s_scpi_state_machine = INIT_COMMAND_SEARCH_1) THEN
511
            s_command_rom_search_addr(4) <= '1';
512
         ELSIF (s_scpi_state_machine = COMMAND_SEARCH_1 AND
513
                s_command_smaller = '1') THEN
514
            s_command_rom_search_addr(4) <= '0';
515
         END IF;
516
      END IF;
517
   END PROCESS make_command_rom_search_addr_1;
518
 
519
   make_command_buffer_address_reg : PROCESS( clock , reset , s_write_byte ,
520
                                              s_scpi_state_machine ,
521
                                              s_search_command )
522
   BEGIN
523
      IF (clock'event AND (clock = '1')) THEN
524
         IF (s_scpi_state_machine = INIT_COMMAND_READ OR
525
             s_scpi_state_machine = INIT_COMMAND_SEARCH_7 OR
526
             s_scpi_state_machine = INIT_COMMAND_SEARCH_6 OR
527
             s_scpi_state_machine = INIT_COMMAND_SEARCH_5 OR
528
             s_scpi_state_machine = INIT_COMMAND_SEARCH_4 OR
529
             s_scpi_state_machine = INIT_COMMAND_SEARCH_3 OR
530
             s_scpi_state_machine = INIT_COMMAND_SEARCH_2 OR
531
             s_scpi_state_machine = INIT_COMMAND_SEARCH_1 OR
532
             s_scpi_state_machine = INIT_COMMAND_SEARCH_0 OR
533
             reset = '1') THEN s_command_buffer_address_reg <= (OTHERS => '0');
534
         ELSIF (s_write_byte = '1' OR
535
                s_search_command = '1') THEN
536
            s_command_buffer_address_reg <= unsigned(s_command_buffer_address_reg) + 1;
537
         END IF;
538
      END IF;
539
   END PROCESS make_command_buffer_address_reg;
540
 
541
   command_buffer : FOR n IN 7 DOWNTO 0 GENERATE
542
      one_bit : RAM16X1S
543
                GENERIC MAP ( INIT => X"0000" )
544
                PORT MAP ( O     => s_command_char(n),
545
                           A0    => s_command_buffer_address_reg(0),
546
                           A1    => s_command_buffer_address_reg(1),
547
                           A2    => s_command_buffer_address_reg(2),
548
                           A3    => s_command_buffer_address_reg(3),
549
                           D     => s_command_byte(n),
550
                           WCLK  => clock,
551
                           WE    => s_write_byte );
552
   END GENERATE command_buffer;
553
 
554
   command_rom : RAMB16_S9
555
      GENERIC MAP ( INIT_00 => X"FFFFFFFFFFFFFFFFFFFF06004553452AFFFFFFFFFFFFFFFFFFFF0200534C432A",
556
                    INIT_01 => X"FFFFFFFFFFFFFFFFFF08003F5253452AFFFFFFFFFFFFFFFFFF07003F4553452A",
557
                    INIT_02 => X"FFFFFFFFFFFFFFFFFF0A003F5453492AFFFFFFFFFFFFFFFFFF09003F4E44492A",
558
                    INIT_03 => X"FFFFFFFFFFFFFFFFFF0C003F43504F2AFFFFFFFFFFFFFFFFFFFF0B0043504F2A",
559
                    INIT_04 => X"FFFFFFFFFFFFFFFFFF0E003F4455502AFFFFFFFFFFFFFFFFFFFF0D004455502A",
560
                    INIT_05 => X"FFFFFFFFFFFFFFFFFFFF10004552532AFFFFFFFFFFFFFFFFFFFF0F005453522A",
561
                    INIT_06 => X"FFFFFFFFFFFFFFFFFF12003F4254532AFFFFFFFFFFFFFFFFFF11003F4552532A",
562
                    INIT_07 => X"FFFFFFFFFFFFFFFFFFFF15004941572AFFFFFFFFFFFFFFFFFF14003F5453542A",
563
                    INIT_08 => X"FFFFFFFFFF17003F4853414C46544942FFFFFFFFFFFF16004853414C46544942",
564
                    INIT_09 => X"FFFFFFFFFFFFFFFF19004749464E4F43FFFFFFFFFFFFFFFF18003F4452414F42",
565
                    INIT_0A => X"FFFFFFFFFFFFFFFFFFFF1B004F464946FFFFFFFFFFFFFFFFFF1A004553415245",
566
                    INIT_0B => X"FFFFFFFFFFFFFFFFFFFF1D0041475046FFFFFFFFFFFFFFFFFF1C003F4F464946",
567
                    INIT_0C => X"FFFFFFFFFF2300484354495753584548FFFFFFFFFFFFFFFFFF1E003F41475046",
568
                    INIT_0D => X"FFFFFFFFFFFF2500594649544E454449FFFFFFFF24003F484354495753584548",
569
                    INIT_0E => X"FFFFFFFFFF3A00544553455252455355FFFFFFFFFFFFFFFFFF3300534E415254",
570
                    INIT_0F => X"FFFFFFFFFF3C005241454C433A414756FFFFFFFFFF3B004C4F4347423A414756",
571
                    INIT_10 => X"FFFFFF3E003F524F535255433A414756FFFFFFFF3D00524F535255433A414756",
572
                    INIT_11 => X"FFFFFFFF40005254535455503A414756FFFFFFFFFF3F004C4F4347463A414756",
573
                    INIT_12 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
574
                    INIT_13 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
575
                    INIT_14 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
576
                    INIT_15 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
577
                    INIT_16 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
578
                    INIT_17 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
579
                    INIT_18 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
580
                    INIT_19 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
581
                    INIT_1A => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
582
                    INIT_1B => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
583
                    INIT_1C => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
584
                    INIT_1D => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
585
                    INIT_1E => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
586
                    INIT_1F => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
587
                    INIT_20 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
588
                    INIT_21 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
589
                    INIT_22 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
590
                    INIT_23 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
591
                    INIT_24 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
592
                    INIT_25 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
593
                    INIT_26 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
594
                    INIT_27 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
595
                    INIT_28 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
596
                    INIT_29 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
597
                    INIT_2A => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
598
                    INIT_2B => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
599
                    INIT_2C => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
600
                    INIT_2D => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
601
                    INIT_2E => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
602
                    INIT_2F => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
603
                    INIT_30 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
604
                    INIT_31 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
605
                    INIT_32 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
606
                    INIT_33 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
607
                    INIT_34 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
608
                    INIT_35 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
609
                    INIT_36 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
610
                    INIT_37 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
611
                    INIT_38 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
612
                    INIT_39 => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
613
                    INIT_3A => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
614
                    INIT_3B => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
615
                    INIT_3C => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
616
                    INIT_3D => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
617
                    INIT_3E => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE",
618
                    INIT_3F => X"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE")
619
      PORT MAP ( DO   => s_command_rom_data,
620
                 DOP  => OPEN,
621
                 ADDR => s_command_rom_search_addr,
622
                 DI   => X"00",
623
                 DIP  => "0",
624
                 EN   => '1',
625
                 WE   => '0',
626
                 CLK  => s_n_clock,
627
                 SSR  => '0' );
628
 
629
 
630
END xilinx;

powered by: WebSVN 2.1.0

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