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

Subversion Repositories fade_ether_protocol

[/] [fade_ether_protocol/] [trunk/] [stable_jumbo_frames_version/] [fpga/] [src/] [fade_one_channel.vhd] - Blame information for rev 42

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 27 wzab
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
use work.pkt_ack_pkg.all;
5
use work.desc_mgr_pkg.all;
6
library unisim;
7
use unisim.vcomponents.all;
8 42 wzab
library work;
9 27 wzab
 
10
entity fade_one_channel is
11
  generic (
12
    my_mac : std_logic_vector(47 downto 0));
13
  port (
14 42 wzab
    xgmii_txd : out std_logic_vector(63 downto 0);
15
    xgmii_txc : out std_logic_vector(7 downto 0);
16
    xgmii_rxd : in  std_logic_vector(63 downto 0);
17
    xgmii_rxc : in  std_logic_vector(7 downto 0);
18
    rst_n     : in  std_logic;
19
    clk_user  : in  std_logic
20 27 wzab
    );
21
 
22
end fade_one_channel;
23
 
24
architecture beh1 of fade_one_channel is
25
 
26
  --signal heart_bit : integer := 0;
27
 
28
  --signal refclk_p                 : std_logic := '0';
29
  --signal refclk_n                 : std_logic := '0';
30
  --signal reset                    : std_logic := '0';
31
  --signal clk_rst_buf, clk_rst_156 : std_logic := '1';  -- generated reset
32
  --signal rst_p                    : std_logic := '1';  -- generated reset
33
  --signal rst_cnt                  : integer   := 200000000;
34
 
35
 
36
  --signal s_resetdone                   : std_logic                      := '0';
37
  --signal core_clk156_out               : std_logic                      := '0';
38
  --signal txp                           : std_logic                      := '0';
39
  --signal txn                           : std_logic                      := '0';
40
  --signal rxp                           : std_logic                      := '0';
41
  --signal rxn                           : std_logic                      := '0';
42
  --signal dclk_out                      : std_logic                      := '0';
43
  --signal s_txusrclk_out                : std_logic                      := '0';
44
  --signal s_txusrclk2_out               : std_logic                      := '0';
45
  --signal areset_clk156_out             : std_logic                      := '0';
46
  --signal gttxreset_out                 : std_logic                      := '0';
47
  --signal gtrxreset_out                 : std_logic                      := '0';
48
  --signal txuserrdy_out                 : std_logic                      := '0';
49
  --signal reset_counter_done_out        : std_logic                      := '0';
50
  --signal qplllock_out                  : std_logic                      := '0';
51
  --signal qplloutclk_out                : std_logic                      := '0';
52
  --signal qplloutrefclk_out             : std_logic                      := '0';
53
  --signal xgmii_txd, xgmii_txd1         : std_logic_vector(63 downto 0)  := (others => '0');
54
  --signal xgmii_txc, xgmii_txc1         : std_logic_vector(7 downto 0)   := (others => '0');
55
  --signal xgmii_rxd, xgmii_rxd1         : std_logic_vector(63 downto 0)  := (others => '0');
56
  --signal xgmii_rxc, xgmii_rxc1         : std_logic_vector(7 downto 0)   := (others => '0');
57
  --signal configuration_vector          : std_logic_vector(535 downto 0) := (others => '0');
58
  --signal status_vector, status_vector1 : std_logic_vector(447 downto 0) := (others => '0');
59
  --signal core_status, core_status1     : std_logic_vector(7 downto 0)   := (others => '0');
60
  --signal signal_detect, signal_detect1 : std_logic                      := '0';
61
  --signal tx_fault, tx_fault1           : std_logic                      := '0';
62
  --signal drp_req, drp_req1             : std_logic                      := '0';
63
  --signal drp_gnt, drp_gnt1             : std_logic                      := '0';
64
  --signal drp_den_o, drp_den1_o         : std_logic                      := '0';
65
  --signal drp_dwe_o, drp_dwe1_o         : std_logic                      := '0';
66
  --signal drp_daddr_o, drp_daddr1_o     : std_logic_vector(15 downto 0)  := (others => '0');
67
  --signal drp_di_o, drp_di1_o           : std_logic_vector(15 downto 0)  := (others => '0');
68
  --signal drp_drdy_o, drp_drdy1_o       : std_logic                      := '0';
69
  --signal drp_drpdo_o, drp_drpdo1_o     : std_logic_vector(15 downto 0)  := (others => '0');
