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

Subversion Repositories funbase_ip_library

[/] [funbase_ip_library/] [trunk/] [TUT/] [ip.hwp.interface/] [udp2hibi/] [1.0/] [vhd/] [udp2hibi.vhd] - Blame information for rev 145

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 145 lanttu
-------------------------------------------------------------------------------
2
-- Title      : UDP2HIBI toplevel
3
-- Project    : UDP2HIBI
4
-------------------------------------------------------------------------------
5
-- File       : udp2hibi.vhd
6
-- Author     : Jussi Nieminen
7
-- Last update: 2012-06-20
8
-- Platform   : 
9
-------------------------------------------------------------------------------
10
-- Description: Converter that should be placed between HIBI wrapper and
11
--              UDP_IP block. This is converter's toplevel entity that
12
--              includes 5 sub-blocks.
13
--             
14
--              All blocks wishing to use UDP/IP must first configure
15
--              this unit before sending data, or being able to receive.
16
--              Only one sender can be active at a time.
17
--              Configurations are acknowledged.
18
-------------------------------------------------------------------------------
19
-- Revisions  :
20
-- Date        Version  Author          Description
21
-- 2009/12/15  1.0      niemin95        Created
22
-- 2012-03-23  1.0      ege             Beautifying and commenting.
23
-------------------------------------------------------------------------------
24
 
25
library ieee;
26
use ieee.std_logic_1164.all;
27
use work.udp2hibi_pkg.all;
28
 
29
entity udp2hibi is
30
 
31
  generic (
32
    receiver_table_size_g      : integer := 4;
33
    ack_fifo_depth_g           : integer := 4;
34
    tx_multiclk_fifo_depth_g   : integer := 10;
35
    rx_multiclk_fifo_depth_g   : integer := 10;
36
    hibi_tx_fifo_depth_g       : integer := 10;
37
    hibi_data_width_g          : integer := 32;
38
    hibi_addr_width_g          : integer := 32;
39
    hibi_comm_width_g          : integer := 5;
40
    frequency_g                : integer := 50000000);
41
 
42
  port (
43
    clk               : in  std_logic;
44
    clk_udp           : in  std_logic;
45
    rst_n             : in  std_logic;
46
    -- ** to/from HIBI **
47
    -- receiver
48
    hibi_comm_in      : in  std_logic_vector( hibi_comm_width_g-1 downto 0 );
49
    hibi_data_in      : in  std_logic_vector( hibi_data_width_g-1 downto 0 );
50
    hibi_av_in        : in  std_logic;
51
    hibi_empty_in     : in  std_logic;
52
    hibi_re_out       : out std_logic;
53
    -- sender
54
    hibi_comm_out     : out std_logic_vector( hibi_comm_width_g-1 downto 0 );
55
    hibi_data_out     : out std_logic_vector( hibi_data_width_g-1 downto 0 );
56
    hibi_av_out       : out std_logic;
57
    hibi_we_out       : out std_logic;
58
    hibi_full_in      : in  std_logic;
59
    -- ** to/from UDP/IP **
60
    -- tx
61
    tx_data_out       : out std_logic_vector( udp_block_data_w_c-1 downto 0 );
62
    tx_data_valid_out : out std_logic;
63
    tx_re_in          : in  std_logic;
64
    new_tx_out        : out std_logic;
65
    tx_len_out        : out std_logic_vector( tx_len_w_c-1 downto 0 );
66
    dest_ip_out       : out std_logic_vector( ip_addr_w_c-1 downto 0 );
67
    dest_port_out     : out std_logic_vector( udp_port_w_c-1 downto 0 );
68
    source_port_out   : out std_logic_vector( udp_port_w_c-1 downto 0 );
69
    -- rx
70
    rx_data_in        : in  std_logic_vector( udp_block_data_w_c-1 downto 0 );
71
    rx_data_valid_in  : in  std_logic;
72
    rx_re_out         : out std_logic;
73
    new_rx_in         : in  std_logic;
74
    rx_len_in         : in  std_logic_vector( tx_len_w_c-1 downto 0 );
75
    source_ip_in      : in  std_logic_vector( ip_addr_w_c-1 downto 0 );
76
    dest_port_in      : in  std_logic_vector( udp_port_w_c-1 downto 0 );
77
    source_port_in    : in  std_logic_vector( udp_port_w_c-1 downto 0 );
78
    rx_erroneous_in   : in  std_logic;
79
    -- from eth controller
80
    eth_link_up_in    : in  std_logic
81
    );
82
 
83
end udp2hibi;
84
 
85
 
86
architecture structural of udp2hibi is
87
 
