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

Subversion Repositories udp_ipv4_for_10g_ethernet

[/] [udp_ipv4_for_10g_ethernet/] [trunk/] [src/] [hdl/] [srl_pkg.vhd] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 DFC
-------------------------------------------------------------------------------
2
--
3
-- (C) Copyright 2013 DFC Design, s.r.o., Brno, Czech Republic
4
-- Author: Marek Kvas (m.kvas@dfcdesign.cz)
5
--
6
-------------------------------------------------------------------------------
7
-- This file is part of UDP/IPv4 for 10 G Ethernet core.
8
-- 
9
-- UDP/IPv4 for 10 G Ethernet core is free software: you can 
10
-- redistribute it and/or modify it under the terms of 
11
-- the GNU Lesser General Public License as published by the Free 
12
-- Software Foundation, either version 3 of the License, or
13
-- (at your option) any later version.
14
-- 
15
-- UDP/IPv4 for 10 G Ethernet core is distributed in the hope that 
16
-- it will be useful, but WITHOUT ANY WARRANTY; without even 
17
-- the implied warranty of MERCHANTABILITY or FITNESS FOR A 
18
-- PARTICULAR PURPOSE.  See the GNU Lesser General Public License 
19
-- for more details.
20
-- 
21
-- You should have received a copy of the GNU Lesser General Public 
22
-- License along with UDP/IPv4 for 10 G Ethernet core.  If not, 
23
-- see <http://www.gnu.org/licenses/>.
24
-------------------------------------------------------------------------------
25
--
26
-- First block of the receiver chain. It has XGMII as an input.
27
-- Output is raw 64 bit data guaranteed to be aligned on the frame start and 
28
-- stripped of preamble and CRC, valid signal covering frame data,
29
-- and byte enable signal that shall be used in case data amount is not
30
-- 8 byte aligned. Another signal indicates either CRC error or line
31
-- signalized error, in which case frame should be discarded.
32
--
33
-- Byte enable signal is guaranteed to be all ones for whole frame except
34
-- for the last word, in case packet length is not 8 byte integer divisible.
35
--
36
-- This can work under assumption that minimum IPG in incoming stream is
37
-- 4 bytes. This means when T is on L0-L4, S cannot be on L5-L7 of the same
38
-- cycle and when T is on L5-L7 S cannot be on L0-L3 of the next cycle. Under
39
-- this condition DV is always at leased one cycle deasserted between
40
-- frames.
41
--
42
--
43
--
44
-------------------------------------------------------------------------------
45
 
46
library ieee;
47
use ieee.std_logic_1164.all;
48
use ieee.numeric_std.all;
49
 
50
package srl_pkg is
51
   component ssrl_bus is
52
   generic (
53
      g_width     : positive;
54
      g_delay     : positive
55
           );
56
   port (
57
      CLK         : in  std_logic;
58
      DATA_IN     : in  std_logic_vector(g_width - 1 downto 0);
59
      DATA_OUT    : out std_logic_vector(g_width - 1 downto 0)
60
        );
61
   end component;
62
 
63
   component ssrl is
64
   generic (
65
      g_delay     : positive
66
           );
67
   port (
68
      CLK         : in  std_logic;
69
      DATA_IN     : in  std_logic;
70
      DATA_OUT    : out std_logic
71
   );
72
   end component;
73
 
74
end package;
75
 
76
 
77
 
78
 
79
library ieee;
80
use ieee.std_logic_1164.all;
81
use ieee.numeric_std.all;
82
 
83
entity ssrl_bus is
84
   generic (
85
      g_width     : positive;
86
      g_delay     : positive
87
           );
88
   port (
89
      CLK         : in  std_logic;
90
      DATA_IN     : in  std_logic_vector(g_width - 1 downto 0);
91
      DATA_OUT    : out std_logic_vector(g_width - 1 downto 0)
92
        );
93
end entity;
94
 
95
 
96
architecture synthesis of ssrl_bus is
97
 
98
   type array_slv is array (g_width-1 downto 0) of
99
                        std_logic_vector(g_delay-1 downto 0);
100
   signal shift_reg : array_slv;
101
 
102
 
103
begin
104
 
105
 
106
   shift_proc: process (CLK)
107
   begin
108
      if rising_edge(CLK) then
109
         for i in 0 to g_width-1 loop
110
             shift_reg(i) <= shift_reg(i)(g_delay-2 downto 0) & DATA_IN(i);
111
         end loop;
112
      end if;
113
   end process;
114
 
115
   output_proc : process (shift_reg)
116
   begin
117
      for i in 0 to g_width-1 loop
118
         DATA_OUT(i) <= shift_reg(i)(g_delay-1);
119
      end loop;
120
   end process;
121
 
122
end architecture;
123
 
124
library ieee;
125
use ieee.std_logic_1164.all;
126
use ieee.numeric_std.all;
127
 
128
use work.srl_pkg.all;
129
 
130
entity ssrl is
131
   generic (
132
      g_delay     : positive
133
           );
134
   port (
135
      CLK         : in  std_logic;
136
      DATA_IN     : in  std_logic;
137
      DATA_OUT    : out std_logic
138
   );
139
end entity;
140
 
141
 
142
architecture synthesis of ssrl is
143
 
144
 
145
begin
146
 
147
   ssrl_bus_inst : ssrl_bus
148
   generic map (
149
      g_width     => 1,
150
      g_delay     => g_delay
151
           )
152
   port map (
153
      CLK         => CLK,
154
      DATA_IN(0)     => DATA_IN,
155
      DATA_OUT(0)    => DATA_OUT
156
        );
157
 
158
 
159
end architecture;
160
 
161
 

powered by: WebSVN 2.1.0

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