70
  --signal drp_den_i, drp_den1_i         : std_logic                      := '0';
71
  --signal drp_dwe_i, drp_dwe1_i         : std_logic                      := '0';
72
  --signal drp_daddr_i, drp_daddr1_i     : std_logic_vector(15 downto 0)  := (others => '0');
73
  --signal drp_di_i, drp_di1_i           : std_logic_vector(15 downto 0)  := (others => '0');
74
  --signal drp_drdy_i, drp_drdy1_i       : std_logic                      := '0';
75
  --signal drp_drpdo_i, drp_drpdo1_i     : std_logic_vector(15 downto 0)  := (others => '0');
76
  --signal tx_disable, tx_disable1       : std_logic                      := '0';
77
 
78
  --signal counter              : integer   := 0;
79
  --signal probe2               : std_logic_vector(2 downto 0);
80
  --signal trig_in, trig_in_ack : std_logic := '0';
81
  --signal rst_n, rst1, clk1    : std_logic := '0';
82 42 wzab
  signal clk1 : std_logic := '0';
83 27 wzab
  --signal hb_led               : std_logic := '0';
84
  --signal s_led5               : std_logic := '0';
85
 
86
  ---- Signals associated with the FADE core
87
  ----signal my_mac                   : std_logic_vector(47 downto 0);
88
  --signal sender                   : std_logic_vector(47 downto 0);
89
  signal peer_mac                 : std_logic_vector(47 downto 0);
90
  constant my_ether_type          : std_logic_vector(15 downto 0) := x"fade";
91
  signal transm_delay             : unsigned(31 downto 0);
92
  signal retr_count               : std_logic_vector(31 downto 0);
93
  signal restart                  : std_logic;
94
  signal fade_rst_n, fade_rst_del : std_logic                     := '0';
95
  signal fade_rst_p               : std_logic;
96
 
97
  signal test_dta                          : unsigned(63 downto 0);
98
  signal dta                               : std_logic_vector(63 downto 0);
99
  signal s_dta_we, dta_we                  : std_logic                         := '0';
100
  signal dta_ready                         : std_logic;
101
  signal snd_start                         : std_logic;
102
  signal flushed                           : std_logic                         := '0';
103
  signal dta_eod                           : std_logic                         := '0';
104
  signal snd_ready                         : std_logic;
105
  --signal clk_user                          : std_logic;
106
  signal dmem_we                           : std_logic;
107
  signal dmem_addr                         : std_logic_vector(LOG2_N_OF_PKTS+LOG2_NWRDS_IN_PKT-1 downto 0);
108
  signal dmem_dta                          : std_logic_vector(63 downto 0);
109
  signal tx_mem_addr                       : std_logic_vector(LOG2_N_OF_PKTS+LOG2_NWRDS_IN_PKT-1 downto 0);
110
  signal tx_mem_data                       : std_logic_vector(63 downto 0);
111
  signal pkt_number                        : unsigned(31 downto 0);
112
  signal seq_number                        : unsigned(15 downto 0)             := (others => '0');
113
  --signal start_pkt, stop_pkt               : unsigned(7 downto 0)              := (others => '0');
114
  ---- signals related to user commands handling
115
  signal cmd_response_in, cmd_response_out : std_logic_vector(12*8-1 downto 0) := (others => '0');
116
  signal cmd_start                         : std_logic                         := '0';
117
  signal cmd_run                           : std_logic                         := '0';
118
  signal cmd_retr_s                        : std_logic                         := '0';
119
  signal cmd_ack                           : std_logic                         := '0';
120
  signal cmd_code                          : std_logic_vector(15 downto 0)     := (others => '0');
121
  signal cmd_seq                           : std_logic_vector(15 downto 0)     := (others => '0');
122
  signal cmd_arg                           : std_logic_vector(31 downto 0)     := (others => '0');
123
 
124
 
125
  ---- debug signals
126
  signal dbg    : std_logic_vector(3 downto 0);
127
  signal rx_cmd : std_logic_vector(31 downto 0);
128
  signal rx_arg : std_logic_vector(31 downto 0);
129
 
130
  signal ack_fifo_din, ack_fifo_dout                                   : std_logic_vector(pkt_ack_width-1 downto 0);
131
  signal ack_fifo_wr_en, ack_fifo_rd_en, ack_fifo_empty, ack_fifo_full : std_logic;
132
  --signal ack_fifo_dbg                                                  : pkt_ack;