88
  -- hibi_receiver <-> tx_ctrl
89
  signal tx_data_receiver_txctrl    : std_logic_vector( udp_block_data_w_c-1 downto 0 );
90
  signal tx_we_receiver_txctrl      : std_logic;
91
  signal tx_full_txctrl_receiver    : std_logic;
92
  signal new_tx_receiver_txctrl     : std_logic;
93
  signal tx_len_receiver_txctrl     : std_logic_vector( tx_len_w_c-1 downto 0 );
94
  signal new_tx_ack_txctrl_receiver : std_logic;
95
  signal timeout_receiver_txctrl    : std_logic_vector( timeout_w_c-1 downto 0 );
96
  signal timeout_txctrl_receiver    : std_logic;
97
 
98
  -- hibi_receiver <-> ctrl_regs
99
  signal release_lock_receiver_regs  : std_logic;
100
  signal new_tx_conf_receiver_regs   : std_logic;
101
  signal new_rx_conf_receiver_regs   : std_logic;
102
  signal ip_receiver_regs            : std_logic_vector( ip_addr_w_c-1 downto 0 );
103
  signal dest_port_receiver_regs     : std_logic_vector( udp_port_w_c-1 downto 0 );
104
  signal source_port_receiver_regs   : std_logic_vector( udp_port_w_c-1 downto 0 );
105
  signal lock_addr_receiver_regs     : std_logic_vector( hibi_addr_width_g-1 downto 0 );
106
  signal response_addr_receiver_regs : std_logic_vector( hibi_addr_width_g-1 downto 0 );
107
  signal lock_regs_receiver          : std_logic;
108
  signal lock_addr_regs_receiver     : std_logic_vector( hibi_addr_width_g-1 downto 0 );
109
 
110
  -- ctrl_regs <-> tx_ctrl
111
  signal ip_regs_txctrl              : std_logic_vector( ip_addr_w_c-1 downto 0 );
112
  signal dest_port_regs_txctrl       : std_logic_vector( udp_port_w_c-1 downto 0 );
113
  signal source_port_regs_txctrl     : std_logic_vector( udp_port_w_c-1 downto 0 );
114
  signal timeout_release_txctrl_regs : std_logic;
115
 
116
  -- ctrl_regs <-> rx_ctrl
117
  signal ip_rxctrl_regs            : std_logic_vector( ip_addr_w_c-1 downto 0 );
118
  signal dest_port_rxctrl_regs     : std_logic_vector( udp_port_w_c-1 downto 0 );
119
  signal source_port_rxctrl_regs   : std_logic_vector( udp_port_w_c-1 downto 0 );
120
  signal rx_addr_valid_regs_rxctrl : std_logic;
121
 
122
  -- ctrl_regs <-> hibi_transmitter
123
  signal ack_addr_regs_transmitter     : std_logic_vector( hibi_addr_width_g-1 downto 0 );
124
  signal rx_addr_regs_transmitter      : std_logic_vector( hibi_addr_width_g-1 downto 0 );
125
  signal send_tx_ack_regs_transmitter  : std_logic;
126
  signal send_tx_nack_regs_transmitter : std_logic;
127
  signal send_rx_ack_regs_transmitter  : std_logic;
128
  signal send_rx_nack_regs_transmitter : std_logic;
129
 
130
  -- rx_ctrl <-> hibi_transmitter
131
  signal send_request_rxctrl_transmitter : std_logic;
132
  signal rx_len_rxctrl_transmitter       : std_logic_vector( tx_len_w_c-1 downto 0 );
133
  signal ready_for_tx_transmitter_rxctrl : std_logic;
134
  signal rx_empty_rxctrl_transmitter     : std_logic;
135
  signal rx_data_rxctrl_transmitter      : std_logic_vector( hibi_data_width_g-1 downto 0 );
136
  signal rx_re_transmitter_rxctrl        : std_logic;
137
 
138
 
139
-------------------------------------------------------------------------------
140
begin  -- structural
141
-------------------------------------------------------------------------------
142
 
143
  --
144
  --          +---------------------------------+----------+
145
  --          |                                 |          |
146
  --  (hibi) ---> hibi receiver   -->  tx ctrl ---> udp/ip --> eth
147
  --          |              \         /        |          |
148
  --          |               ctrl regs         |          |
149
  --          |              /        \         |          |
150
  --  (hibi)<--- hibi transmitter --> rx ctrl  <--- udp/ip <-- eth
151
  --          |                                 |          |
152
  --          +---------------------------------+----------+
153
  -- 
154
 
155
 
156
 
157
  -- Gets configurations and data from hibi. Forwards them to ctrl-reg and tx-ctrl
