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

Subversion Repositories sts1

[/] [sts1/] [web_uploads/] [spe.vhd] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 6 root
--------------------------------------------------------------------------------
2
-- Entity name: spe                                                                             --
3
-- Description: The code calculates the path BIP-8 parity over the SPE.         --
4
-- It is the even parity, over all 783 bytes of SPE, which is put in            --
5
-- SPE(2,1). SPE(2,1) is the 2nd row and the first column of SPE, which has     --
6
-- 87 columns and 9 rows, representing 783 bytes. It is assumed here. that      --
7
-- (9 x 86) bytes of payload has already been generated, the program will       --
8
-- calculate the BIP now, and buffer that, till its location is arrived.        --
9
-- INPUT: Program recieves input from 7 VT Groups. The VT Groups are taken      --
10
-- as component.                                                                                        --
11
-- The program generates 9 x 87  SPE by taking 9 x 84 payload.                  --
12
-- NOTE: In this program the J1 and Path BIP-8 is given only                    --
13
--                                                                                                      --
14
--              ** Project Maintainers: Feeroz Akhter Khan **                           --
15
--                                              and Dr. Subrat Kar **                           --
16
--                              Dept. of Electrical Engineering, IIT Delhi              --
17
--------------------------------------------------------------------------------
18
 
19
library ieee;
20
library work;
21
use ieee.std_logic_1164.all;
22
use work.all;
23
---------------------------------
24
 
25
entity spe is
26
port (
27
  spe_data : out bit_vector(7 downto 0)
28
    );
29
 end spe;
30
 
31
------------------------------------
32
 
33
architecture behv of spe is
34
 
35
component vtg is
36
  port (
37
    vtg_data : out bit_vector(7 downto 0)
38
    );
39
end component;
40
 
41
component vtg_2 is
42
  port (
43
    vtg_2_data : out bit_vector(7 downto 0)
44
    );
45
end component;
46
 
47
component vtg_3 is
48
  port (
49
    vtg_3_data : out bit_vector(7 downto 0)
50
    );
51
end component;
52
 
53
component vtg_4 is
54
  port (
55
    vtg_4_data : out bit_vector(7 downto 0)
56
    );
57
end component;
58
 
59
component vtg_5 is
60
  port (
61
    vtg_5_data : out bit_vector(7 downto 0)
62
    );
63
end component;
64
 
65
component vtg_6 is
66
  port (
67
    vtg_6_data : out bit_vector(7 downto 0)
68
    );
69
end component;
70
 
71
component vtg_7 is
72
  port (
73
    vtg_7_data : out bit_vector(7 downto 0)
74
    );
75
end component;
76
 
77
----------------------------------------------------
78
--declaration of the signals
79
signal spe_data_temp : bit_vector(7 downto 0);
80
subtype path_data is bit_vector(7 downto 0);
81
type trace_byte is array(15 downto 0) of path_data;
82
signal J1 : trace_byte;
83
----------------------------------------------------
84
signal path_parity : bit_vector(7 downto 0) := "00000000";
85
signal B3 : bit_vector(7 downto 0) := "00000000";
86
signal C2 : bit_vector(7 downto 0) := "00000010";
87
signal FF : bit_vector(7 downto 0) := "01111110";        -- FF is the fixed stuff, which is put to non designed bytes
88
signal vtg_1_byte : bit_vector(7 downto 0);   --for port map of the indata
89
signal vtg_2_byte : bit_vector(7 downto 0);   --for port map of the indata
90
signal vtg_3_byte : bit_vector(7 downto 0);   --for port map of the indata
91
signal vtg_4_byte : bit_vector(7 downto 0);   --for port map of the indata
92
signal vtg_5_byte : bit_vector(7 downto 0);   --for port map of the indata
93
signal vtg_6_byte : bit_vector(7 downto 0);   --for port map of the indata
94
signal vtg_7_byte : bit_vector(7 downto 0);   --for port map of the indata
95
signal spe_clk : bit := '0';                --clk rate of prbsgen
96
signal payload_only_clk : bit := '0';
97
signal vtg_clk : bit := '0';
98
type col is range 1 to 87;
99
signal spe_col : col;
100
type row is range 1 to 9;
101
signal spe_row : row;
102
signal spe_data_temp1 : bit_vector(7 downto 0);
103
signal spe_data_temp2 : bit_vector(7 downto 0);
104
signal spe_data_temp3 : bit_vector(7 downto 0);
105
signal spe_data_temp4 : bit_vector(7 downto 0);
106
signal spe_data_temp5 : bit_vector(7 downto 0);
107
signal spe_data_temp6 : bit_vector(7 downto 0);
108
signal spe_data_temp7 : bit_vector(7 downto 0);
109
--------------------------------------
110
subtype data_word is bit_vector(7 downto 0);
111
type vtg_1_byte_buffer is array (755 downto 0) of data_word;
112
type vtg_2_byte_buffer is array (756 downto 0) of data_word;
113
type vtg_3_byte_buffer is array (757 downto 0) of data_word;
114
type vtg_4_byte_buffer is array (758 downto 0) of data_word;
115
type vtg_5_byte_buffer is array (759 downto 0) of data_word;
116
type vtg_6_byte_buffer is array (760 downto 0) of data_word;
117
type vtg_7_byte_buffer is array (761 downto 0) of data_word;
118
signal data_byte : data_word;
119
signal spe_1_buffer : vtg_1_byte_buffer;
120
signal spe_2_buffer : vtg_2_byte_buffer;
121
signal spe_3_buffer : vtg_3_byte_buffer;
122
signal spe_4_buffer : vtg_4_byte_buffer;
123
signal spe_5_buffer : vtg_5_byte_buffer;
124
signal spe_6_buffer : vtg_6_byte_buffer;
125
signal spe_7_buffer : vtg_7_byte_buffer;
126
----------------------------------------------------
127
 