133
  signal transmit_data, td_del0, td_del1                               : std_logic := '0';
134
 
135
  component eth_receiver is
136
    port (
137
      peer_mac       : out std_logic_vector(47 downto 0);
138
      my_mac         : in  std_logic_vector(47 downto 0);
139
      my_ether_type  : in  std_logic_vector(15 downto 0);
140
      transmit_data  : out std_logic;
141
      restart        : out std_logic;
142
      ack_fifo_full  : in  std_logic;
143
      ack_fifo_wr_en : out std_logic;
144
      ack_fifo_din   : out std_logic_vector(pkt_ack_width-1 downto 0);
145
      clk            : in  std_logic;
146
      rst_n          : in  std_logic;
147
      dbg            : out std_logic_vector(3 downto 0);
148
      crc            : out std_logic_vector(31 downto 0);
149
      cmd            : out std_logic_vector(31 downto 0);
150
      arg            : out std_logic_vector(31 downto 0);
151
      Rx_Clk         : in  std_logic;
152
      RxC            : in  std_logic_vector(7 downto 0);
153
      RxD            : in  std_logic_vector(63 downto 0));
154
  end component eth_receiver;
155
 
156
  component eth_sender is
157
    port (
158
      peer_mac      : in  std_logic_vector(47 downto 0);
159
      my_mac        : in  std_logic_vector(47 downto 0);
160
      my_ether_type : in  std_logic_vector(15 downto 0);
161
      pkt_number    : in  unsigned(31 downto 0);
162
      seq_number    : in  unsigned(15 downto 0);
163
      transm_delay  : in  unsigned(31 downto 0);
164
      clk           : in  std_logic;
165
      rst_n         : in  std_logic;
166
      ready         : out std_logic;
167
      flushed       : in  std_logic;
168
      start         : in  std_logic;
169
      cmd_start     : in  std_logic;
170
      tx_mem_addr   : out std_logic_vector(LOG2_N_OF_PKTS+LOG2_NWRDS_IN_PKT-1 downto 0);
171
      tx_mem_data   : in  std_logic_vector(63 downto 0);
172
      cmd_response  : in  std_logic_vector(12*8-1 downto 0);
173
      Tx_Clk        : in  std_logic;
174
      TxC           : out std_logic_vector(7 downto 0);
175
      TxD           : out std_logic_vector(63 downto 0));
176
  end component eth_sender;
177
 
178
  component dp_ram_scl
179
    generic (
180
      DATA_WIDTH : integer;
181
      ADDR_WIDTH : integer);
182
    port (
183
      clk_a  : in  std_logic;
184
      we_a   : in  std_logic;
185
      addr_a : in  std_logic_vector(ADDR_WIDTH-1 downto 0);
186
      data_a : in  std_logic_vector(DATA_WIDTH-1 downto 0);
187
      q_a    : out std_logic_vector(DATA_WIDTH-1 downto 0);
188
      clk_b  : in  std_logic;
189
      we_b   : in  std_logic;
190
      addr_b : in  std_logic_vector(ADDR_WIDTH-1 downto 0);
191
      data_b : in  std_logic_vector(DATA_WIDTH-1 downto 0);
192
      q_b    : out std_logic_vector(DATA_WIDTH-1 downto 0));
193
  end component;
194
 
195
  component ack_fifo
196
    port (
197
      rst    : in  std_logic;
198
      wr_clk : in  std_logic;
199
      rd_clk : in  std_logic;
200
      din    : in  std_logic_vector(pkt_ack_width-1 downto 0);
201
      wr_en  : in  std_logic;
202
      rd_en  : in  std_logic;
203
      dout   : out std_logic_vector(pkt_ack_width-1 downto 0);
204
      full   : out std_logic;
205
      empty  : out std_logic);
206
  end component;
207
 
208
  component cmd_proc is
209
    port (
210
      cmd_code     : in  std_logic_vector(15 downto 0);
211
      cmd_seq      : in  std_logic_vector(15 downto 0);
212
      cmd_arg      : in  std_logic_vector(31 downto 0);
213
      cmd_run      : in  std_logic;
214
      cmd_ack      : out std_logic;
215
      cmd_response : out std_logic_vector(8*12-1 downto 0);
216
      clk          : in  std_logic;
217
      rst_p        : in  std_logic;
218
      retr_count   : in  std_logic_vector(31 downto 0)
219
      );
220
  end component cmd_proc;
221
 
222
  component desc_manager is