158
  hibi_receiver_block : entity work.hibi_receiver
159
    generic map (
160
      hibi_comm_width_g => hibi_comm_width_g,
161
      hibi_addr_width_g => hibi_addr_width_g,
162
      hibi_data_width_g => hibi_data_width_g
163
      )
164
    port map (
165
      clk               => clk,
166
      rst_n             => rst_n,
167
 
168
      hibi_comm_in      => hibi_comm_in,
169
      hibi_data_in      => hibi_data_in,
170
      hibi_av_in        => hibi_av_in,
171
      hibi_re_out       => hibi_re_out,
172
      hibi_empty_in     => hibi_empty_in,
173
 
174
      tx_data_out       => tx_data_receiver_txctrl,
175
      tx_we_out         => tx_we_receiver_txctrl,
176
      tx_full_in        => tx_full_txctrl_receiver,
177
      new_tx_out        => new_tx_receiver_txctrl,
178
      tx_length_out     => tx_len_receiver_txctrl,
179
      new_tx_ack_in     => new_tx_ack_txctrl_receiver,
180
      timeout_out       => timeout_receiver_txctrl,
181
      timeout_in        => timeout_txctrl_receiver,
182
 
183
      release_lock_out  => release_lock_receiver_regs,
184
      new_tx_conf_out   => new_tx_conf_receiver_regs,
185
      new_rx_conf_out   => new_rx_conf_receiver_regs,
186
      ip_out            => ip_receiver_regs,
187
      dest_port_out     => dest_port_receiver_regs,
188
      source_port_out   => source_port_receiver_regs,
189
      lock_addr_out     => lock_addr_receiver_regs,
190
      response_addr_out => response_addr_receiver_regs,
191
      lock_in           => lock_regs_receiver,
192
      lock_addr_in      => lock_addr_regs_receiver
193
      );
194
 
195
 
196
  -- Stores the configurations
197
  ctrl_regs_block : entity work.ctrl_regs
198
    generic map (
199
      receiver_table_size_g => receiver_table_size_g,
200
      hibi_addr_width_g     => hibi_addr_width_g
201
      )
202
    port map (
203
      clk                   => clk,
204
      rst_n                 => rst_n,
205
 
206
      release_lock_in       => release_lock_receiver_regs,
207
      new_tx_conf_in        => new_tx_conf_receiver_regs,
208
      new_rx_conf_in        => new_rx_conf_receiver_regs,
209
      ip_in                 => ip_receiver_regs,
210
      dest_port_in          => dest_port_receiver_regs,
211
      source_port_in        => source_port_receiver_regs,
212
      lock_addr_in          => lock_addr_receiver_regs,
213
      response_addr_in      => response_addr_receiver_regs,
214
      lock_out              => lock_regs_receiver,
215
      lock_addr_out         => lock_addr_regs_receiver,
216
 
217
      tx_ip_out             => ip_regs_txctrl,
218
      tx_dest_port_out      => dest_port_regs_txctrl,
219
      tx_source_port_out    => source_port_regs_txctrl,
220
      timeout_release_in    => timeout_release_txctrl_regs,
221
 
222
      rx_ip_in              => ip_rxctrl_regs,
223
      rx_dest_port_in       => dest_port_rxctrl_regs,
224
      rx_source_port_in     => source_port_rxctrl_regs,
225
      rx_addr_valid_out     => rx_addr_valid_regs_rxctrl,
226
 
227
      ack_addr_out          => ack_addr_regs_transmitter,
228
      rx_addr_out           => rx_addr_regs_transmitter,
229
      send_tx_ack_out       => send_tx_ack_regs_transmitter,
230
      send_tx_nack_out      => send_tx_nack_regs_transmitter,
231
      send_rx_ack_out       => send_rx_ack_regs_transmitter,
232
      send_rx_nack_out      => send_rx_nack_regs_transmitter,
233
      eth_link_up_in        => eth_link_up_in
234
      );
235
 
236
 
237
  -- Forwads data to ucp/ip
238
  tx_ctrl_block : entity work.tx_ctrl
239
    generic map (
240
      multiclk_fifo_depth_g => tx_multiclk_fifo_depth_g,
241
      frequency_g           => frequency_g
242
      )
