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

Subversion Repositories sata_controller_core

[/] [sata_controller_core/] [trunk/] [sata2_bus_v1_00_a/] [base_system/] [pcores/] [sata_core_v1_00_a/] [hdl/] [vhdl/] [scrambler.vhd] - Blame information for rev 11

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 11 ashwin_men
-- Copyright (C) 2012
2
-- Ashwin A. Mendon
3
--
4
-- This file is part of SATA2 core.
5
--
6
-- This program is free software; you can redistribute it and/or modify
7
-- it under the terms of the GNU General Public License as published by
8
-- the Free Software Foundation; either version 3 of the License, or
9
-- (at your option) any later version.
10
--
11
-- This program is distributed in the hope that it will be useful,
12
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
13
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
-- GNU General Public License for more details.
15
--
16
-- You should have received a copy of the GNU General Public License
17
-- along with this program.  If not, see <http://www.gnu.org/licenses/>.  
18
 
19
----------------------------------------------------------------------------------------
20
-- ENTITY: scrambler 
21
-- Version: 1.0
22
-- Author:  Ashwin Mendon 
23
-- Description: This sub-module implements the Scrambler Circuit for the SATA Protocol
24
--              The code provides a parallel implementation of the following 
25
--              generator polynomial                  
26
--                          16  15  13  4                               
27
--                  G(x) = x + x + x + x + 1    
28
--              The output of this scrambler is then XORed with the input data DWORD                           
29
--              The scrambler is initialized to a value of 0xF0F6. 
30
--              The first DWORD output of the implementation is equal to 0xC2D2768D
31
-- PORTS: 
32
-----------------------------------------------------------------------------------------
33
 
34
library IEEE;
35
use IEEE.STD_LOGIC_1164.all;
36
use IEEE.STD_LOGIC_ARITH.all;
37
use IEEE.STD_LOGIC_UNSIGNED.all;
38
 
39
entity scrambler is
40
  generic(
41
    CHIPSCOPE             : boolean := false
42
       );
43
  port(
44
    -- Clock and Reset Signals
45
    clk                   : in  std_logic;
46
    reset                 : in  std_logic;
47
    -- ChipScope ILA / Trigger Signals
48
    scrambler_ila_control : in  std_logic_vector(35 downto 0);
49
    ---------------------------------------
50
    -- Signals from/to Sata Link Layer
51
    scrambler_en          : in  std_logic;
52
    prim_scrambler        : in  std_logic;
53
    din_re                : out std_logic;
54
    data_in               : in  std_logic_vector(0 to 31);
55
    data_out              : out std_logic_vector(0 to 31);
56
    dout_we               : out std_logic
57
      );
58
end scrambler;
59
 
60
-------------------------------------------------------------------------------
61
-- ARCHITECTURE
62
-------------------------------------------------------------------------------
63
architecture BEHAV of scrambler is
64
 
65
  -------------------------------------------------------------------------------
66
  -- Constants
67
  -------------------------------------------------------------------------------
68
  constant SCRAMBLER_INIT     : std_logic_vector(0 to 15) := x"F0F6";
69
 
70
  signal context              : std_logic_vector (15 downto 0);
71
  signal context_next         : std_logic_vector (31 downto 0);
72
  signal context_reg          : std_logic_vector (31 downto 0);
73
  signal data_out_ila         : std_logic_vector (31 downto 0);
74
  signal dout_we_reg          : std_logic;
75
  signal dout_we_ila          : std_logic;
76
  signal din_re_ila           : std_logic;
77
 
78
  -----------------------------------------------------------------------------
79
  -- ILA Declaration
80
  -----------------------------------------------------------------------------
81
  component scrambler_ila
82
    port (
83
      control : in std_logic_vector(35 downto 0);
84
      clk     : in std_logic;
85
      trig0   : in std_logic_vector(31 downto 0);
86
      trig1   : in std_logic_vector(31 downto 0);
87
      trig2   : in std_logic_vector(31 downto 0);
88
      trig3   : in std_logic_vector(31 downto 0);
89
      trig4   : in std_logic_vector(15 downto 0);
90
      trig5   : in std_logic_vector(3 downto 0)
91
    );
92
  end component;
93
 
94
-------------------------------------------------------------------------------
95
-- BEGIN
96
-------------------------------------------------------------------------------
97
begin
98
 
99
  -----------------------------------------------------------------------------
100
  -- PROCESS: SCRAMBLER_PROC
101
  -- PURPOSE: Registering Signals and Next State
102
  -----------------------------------------------------------------------------
103
  SCRAMBLER_PROC : process (clk)
104
  begin