223
    generic (
224
      LOG2_N_OF_PKTS : integer;
225
      N_OF_PKTS      : integer);
226
    port (
227
      dta              : in  std_logic_vector(63 downto 0);
228
      dta_we           : in  std_logic;
229
      dta_ready        : out std_logic;
230
      dta_eod          : in  std_logic;
231
      pkt_number       : out unsigned(31 downto 0);
232
      seq_number       : out unsigned(15 downto 0);
233
      cmd_response_out : out std_logic_vector(12*8-1 downto 0);
234
      snd_cmd_start    : out std_logic;
235
      snd_start        : out std_logic;
236
      snd_ready        : in  std_logic;
237
      flushed          : out std_logic;
238
      dmem_addr        : out std_logic_vector(LOG2_NWRDS_IN_PKT+LOG2_N_OF_PKTS-1 downto 0);
239
      dmem_dta         : out std_logic_vector(63 downto 0);
240
      dmem_we          : out std_logic;
241
      ack_fifo_empty   : in  std_logic;
242
      ack_fifo_rd_en   : out std_logic;
243
      ack_fifo_dout    : in  std_logic_vector(pkt_ack_width-1 downto 0);
244
      cmd_code         : out std_logic_vector(15 downto 0);
245
      cmd_seq          : out std_logic_vector(15 downto 0);
246
      cmd_arg          : out std_logic_vector(31 downto 0);
247
      cmd_run          : out std_logic;
248
      cmd_retr_s       : out std_logic;
249
      cmd_ack          : in  std_logic;
250
      cmd_response_in  : in  std_logic_vector(8*12-1 downto 0);
251
      transmit_data    : in  std_logic;
252
      transm_delay     : out unsigned(31 downto 0);
253
      retr_count       : out std_logic_vector(31 downto 0);
254
      dbg              : out std_logic_vector(3 downto 0);
255
      clk              : in  std_logic;
256
      rst_n            : in  std_logic);
257
  end component desc_manager;
258
 
259
begin  -- beh1
260
 
261
 
262 42 wzab
  clk1 <= clk_user;
263 27 wzab
 
264 42 wzab
 
265 27 wzab
  --addr_b <= to_integer(unsigned(tx_mem_addr));
266
 
267
  dp_ram_scl_1 : dp_ram_scl
268
    generic map (
269
      DATA_WIDTH => 64,
270
      ADDR_WIDTH => LOG2_N_OF_PKTS+LOG2_NWRDS_IN_PKT)
271
    port map (
272
      clk_a  => clk_user,
273
      we_a   => dmem_we,
274
      addr_a => dmem_addr,
275
      data_a => dmem_dta,
276
      q_a    => open,
277
      clk_b  => clk1,
278
      we_b   => '0',
279
      addr_b => tx_mem_addr,
280
      data_b => (others => '0'),
281
      q_b    => tx_mem_data);
282
 
283
  desc_manager_1 : desc_manager
284
    generic map (
285
      LOG2_N_OF_PKTS => LOG2_N_OF_PKTS,
286
      N_OF_PKTS      => N_OF_PKTS)
287
    port map (
288
      dta              => dta,
289
      dta_we           => dta_we,
290
      dta_eod          => dta_eod,
291
      dta_ready        => dta_ready,
292
      pkt_number       => pkt_number,
293
      seq_number       => seq_number,
294
      cmd_response_out => cmd_response_out,
295
      snd_cmd_start    => cmd_start,
296
      snd_start        => snd_start,
297
      flushed          => flushed,
298
      snd_ready        => snd_ready,
299
      dmem_addr        => dmem_addr,
300
      dmem_dta         => dmem_dta,
301
      dmem_we          => dmem_we,
302
      ack_fifo_empty   => ack_fifo_empty,
303
      ack_fifo_rd_en   => ack_fifo_rd_en,
304
      ack_fifo_dout    => ack_fifo_dout,
305
      cmd_code         => cmd_code,
306
      cmd_seq          => cmd_seq,
307
      cmd_arg          => cmd_arg,
308
      cmd_run          => cmd_run,
309
      cmd_retr_s       => cmd_retr_s,
310
      cmd_ack          => cmd_ack,
311
      cmd_response_in  => cmd_response_in,
312
      transmit_data    => transmit_data,
313
      transm_delay     => transm_delay,
314
      retr_count       => retr_count,
315
      dbg              => dbg,
316
      clk              => clk_user,
317
      rst_n            => fade_rst_n);