128
begin
129
E1 : vtg port map(vtg_1_byte);
130
E2 : vtg_2 port map(vtg_2_byte);
131
E3 : vtg_3 port map(vtg_3_byte);
132
E4 : vtg_4 port map(vtg_4_byte);
133
E5 : vtg_5 port map(vtg_5_byte);
134
E6 : vtg_6 port map(vtg_6_byte);
135
E7 : vtg_7 port map(vtg_7_byte);
136
 
137
spe_clk <= not spe_clk after 79.821200510855683269476372924649 ns;
138
payload_only_clk <= not payload_only_clk after 82.671957671957671957671957671958 ns;
139
vtg_clk <= not vtg_clk after 0.5787037037037037037037037037037 us;
140
--vt15_clk <= not vt15_clk after 4.6296296296296296296296296296296 us;
141
--------------------------------------------------
142
 
143
spe_1_buffer(0) <= vtg_1_byte;
144
spe_2_buffer(0) <= vtg_2_byte;
145
spe_3_buffer(0) <= vtg_3_byte;
146
spe_4_buffer(0) <= vtg_4_byte;
147
spe_5_buffer(0) <= vtg_5_byte;
148
spe_6_buffer(0) <= vtg_6_byte;
149
spe_7_buffer(0) <= vtg_7_byte;
150
 
151
--------------------------------------------------------------
152
--Path Overheads
153
spe_data_temp <= B3 when (spe_row = 2 and spe_col = 1) else
154
    C2 when (spe_row = 3 and spe_col = 1) else
155
    FF when (spe_row = 4 and spe_col = 1) else
156
    FF when (spe_row = 5 and spe_col = 1) else
157
    FF when (spe_row = 6 and spe_col = 1) else
158
    FF when (spe_row = 7 and spe_col = 1) else
159
    FF when (spe_row = 8 and spe_col = 1) else
160
    FF when (spe_row = 9 and spe_col = 1) else
161
    FF when (spe_col = 30) else
162
    FF when (spe_col = 59);
163
 
164
spe_data <= spe_data_temp;
165
--------------------------------------------------------------
166
--Path Trace Byte
167
J1(0) <=  "00000001";
168
J1(1) <=  "00000010";
169
J1(2) <=  "00000011";
170
J1(3) <=  "00000100";
171
J1(4) <=  "00000101";
172
J1(5) <=  "00000110";
173
J1(6) <=  "00000111";
174
J1(7) <=  "00001000";
175
J1(8) <=  "00001001";
176
J1(9) <=  "00001010";
177
J1(10) <= "00001011";
178
J1(11) <= "00001100";
179
J1(12) <= "00001101";
180
J1(13) <= "00001110";
181
J1(14) <= "00001111";
182
J1(15) <= "00010000";
183
--------------------------------------------------------------
184
process(spe_col)
185
variable trace : integer := 0;
186
begin
187
    if(spe_row = 1 and spe_col = 1) then
188
      spe_data_temp <= J1(trace);
189
      trace := trace + 1;
190
      if(trace = 15) then
191
        trace := 0;
192
      end if;
193
    end if;