243
    port map (
244
      clk                 => clk,
245
      clk_udp             => clk_udp,
246
      rst_n               => rst_n,
247
      tx_data_in          => tx_data_receiver_txctrl,
248
      tx_we_in            => tx_we_receiver_txctrl,
249
      tx_full_out         => tx_full_txctrl_receiver,
250
      tx_data_out         => tx_data_out,
251
      tx_data_valid_out   => tx_data_valid_out,
252
      tx_re_in            => tx_re_in,
253
 
254
      new_tx_out          => new_tx_out,
255
      tx_len_out          => tx_len_out,
256
      dest_ip_out         => dest_ip_out,
257
      dest_port_out       => dest_port_out,
258
      source_port_out     => source_port_out,
259
 
260
      new_tx_in           => new_tx_receiver_txctrl,
261
      tx_len_in           => tx_len_receiver_txctrl,
262
      new_tx_ack_out      => new_tx_ack_txctrl_receiver,
263
      timeout_in          => timeout_receiver_txctrl,
264
      timeout_to_hr_out   => timeout_txctrl_receiver,
265
 
266
      tx_ip_in            => ip_regs_txctrl,
267
      tx_dest_port_in     => dest_port_regs_txctrl,
268
      tx_source_port_in   => source_port_regs_txctrl,
269
      timeout_release_out => timeout_release_txctrl_regs
270
      );
271
 
272
 
273
  -- Gets data from udp/ip. Forwards it to hibi-transmitter.
274
  rx_ctrl_block : entity work.rx_ctrl
275
    generic map (
276
        rx_multiclk_fifo_depth_g => rx_multiclk_fifo_depth_g,
277
        tx_fifo_depth_g          => hibi_tx_fifo_depth_g,
278
        hibi_data_width_g        => hibi_data_width_g,
279
        frequency_g              => frequency_g
280
        )
281
    port map (
282
        clk              => clk,
283
        clk_udp          => clk_udp,
284
        rst_n            => rst_n,
285
 
286
        rx_data_in       => rx_data_in,
287
        rx_data_valid_in => rx_data_valid_in,
288
        rx_re_out        => rx_re_out,
289
        new_rx_in        => new_rx_in,
290
        rx_len_in        => rx_len_in,
291
        source_ip_in     => source_ip_in,
292
        dest_port_in     => dest_port_in,
293
        source_port_in   => source_port_in,
294
        rx_erroneous_in  => rx_erroneous_in,
295
 
296
        ip_out           => ip_rxctrl_regs,
297
        dest_port_out    => dest_port_rxctrl_regs,
298
        source_port_out  => source_port_rxctrl_regs,
299
        rx_addr_valid_in => rx_addr_valid_regs_rxctrl,
300
 
301
        send_request_out => send_request_rxctrl_transmitter,
302
        rx_len_out       => rx_len_rxctrl_transmitter,
303
        ready_for_tx_in  => ready_for_tx_transmitter_rxctrl,
304
        rx_empty_out     => rx_empty_rxctrl_transmitter,
305
        rx_data_out      => rx_data_rxctrl_transmitter,
306
        rx_re_in         => rx_re_transmitter_rxctrl
307
        );
308
 
309
 
310
  -- Gets data from rx-ctrl and writes them to hibi
311
  hibi_transmitter_block : entity work.hibi_transmitter
312
    generic map (
313
        hibi_data_width_g => hibi_data_width_g,
314
        hibi_addr_width_g => hibi_addr_width_g,
315
        hibi_comm_width_g => hibi_comm_width_g,
316
        ack_fifo_depth_g  => ack_fifo_depth_g
317
        )
318
    port map (
319
        clk              => clk,
320
        rst_n            => rst_n,
321
        hibi_comm_out    => hibi_comm_out,
322
        hibi_data_out    => hibi_data_out,
323
        hibi_av_out      => hibi_av_out,
324
        hibi_we_out      => hibi_we_out,
325
        hibi_full_in     => hibi_full_in,
326
 
327
        send_request_in  => send_request_rxctrl_transmitter,
328
        rx_len_in        => rx_len_rxctrl_transmitter,
329
        ready_for_tx_out => ready_for_tx_transmitter_rxctrl,
330
        rx_empty_in      => rx_empty_rxctrl_transmitter,
331
        rx_data_in       => rx_data_rxctrl_transmitter,
332
        rx_re_out        => rx_re_transmitter_rxctrl,
333
        rx_addr_in       => rx_addr_regs_transmitter,
334
 
335
        ack_addr_in      => ack_addr_regs_transmitter,
336
        send_tx_ack_in   => send_tx_ack_regs_transmitter,
337
        send_tx_nack_in  => send_tx_nack_regs_transmitter,
338
        send_rx_ack_in   => send_rx_ack_regs_transmitter,
339
        send_rx_nack_in  => send_rx_nack_regs_transmitter
340
        );
341
 
342
 
343
end structural;

powered by: WebSVN 2.1.0

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