318
 
319
  cmd_proc_1 : cmd_proc
320
    port map (
321
      cmd_code     => cmd_code,
322
      cmd_seq      => cmd_seq,
323
      cmd_arg      => cmd_arg,
324
      cmd_run      => cmd_run,
325
      cmd_ack      => cmd_ack,
326
      cmd_response => cmd_response_in,
327
      clk          => clk_user,
328
      rst_p        => fade_rst_p,
329
      retr_count   => retr_count
330
      );
331
 
332
  eth_sender_1 : eth_sender
333
    port map (
334
      peer_mac      => peer_mac,
335
      my_mac        => my_mac,
336
      my_ether_type => my_ether_type,
337
      pkt_number    => pkt_number,
338
      seq_number    => seq_number,
339
      transm_delay  => transm_delay,
340
      clk           => clk_user,
341
      rst_n         => fade_rst_n,
342
      ready         => snd_ready,
343
      flushed       => flushed,
344
      start         => snd_start,
345
      cmd_start     => cmd_start,
346
      tx_mem_addr   => tx_mem_addr,
347
      tx_mem_data   => tx_mem_data,
348
      cmd_response  => cmd_response_out,
349
      Tx_Clk        => clk1,
350
      TxC           => xgmii_txc,
351
      TxD           => xgmii_txd);
352
 
353
  eth_receiver_2 : eth_receiver
354
    port map (
355
      peer_mac       => peer_mac,
356
      my_mac         => my_mac,
357
      my_ether_type  => my_ether_type,
358
      transmit_data  => transmit_data,
359
      restart        => restart,
360
      ack_fifo_full  => ack_fifo_full,
361
      ack_fifo_wr_en => ack_fifo_wr_en,
362
      ack_fifo_din   => ack_fifo_din,
363
      clk            => clk_user,
364
      rst_n          => fade_rst_n,
365
      dbg            => open,
366
      cmd            => rx_cmd,
367
      arg            => rx_arg,
368
      Rx_Clk         => clk1,
369
      RxC            => xgmii_rxc,
370
      RxD            => xgmii_rxd);
371
 
372
  ack_fifo_1 : ack_fifo
373
    port map (
374
      rst    => fade_rst_p,
375
      wr_clk => clk1,
376
      rd_clk => Clk_user,
377
      din    => ack_fifo_din,
378
      wr_en  => ack_fifo_wr_en,
379
      rd_en  => ack_fifo_rd_en,
380
      dout   => ack_fifo_dout,
381
      full   => ack_fifo_full,
382
      empty  => ack_fifo_empty);
383
 
384
 
385
  -- signal generator
386
 
387
  s_dta_we <= '1' when dta_ready = '1' and transmit_data = '1' else '0';
388
 
389
  dta_we <= s_dta_we;
390
 
391
  dta <= std_logic_vector(test_dta);
392
 
393 42 wzab
  process (Clk_user, fade_rst_n)
394 27 wzab
  begin  -- process
395
    if fade_rst_n = '0' then            -- asynchronous reset (active low)
396
      test_dta <= (others => '0');
397
      td_del0  <= '0';
398
      td_del1  <= '0';
399
    elsif Clk_user'event and Clk_user = '1' then  -- rising clock edge
400
      if s_dta_we = '1' then
401
        test_dta <= test_dta + x"1234567809abcdef";
402
      end if;
403
      -- Generate the dta_eod pulse after transmit_data
404
      -- goes low
405
      td_del0 <= transmit_data;
406
      td_del1 <= td_del0;
407
      if (td_del1 = '1') and (td_del0 = '0') then
408
        dta_eod <= '1';
409
      else
410
        dta_eod <= '0';
411
      end if;
412
    end if;
413
  end process;
414
 
415
  process (Clk_user, rst_n)
416
  begin  -- process
417
    if rst_n = '0' then                 -- asynchronous reset (active low)
418
      fade_rst_n   <= '0';
419
      fade_rst_del <= '0';
420
    elsif Clk_user'event and Clk_user = '1' then  -- rising clock edge
421
      if restart = '1' then
422
        fade_rst_n   <= '0';
423
        fade_rst_del <= '0';
424
      else
425
        fade_rst_del <= '1';
426
        fade_rst_n   <= fade_rst_del;
427
      end if;
428
    end if;
429
  end process;
430
 
431
  fade_rst_p <= not fade_rst_n;
432
 
433
end beh1;

powered by: WebSVN 2.1.0

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