194
end process;
195
--------------------------------------------------------------
196
--Path Parity calculation
197
process(spe_clk)
198
begin
199
      if(spe_clk'event and spe_clk = '0') then
200
          path_parity(7 downto 0) <= path_parity(7 downto 0) xor spe_data_temp(7 downto 0);
201
          if(spe_col = 87 and spe_row = 9) then
202
              B3(7 downto 0) <= path_parity(7 downto 0) xor spe_data_temp(7 downto 0);
203
          end if;
204
        end if;
205
end process;
206
--------------------------------------------------------------
207
-- Byte Interleaving of VT groups
208
-- To be included later
209
--------------------------------------------------------------
210
process(spe_clk)
211
begin
212
    if(spe_clk'event and spe_clk = '0') then
213
      spe_col <= spe_col + 1;
214
      if(spe_col = 87) then
215
        if(spe_row = 9) then
216
          spe_col <= 1;
217
          spe_row <= 1;
218
          else
219
          spe_col <= 1;
220
          spe_row <= spe_row + 1;
221
        end if;
222
      end if;
223
    end if;
224
end process;
225
 
226
 
227
process(spe_clk)
228
begin
229
    if (spe_clk'event and spe_clk = '0') then
230
      spe_data_temp1 <= spe_1_buffer(754);
231
      spe_data_temp2 <= spe_2_buffer(755);
232
      spe_data_temp3 <= spe_3_buffer(756);
233
      spe_data_temp4 <= spe_4_buffer(757);
234
      spe_data_temp5 <= spe_5_buffer(758);
235
      spe_data_temp6 <= spe_6_buffer(759);
236
      spe_data_temp7 <= spe_7_buffer(760);
237
    end if;
238
end process;
239
 
240
 
241
process(spe_clk)
242
 
243
begin
244
    if (spe_clk'event and spe_clk = '0') then
245
      case spe_row is
246
      when spe_row =>
247
        case spe_col is
248
        when spe_col=>
249
          if(spe_col = 1 or spe_col = 8 or spe_col = 15 or spe_col = 22 or spe_col = 30 or spe_col = 37 or spe_col = 44 or spe_col = 51 or spe_col = 59 or spe_col = 66 or spe_col = 73 or spe_col = 80) then
250
            spe_data_temp <= spe_data_temp1;
251
            spe_data <= spe_data_temp1;
252
          elsif(spe_col = 2 or spe_col = 9 or spe_col = 16 or spe_col = 23 or spe_col = 31 or spe_col = 38 or spe_col = 45 or spe_col = 52 or spe_col = 60 or spe_col = 67 or spe_col = 74 or spe_col = 81) then
253
            spe_data_temp <= spe_data_temp2;
254
            spe_data <= spe_data_temp2;
255
          elsif(spe_col = 3 or spe_col = 10 or spe_col = 17 or spe_col = 24 or spe_col = 32 or spe_col = 39 or spe_col = 46 or spe_col = 53 or spe_col = 61 or spe_col = 68 or spe_col = 75 or spe_col = 82) then
256
            spe_data_temp <= spe_data_temp3;
257
            spe_data <= spe_data_temp3;
258
          elsif(spe_col = 4 or spe_col = 11 or spe_col = 18 or spe_col = 25 or spe_col = 33 or spe_col = 40 or spe_col = 47 or spe_col = 54 or spe_col = 62 or spe_col = 69 or spe_col = 76 or spe_col = 83) then
259
            spe_data_temp <= spe_data_temp4;
260
            spe_data <= spe_data_temp4;
261
          elsif(spe_col = 5 or spe_col = 12 or spe_col = 19 or spe_col = 26 or spe_col = 34 or spe_col = 41 or spe_col = 48 or spe_col = 55 or spe_col = 63 or spe_col = 70 or spe_col = 77 or spe_col = 84) then
262
            spe_data_temp <= spe_data_temp5;
263
            spe_data <= spe_data_temp5;
264
          elsif(spe_col = 6 or spe_col = 13 or spe_col = 20 or spe_col = 27 or spe_col = 35 or spe_col = 42 or spe_col = 49 or spe_col = 56 or spe_col = 64 or spe_col = 71 or spe_col = 78 or spe_col = 85) then
265
            spe_data_temp <= spe_data_temp6;
266
            spe_data <= spe_data_temp6;
267
          elsif(spe_col = 7 or spe_col = 14 or spe_col = 21 or spe_col = 28 or spe_col = 36 or spe_col = 43 or spe_col = 50 or spe_col = 57 or spe_col = 65 or spe_col = 72 or spe_col = 79 or spe_col = 86) then
268
            spe_data_temp <= spe_data_temp7;
269
            spe_data <= spe_data_temp7;
270
          end if;
271
 
272
        when others =>
273
          NULL;
274
        end case;
275
     end case;
276
  end if;
277
 
278
end process;
279
------------------------------------------------
280
end behv;

powered by: WebSVN 2.1.0

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