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

Subversion Repositories epc_rfid_transponder

[/] [epc_rfid_transponder/] [trunk/] [pseudoRNG.vhd] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 erwing
-------------------------------------------------------------------------------
2
--     Politecnico di Torino                                              
3
--     Dipartimento di Automatica e Informatica             
4
-------------------------------------------------------------------------------
5
-------------------------------------------------------------------------------     
6
--
7
--     Title          : EPC Class1 Gen2 RFID Tag - 16-bit Pseudo-random Number Generator    
8
--
9
--     File name      : pseudoRNG.vhd 
10
--
11
--     Description    : Peudo-random number generator based on 31-bit LFSR.
12
--                      LFSR primitive polynomial: 1 + X^28 + X^31
13
--                      Better performance may be reached using a leap-forward
14
--                      LFSR implementation...!!!
15
--     
16 3 erwing
--     Authors        : Erwing R. Sanchez <erwing.sanchez@polito.it>
17 2 erwing
--                                 
18
-------------------------------------------------------------------------------            
19
-------------------------------------------------------------------------------
20
 
21
library IEEE;
22
use IEEE.STD_LOGIC_1164.all;
23
use IEEE.std_logic_unsigned.all;
24
use IEEE.STD_LOGIC_ARITH.all;
25
 
26
 
27
entity prng is
28
  port (
29
    clk   : in  std_logic;
30
    rst_n : in  std_logic;
31
    init  : in  std_logic;
32
    cin   : in  std_logic_vector(30 downto 0);
33
    ce    : in  std_logic;
34
    cout  : out std_logic_vector(30 downto 0));
35
end prng;
36
 
37
 
38
architecture prng_arch of prng is
39
 
40
  signal lfsr31 : std_logic_vector(30 downto 0);
41
 
42
begin  -- prng16_arch
43
 
44
  LFSR : process (clk, rst_n)
45
  begin  -- process LFSR
46
    if rst_n = '0' then                 -- asynchronous reset (active low)
47
      lfsr31 <= (others => '0');
48
    elsif clk'event and clk = '1' then  -- rising clock edge
49
      if init = '1' then
50
        lfsr31 <= cin;
51
      elsif ce = '1' then               -- shift register;
52
        lfsr31(30 downto 1) <= lfsr31(29 downto 0);
53
        lfsr31(0)           <= lfsr31(30) xor lfsr31(27);
54
      end if;
55
    end if;
56
  end process LFSR;
57
 
58
  cout <= lfsr31;
59
 
60
end prng_arch;

powered by: WebSVN 2.1.0

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