105
    if ((clk'event) and (clk = '1')) then
106
      if (reset = '1') then
107
        --Initializing internal signals
108
        context                 <= SCRAMBLER_INIT;
109
        context_reg             <= (others => '0');
110
        dout_we_reg             <= '0';
111
      elsif (scrambler_en = '1') then
112
        -- Register all Current Signals to their _next Signals
113
        context                 <= context_next(31 downto 16);
114
        context_reg             <= context_next;
115
        dout_we_reg             <= '1';
116
      else
117
        context                 <= context;
118
        context_reg             <= context_reg;
119
        dout_we_reg             <= '0';
120
      end if;
121
    end if;
122
  end process SCRAMBLER_PROC ;
123
 
124
 context_next(31) <= context(12) xor context(10) xor context(7) xor context(3) xor context(1) xor context(0);
125
 context_next(30) <= context(15) xor context(14) xor context(12) xor context(11) xor context(9) xor context(6) xor context(3) xor context(2) xor context(0);
126
 context_next(29) <= context(15) xor context(13) xor context(12) xor context(11) xor context(10) xor context(8) xor context(5) xor context(3) xor context(2)  xor context(1);
127
 context_next(28) <= context(14) xor context(12) xor context(11) xor context(10) xor context(9) xor context(7) xor context(4) xor context(2) xor context(1)  xor context(0);
128
 context_next(27) <= context(15) xor context(14) xor context(13) xor context(12) xor context(11) xor context(10) xor context(9) xor context(8) xor context(6)  xor context(1) xor context(0);
129
 context_next(26) <= context(15) xor context(13) xor context(11) xor context(10) xor context(9) xor context(8) xor context(7) xor context(5) xor context(3)  xor context(0);
130
 context_next(25) <= context(15) xor context(10) xor context(9) xor context(8) xor context(7) xor context(6) xor context(4) xor context(3) xor context(2);
131
 context_next(24) <= context(14) xor context(9) xor context(8) xor context(7) xor context(6) xor context(5) xor context(3) xor context(2) xor context(1);
132
 context_next(23) <= context(13) xor context(8) xor context(7) xor context(6) xor context(5) xor context(4) xor context(2) xor context(1) xor context(0);
133
 context_next(22) <= context(15) xor context(14) xor context(7) xor context(6) xor context(5) xor context(4) xor context(1) xor context(0);
134
 context_next(21) <= context(15) xor context(13) xor context(12) xor context(6) xor context(5) xor context(4) xor context(0);
135
 context_next(20) <= context(15) xor context(11) xor context(5) xor context(4);
136
 context_next(19) <= context(14) xor context(10) xor context(4) xor context(3);
137
 context_next(18) <= context(13) xor context(9) xor context(3) xor context(2);
138
 context_next(17) <= context(12) xor context(8) xor context(2) xor context(1);
139
 context_next(16) <= context(11) xor context(7) xor context(1) xor context(0);
140
 
141
 context_next(15) <= context(15) xor context(14) xor context(12) xor context(10) xor context(6) xor context(3) xor context(0);
142
 context_next(14) <= context(15) xor context(13) xor context(12) xor context(11) xor context(9) xor context(5) xor context(3) xor context(2);
143
 context_next(13) <= context(14) xor context(12) xor context(11) xor context(10) xor context(8) xor context(4) xor context(2) xor context(1);
144
 context_next(12) <= context(13) xor context(11) xor context(10) xor context(9) xor context(7) xor context(3) xor context(1) xor context(0);
145
 context_next(11) <= context(15) xor context(14) xor context(10) xor context(9) xor context(8) xor context(6) xor context(3) xor context(2) xor context(0);
146
 context_next(10) <= context(15) xor context(13) xor context(12) xor context(9) xor context(8) xor context(7) xor context(5) xor context(3) xor context(2)  xor context(1);
147
 context_next(9) <= context(14) xor context(12) xor context(11) xor context(8) xor context(7) xor context(6) xor context(4) xor context(2) xor context(1)  xor context(0);
148
 context_next(8) <= context(15) xor context(14) xor context(13) xor context(12) xor context(11) xor context(10) xor context(7) xor context(6) xor context(5)  xor context(1) xor context(0);
149
 context_next(7) <= context(15) xor context(13) xor context(11) xor context(10) xor context(9) xor context(6) xor context(5) xor context(4) xor context(3)  xor context(0);
150
 context_next(6) <= context(15) xor context(10) xor context(9) xor context(8) xor context(5) xor context(4) xor context(2);
151
 context_next(5) <= context(14) xor context(9) xor context(8) xor context(7) xor context(4) xor context(3) xor context(1);
152
 context_next(4) <= context(13) xor context(8) xor context(7) xor context(6) xor context(3) xor context(2) xor context(0);
153
 context_next(3) <= context(15) xor context(14) xor context(7) xor context(6) xor context(5) xor context(3) xor context(2)   xor context(1);
154
 context_next(2) <= context(14) xor context(13) xor context(6) xor context(5) xor context(4) xor context(2) xor context(1)   xor context(0);
155
 context_next(1) <= context(15) xor context(14) xor context(13) xor context(5) xor context(4) xor context(1) xor context(0);
156
 context_next(0) <= context(15) xor context(13) xor context(4) xor context(0);
157
 
158
 data_out_ila <= (context_reg xor data_in) when prim_scrambler = '0' else (context_reg);
159
 
160
 --dout_we_ila  <= dout_we_reg when scrambler_en = '1' else '0';
161
 dout_we_ila  <= dout_we_reg;
162
 
163
 din_re_ila   <= '1' when scrambler_en = '1' else '0';
164
 
165
 -----------------------------------------------------------------------------
166
 -- ILA Instantiation
167
 -----------------------------------------------------------------------------
168
 data_out <= data_out_ila;
169
 dout_we  <= dout_we_ila;
170
 din_re   <= din_re_ila;
171
 
172
 chipscope_gen_ila : if (CHIPSCOPE) generate
173
   SCRAMBLER_ILA_i : scrambler_ila
174
    port map (
175
      control  => scrambler_ila_control,
176
      clk      => clk,
177
      trig0    => data_in,
178
      trig1    => data_out_ila,
179
      trig2    => context_reg,
180
      trig3    => context_next,
181
      trig4    => context,
182
      trig5(0) => scrambler_en,
183
      trig5(1) => din_re_ila,
184
      trig5(2) => dout_we_ila,
185
      trig5(3) => reset
186
    );
187
  end generate chipscope_gen_ila;
188
 
189
end BEHAV;
190
 
191
 

powered by: WebSVN 2.1.0

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