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

Subversion Repositories gecko3

[/] [gecko3/] [trunk/] [GECKO3COM/] [gecko3com-ip/] [core/] [GECKO3COM_simple_test.vhd] - Blame information for rev 23

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 14 nussgipfel
--  GECKO3COM IP Core
2
--
3 23 nussgipfel
--  Copyright (C) 2010 by
4 14 nussgipfel
--   ___    ___   _   _
5
--  (  _ \ (  __)( ) ( )
6
--  | (_) )| (   | |_| |   Bern University of Applied Sciences
7
--  |  _ < |  _) |  _  |   School of Engineering and
8
--  | (_) )| |   | | | |   Information Technology
9
--  (____/ (_)   (_) (_)
10
--
11
--  This program is free software: you can redistribute it and/or modify
12
--  it under the terms of the GNU General Public License as published by
13
--  the Free Software Foundation, either version 3 of the License, or
14
--  (at your option) any later version.
15
--
16
--  This program is distributed in the hope that it will be useful,
17
--  but WITHOUT ANY WARRANTY; without even the implied warranty of
18
--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19
--  GNU General Public License for more details. 
20
--  You should have received a copy of the GNU General Public License
21
--  along with this program.  If not, see <http://www.gnu.org/licenses/>.
22
--
23
--  URL to the project description: 
24
--    http://labs.ti.bfh.ch/gecko/wiki/systems/gecko3com/start
25 23 nussgipfel
--------------------------------------------------------------------------------
26 14 nussgipfel
--
27
--  Author:  Andreas Habegger, Christoph Zimmermann
28 23 nussgipfel
--  Date of creation: 11. February 2010
29 14 nussgipfel
--  Description:
30 23 nussgipfel
--      Test scenario for the GECKO3com simple IP core.
31
--      (Not the one for Xilinx EDK)
32
--      This test module has two operation mode (selectable by external switch):
33
--      - Send back a response message stored in rom
34
--      - Send back a stream of pseudo random data. Size is defined as a constant
35 14 nussgipfel
--
36
--  Target Devices:     general
37
--  Tool versions:      11.1
38
--  Dependencies:
39
--
40 23 nussgipfel
--------------------------------------------------------------------------------
41 14 nussgipfel
 
42 11 nussgipfel
library ieee;
43
use ieee.std_logic_1164.all;
44
 
45
library work;
46 14 nussgipfel
use work.GECKO3COM_defines.all;
47 11 nussgipfel
 
48 23 nussgipfel
entity GECKO3COM_simple_test is
49 11 nussgipfel
  port (
50 23 nussgipfel
    i_nReset      : in    std_logic;
51
    i_sysclk      : in    std_logic;    -- FPGA System CLK
52
    -- Interface signals to the EZ-USB FX2
53
    i_IFCLK       : in    std_logic;    -- GPIF CLK
54
    i_WRU         : in    std_logic;    -- write from GPIF
55
    i_RDYU        : in    std_logic;    -- GPIF is ready
56
    o_WRX         : out   std_logic;    -- To write to GPIF
57
    o_RDYX        : out   std_logic;    -- IP Core is ready
58
    -- bidirect data bus
59
    b_gpif_bus    : inout std_logic_vector(SIZE_DBUS_GPIF-1 downto 0)
60
    -- simple test "user interface" signals
61
    o_LEDrx       : out   std_logic;    -- controll LED receive data
62
    o_LEDtx       : out   std_logic;    -- controll LED send data
63
    o_LEDrun      : out   std_logic;    -- power LED
64
    i_mode_switch : in    std_logic_vector(2 downto 0));
65
end GECKO3COM_simple_test;
66 11 nussgipfel
 
67
 
68
 
69 23 nussgipfel
architecture behavour of GECKO3COM_simple_test is
70 11 nussgipfel
 
71 23 nussgipfel
  ----------------------------------------------------------------------------- 
72
  --     CONSTANTS  
73
  -----------------------------------------------------------------------------
74
  constant BUSWIDTH : integer := 32; -- you can choose here 32 or 16
75
 
76
  -- lenght of the message stored in the response message rom:
77
  constant c_transfer_size_rom : std_logic_vector(31 downto 0) := x"0000000E";
78
 
79
  -- we will transmitt 1 MiB data when the pseude random number generator
80
  -- is used:
81
  constant c_transfer_size_prng : std_logic_vector(31 downto 0) := x"00100000";
82
 
83 11 nussgipfel
 
84 23 nussgipfel
  ----------------------------------------------------------------------------- 
85
  --     COMPONENTS  
86
  -----------------------------------------------------------------------------
87
  component GECKO3COM_simple
88
    generic (
89
      BUSWIDTH : integer);
90
    port (
91
      i_nReset                 : in    std_logic;
92
      i_sysclk                 : in    std_logic;
93
      i_receive_fifo_rd_en     : in    std_logic;
94
      o_receive_fifo_empty     : out   std_logic;
95
      o_receive_fifo_data      : out   std_logic_vector(BUSWIDTH-1 downto 0);
96
      o_receive_transfersize   : out   std_logic_vector(31 downto 0);
97
      o_receive_end_of_message : out   std_logic;
98
      o_receive_newdata        : out   std_logic;
99
      i_send_fifo_wr_en        : in    std_logic;
100
      o_send_fifo_full         : out   std_logic;
101
      i_send_fifo_data         : in    std_logic_vector(BUSWIDTH-1 downto 0);
102
      i_send_transfersize      : in    std_logic_vector(31 downto 0);
103
      i_send_transfersize_en   : in    std_logic;
104
      i_send_have_more_data    : in    std_logic;
105
      o_send_data_request      : out   std_logic;
106
      o_send_finished          : out   std_logic;
107
      o_rx                     : out   std_logic;
108
      o_tx                     : out   std_logic;
109
      i_IFCLK                  : in    std_logic;
110
      i_WRU                    : in    std_logic;
111
      i_RDYU                   : in    std_logic;
112
      o_WRX                    : out   std_logic;
113
      o_RDYX                   : out   std_logic;
114
      b_gpif_bus               : inout std_logic_vector(SIZE_DBUS_GPIF-1 downto 0));
115
  end component;
116
 
117
 
118
  component response_message_rom
119
    port (
120
      A : in  std_logic_vector(3 downto 0);
121
      D : out std_logic_vector(31 downto 0));
122
  end component;
123 11 nussgipfel
 
124 23 nussgipfel
  -----------------------------------------------------------------------------
125
  -- interconection signals
126
  -----------------------------------------------------------------------------
127 11 nussgipfel
 
128 23 nussgipfel
  signal s_receive_fifo_rd_en     : std_logic;
129
  signal s_receive_fifo_empty     : std_logic;
130
  signal s_receive_fifo_data      : std_logic_vector(BUSWIDTH-1 downto 0);
131
  signal s_receive_transfersize   : std_logic_vector(31 downto 0);
132
  signal s_receive_end_of_message : std_logic;
133
  signal s_receive_newdata        : std_logic;
134
  signal s_send_fifo_wr_en        : std_logic;
135
  signal s_send_fifo_full         : std_logic;
136
  signal s_send_fifo_data         : std_logic_vector(BUSWIDTH-1 downto 0);
137
  signal s_send_transfersize      : std_logic_vector(31 downto 0);
138
  signal s_send_transfersize_en   : std_logic;
139
  signal s_send_have_more_data    : std_logic;
140
  signal s_send_data_request      : std_logic;
141
  signal s_send_finished          : std_logic;
142
 
143
  signal s_mode                              : std_logic_vector(1 downto 0);
144
  signal s_transfer_size_reg_select          : std_logic;
145
  signal s_transfer_size_reg_en              : std_logic;
146
  signal s_have_more_data                    : std_logic;
147
  signal s_send_counter_reset                : std_logic;
148
  signal s_send_counter_en                   : std_logic;
149
  signal s_send_counter_equals_transfer_size : std_logic;
150
  signal s_prng_en                           : std_logic;
151
  signal s_prng_feedback                     : std_logic;
152
  signal s_receive_data_error                : std_logic;
153
 
154
  signal s_receive_data_old        : std_logic_vector(31 downto 0);
155
  signal s_selected_transfer_size  : std_logic_vector(31 downto 0);
156
  signal s_remaining_transfer_size : std_logic_vector(31 downto 0);
157
  signal s_send_counter_value      : std_logic_vector(31 downto 0);
158
  signal s_prng_data               : std_logic_vector(31 downto 0);
159
  signal s_message_rom_data        : std_logic_vector(31 downto 0);
160
 
161
 
162 11 nussgipfel
  -----------------------------------------------------------------------------
163 23 nussgipfel
  -- finite state machine signals
164 11 nussgipfel
  -----------------------------------------------------------------------------
165 23 nussgipfel
    -- XST specific synthesize attributes
166
  attribute safe_implementation: string;
167
  attribute safe_recovery_state: string;
168 11 nussgipfel
 
169 23 nussgipfel
  type t_fsmState is (st1_idle, st2_get_data, st3_load_total_transfer_size,
170
                      st4_save_remaining_transfer_size, st5_send_data,
171
                      st6_send_wait, st7_subtract_transfered_data,
172
                      st8_reset_send_counter);
173 11 nussgipfel
 
174 23 nussgipfel
  signal state, next_state : t_fsmState;
175
 
176
  -- XST specific synthesize attributes
177
  attribute safe_recovery_state of pr_state : signal is "idle";
178
  attribute safe_implementation of pr_state : signal is "yes";
179 14 nussgipfel
 
180
 
181 11 nussgipfel
 
182 23 nussgipfel
begin --  behavour
183 11 nussgipfel
 
184 23 nussgipfel
  GECKO3COM_simple_1: GECKO3COM_simple
185
    generic map (
186
      BUSWIDTH => BUSWIDTH)
187
    port map (
188
      i_nReset                 => i_nReset,
189
      i_sysclk                 => i_sysclk,
190
      i_receive_fifo_rd_en     => s_receive_fifo_rd_en,
191
      o_receive_fifo_empty     => s_receive_fifo_empty,
192
      o_receive_fifo_data      => s_receive_fifo_data,
193
      o_receive_transfersize   => s_receive_transfersize,
194
      o_receive_end_of_message => s_receive_end_of_message,
195
      o_receive_newdata        => s_receive_newdata,
196
      i_send_fifo_wr_en        => s_send_fifo_wr_en,
197
      o_send_fifo_full         => s_send_fifo_full,
198
      i_send_fifo_data         => s_send_fifo_data,
199
      i_send_transfersize      => s_send_transfersize,
200
      i_send_transfersize_en   => s_send_transfersize_en,
201
      i_send_have_more_data    => s_send_have_more_data,
202
      o_send_data_request      => s_send_data_request,
203
      o_send_finished          => s_send_finished,
204
      o_rx                     => o_LEDrx,
205
      o_tx                     => o_LEDtx,
206
      i_IFCLK                  => i_IFCLK,
207
      i_WRU                    => i_WRU,
208
      i_RDYU                   => i_RDYU,
209
      o_WRX                    => o_WRX,
210
      o_RDYX                   => o_RDYX,
211
      b_gpif_bus               => b_gpif_bus);
212 11 nussgipfel
 
213
 
214 23 nussgipfel
  response_message_rom_1: response_message_rom
215
    port map (
216
      A => s_send_counter_value(3 downto 0),
217
      D => s_message_rom_data);
218
 
219
 
220
  o_LEDrun <= '1';
221
 
222
 
223
  -- purpose: converts the mode_switch input to a binary coded value
224
  -- type   : combinational
225
  -- inputs : i_mode_switch
226
  -- outputs: s_mode
227
  mode_switch_decoder: process (i_mode_switch)
228
  begin  -- process mode_switch_decoder
229
    if i_mode_switch = "xx1" then
230
      s_mode <= "00";
231
    elsif i_mode_switch = "x1x" then
232
      s_mode <= "01";
233
    elsif i_mode_switch = "1xx" then
234
      s_mode <= "10";
235
    else
236
      s_mode <= "00";
237 11 nussgipfel
    end if;
238 23 nussgipfel
  end process mode_switch_decoder;
239 11 nussgipfel
 
240
 
241
  -----------------------------------------------------------------------------
242 23 nussgipfel
  -- components needed in the send path
243
  -----------------------------------------------------------------------------
244
 
245
  -- purpose: mulitiplexer to select the send data source
246
  -- type   : combinational
247
  -- inputs : s_mode, s_prng_data, s_message_rom_data
248
  -- outputs: s_send_fifo_data
249
  send_data_mux: process (s_mode, s_prng_data, s_message_rom_data)
250
  begin  -- process send_data_mux
251
    case i_send_mux_sel is
252
      when "00" => s_send_fifo_data <= s_message_rom_data;
253
      when "01" => s_send_fifo_data <= s_prng_data;
254
      when others => s_send_fifo_data <= (others => 'x')
255
    end case;
256
  end process send_data_mux;
257 11 nussgipfel
 
258 23 nussgipfel
 
259
  -- purpose: mulitiplexer to select the send transfer size
260
  -- type   : combinational
261
  -- inputs : s_mode, c_transfer_size_rom, c_transfer_size_prng
262
  -- outputs: s_selected_transfer_size
263
  send_transfersize_mode_mux: process (s_mode, c_transfer_size_rom, c_transfer_size_prng)
264
  begin  -- process send_transfersize_mode_mux
265
    case s_mode is
266
      when "00" => s_selected_transfer_size <= c_transfer_size_rom;
267
      when "01" => s_selected_transfer_size <= c_transfer_size_prng;
268
      when others => s_selected_transfer_size <= (others => 'x')
269
    end case;
270
  end process send_transfersize_mode_mux;
271 11 nussgipfel
 
272
 
273 23 nussgipfel
  -- purpose: stores the initial or remaining transfer size
274
  -- type   : sequential
275
  -- inputs : i_sysclk, i_nReset, s_transfer_size_reg_en, s_transfer_size_reg_select,
276
  --          s_subtract_value
277
  -- outputs: s_remaining_transfer_size
278
  remaining_transfer_size_reg: process (i_sysclk, i_nReset)
279
  begin  -- process current_transfer_size_reg
280
    if i_nReset = '0' then              -- asynchronous reset (active low)
281
      s_remaining_transfer_size <= (others => '0');
282
    elsif i_sysclk'event and i_sysclk = '1' then  -- rising clock edge
283
      if s_transfer_size_reg_en = '1' then
284
        if s_transfer_size_reg_select = '1' then
285
          s_remaining_transfer_size <= s_selected_transfer_size;
286
        else
287
          s_remaining_transfer_size <= s_subtract_value;
288
        end if;
289
      end if;
290
    end if;
291
  end process remaining_transfer_size_reg;
292 11 nussgipfel
 
293 23 nussgipfel
 
294
  -- purpose: mulitiplexer to select the final transfer size for the selected mode
295
  -- type   : combinational
296
  -- inputs : s_mode, c_transfer_size_rom, c_transfer_size_prng
297
  -- outputs: s_selected_transfer_size
298
  send_transfersize_mode_mux: process (s_mode, c_transfer_size_rom, c_transfer_size_prng)
299
  begin  -- process send_transfersize_mode_mux
300
    case s_mode is
301
      when "00" => s_selected_transfer_size <= c_transfer_size_rom;
302
      when "01" => s_selected_transfer_size <= c_transfer_size_prng;
303
      when others => s_selected_transfer_size <= (others => 'x')
304
    end case;
305
  end process send_transfersize_mode_mux;
306 11 nussgipfel
 
307 23 nussgipfel
 
308
  -- maximum alowed transfer size comparator
309
  s_have_more_data <=
310
    '1' when s_remaining_transfer_size > s_receive_transfersize else
311
    '0';
312
 
313
 
314
  -- purpose: mulitiplexer to select the send transfer size
315
  -- type   : combinational
316
  -- inputs : s_have_more_data, s_remaining_transfer_size,
317
  --          s_receive_transfersize
318
  -- outputs: s_send_transfersize
319
  send_transfersize_mux: process (s_have_more_data, s_current_transfer_size,
320
                                  s_receive_transfersize)
321
  begin  -- process send_transfersize_mux
322
    case i_send_mux_sel is
323
      when '0' => s_send_transfersize <= s_remaining_transfer_size;
324
      when '1' => s_send_transfersize <= s_receive_transfersize
325
    end case;
326
  end process send_transfersize_mux;
327
 
328
 
329
  -- purpose: up counter for the send transfer size
330
  -- type   : sequential
331
  -- inputs : i_sysclk, i_nReset, s_send_counter_en, s_send_counter_reset
332
  --          
333
  -- outputs: s_send_counter_value
334
  send_counter : process (i_sysclk, i_nReset)
335
  begin  -- process send_counter
336
    if i_nReset = '0' then              -- asynchronous reset (active low)
337
      s_send_counter_value <= (others => '0');
338
    elsif i_sysclk'event and i_sysclk = '1' then  -- rising clock edge
339
      if i_send_counter_reset = '1' then
340
        s_send_counter_value <= (others => '0');
341 11 nussgipfel
      end if;
342 23 nussgipfel
      if i_send_counter_en = '1' then
343
        s_send_counter_value <= s_send_counter_value + 1;
344
      end if;
345
    end if;
346
  end process send_counter;
347
 
348
  -- transfer size counter comparator
349
  s_send_counter_equals_transfer_size <=
350
    '1' when s_send_counter_value = s_send_transfersize else
351
    '0';
352 11 nussgipfel
 
353
 
354 23 nussgipfel
  -- purpose: subracts the send counter end value from the remaining transfer size value
355
  -- type   : combinational
356
  -- inputs : s_remaining_transfer_size, s_send_counter_value
357
  -- outputs: s_subtract_value
358
  transfer_size_subract: process (s_remaining_transfer_size, s_send_counter_value)
359
  begin  -- process transfer_size_subract
360
    s_subtract_value <= s_remaining_transfer_size - s_send_counter_value;
361
  end process transfer_size_subract;
362 11 nussgipfel
 
363 23 nussgipfel
 
364
 
365
  -----------------------------------------------------------------------------
366
  -- components needed in the receive path
367
  -----------------------------------------------------------------------------
368
 
369
  -- purpose: saves the previous received data word
370
  -- type   : sequential
371
  -- inputs : i_sysclk, i_nReset, s_receive_fifo_data, s_receive_fifo_rd_en
372
  -- outputs: s_receive_fifo_data_old
373
  receive_fifo_data_reg: process (i_sysclk, i_nReset)
374
  begin  -- process receive_fifo_data_reg
375
    if i_nReset = '0' then              -- asynchronous reset (active low)
376
      s_receive_fifo_data_old <= (others => '0');
377
    elsif i_sysclk'event and i_sysclk = '1' then  -- rising clock edge
378
      if s_receive_fifo_rd_en = '1' then
379
        s_receive_fifo_data_old <= s_receive_fifo_data;
380
      end if;
381
    end if;
382
  end process receive_fifo_data_reg;
383
 
384
 
385
  -- receive data comparator
386
  -- (use together with test data with incrementing values)
387
  s_receive_data_error <=
388
    '0' when s_receive_fifo_data_old + 1 = s_receive_fifo_data else
389
    '1';
390
 
391
 
392
  -- purpose: linear shift register for the pseude random number
393
  --          generator (PRNG)
394
  -- type   : sequential
395
  -- inputs : i_sysclk, i_nReset, s_prng_en, s_prng_feedback
396
  -- outputs: s_prng_data
397
  prng_shiftregister: process (i_sysclk, i_nReset)
398
  begin  -- process prng_shiftregister
399
    if i_nReset = '0' then              -- asynchronous reset (active low)
400
      s_prng_data <= "01010101 01010101 01010101 01010101";
401
    elsif i_sysclk'event and i_sysclk = '1' then  -- rising clock edge
402
      if s_prng_en = '1' then
403
        s_prng_data <= s_prng_data(30 downto 0) & s_prng_feedback;
404
      end if;
405
    end if;
406
  end process prng_shiftregister;
407
 
408
  -- purpose: feedback polynom for the pseudo random number generator (PRNG)
409
  -- inputs : s_prng_data
410
  -- outputs: s_prng_feedback
411
  s_prng_feedback <= s_prng_data(15) xor s_prng_data(13) xor s_prng_data(12)
412
                     xor s_prng_data(10);
413
 
414
 
415
  -----------------------------------------------------------------------------
416
  -- finite state machine (moore)
417
  -----------------------------------------------------------------------------
418
 
419
  -- state reg
420
  fsm_state_reg : process(i_sysclk, i_nReset)
421
  begin
422
    if i_nReset = '0' then
423
      state <= st1_idle;
424
    elsif i_sysclk'event and i_sysclk = '1' then
425
        state <= next_state;
426
    end if;
427
  end process fsm_state_reg;
428
 
429
 
430
  -- comb logic
431
  next_state_decode: process(state, s_receive_fifo_empty, s_send_fifo_full,
432
                             s_send_data_request)
433
  begin  -- process next_state_decode
434
 
435
    --declare default state for next_state to avoid latches
436
    next_state <= state;           --default is to stay in current state
437
 
438
    -- default signal values to avoid latches:
439
    s_receive_fifo_rd_en       <= '0';
440
    s_send_transfersize_en     <= '0';
441
    s_send_fifo_wr_en          <= '0';
442
    s_transfer_size_reg_select <= '0';
443
    s_transfer_size_reg_en     <= '0';
444
    s_send_counter_reset       <= '0';
445
    s_send_counter_en          <= '0';
446
    s_prng_en                  <= '0';
447
 
448
    case state is
449
      -- controll
450
 
451
      when st1_idle =>
452
 
453
        if s_receive_fifo_empty = '0' then
454
          next_state <= st2_get_data;
455
        elsif s_send_data_request = '1' then
456
          next_state <= st3_load_total_transfer_size;
457 11 nussgipfel
        end if;
458 23 nussgipfel
 
459
      when st2_get_data =>
460
        s_receive_fifo_rd_en <= '1';
461 11 nussgipfel
 
462 23 nussgipfel
        if s_receive_fifo_empty = '1' then
463
          next_state <= st1_idle;
464
        end if;
465
 
466
      when st3_load_total_transfer_size =>
467
        s_send_counter_reset       <= '1';
468
        s_transfer_size_reg_en     <= '1';
469
        s_transfer_size_reg_select <= '1';
470 11 nussgipfel
 
471 23 nussgipfel
        next_state <= st4_save_remaining_transfer_size;
472
 
473
      when st4_save_remaining_transfer_size =>
474
        s_send_transfersize_en <= '1';
475 11 nussgipfel
 
476 23 nussgipfel
        next_state <= st5_send_data;
477
 
478
      when st5_send_data =>
479
        s_send_fifo_wr_en <= '1';
480
        s_send_counter_en <= '1';
481
        if s_mode = "01" then
482
          s_prng_en <= '1';
483
        end if;
484
 
485
        if s_send_counter_equals_transfer_size = '1' and s_have_more_data = '0' then
486
          next_state <= st1_idle;
487
        elsif s_send_counter_equals_transfer_size = '1' and s_have_more_data = '1' then
488
          next_state <= st7_subtract_transfered_data;
489
        elsif s_send_fifo_full = '1' then
490
          next_state <= st6_send_wait;
491
        end if;
492
 
493
      when st6_send_wait =>
494
 
495
        if s_send_fifo_full = '0' then
496
          next_state <= st5_send_data;
497
        end if;
498
 
499
        when st7_subtract_transfered_data
500
          s_transfer_size_reg_select <= '0';
501
        s_transfer_size_reg_en <= '1';
502
 
503
        if s_send_data_request = '1' then
504
          st8_reset_send_counter;
505
        end if;
506
 
507
      when st8_reset_send_counter =>
508
        s_send_counter_reset <= '1';
509
 
510
        next_state <= st4_save_remaining_transfer_size;
511
 
512
      when others =>
513
        next_state <= st1_idle;
514
    end case;
515
 
516
  end process next_state_decode;
517
 
518
end  behavour;
519
 
520
 
521
----------------------------------------------------------------------------- 
522
--  RESPONSE MESSAGE ROM  
523
-----------------------------------------------------------------------------
524
-- This file was generated with hex2rom written by Daniel Wallner
525
 
526
entity response_message_rom is
527
        port(
528
                A       : in std_logic_vector(3 downto 0);
529
                D       : out std_logic_vector(31 downto 0)
530
        );
531
end response_message_rom;
532
 
533
architecture rtl of response_message_rom is
534
        subtype ROM_WORD is std_logic_vector(31 downto 0);
535
        type ROM_TABLE is array(0 to 3) of ROM_WORD;
536
        signal ROM: ROM_TABLE := ROM_TABLE'(
537
                "00100010001000000010110000110000",     -- 0x0000
538
                "01100101001000000110111101001110",     -- 0x0004
539
                "01110010011011110111001001110010",     -- 0x0008
540
                "00001010000010100000101000100010");    -- 0x000C
541
begin
542
        D <= ROM(to_integer(unsigned(A)));
543
end;

powered by: WebSVN 2.1.0

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