source: firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl/dna_gen.vhd @ 10155

Last change on this file since 10155 was 10155, checked in by neise, 9 years ago
highly unstable version !!!
File size: 3.2 KB
Line 
1----------------------------------------------------------------------------------
2-- Company:        ETH Zurich, Institute for Particle Physics
3-- Engineer:       Q. Weitzel
4--
5-- Create Date:    10/06/2010
6-- Design Name:
7-- Module Name:    FTU_dna_gen - Behavioral
8-- Project Name:
9-- Target Devices:
10-- Tool versions:
11-- Description:    entity to read out the FPGA DNA identifier
12--
13--
14-- Dependencies:
15--
16-- Revision:
17-- Revision 0.01 - File Created
18-- Additional Comments:
19--
20----------------------------------------------------------------------------------
21library IEEE;
22use IEEE.STD_LOGIC_1164.ALL;
23use IEEE.STD_LOGIC_ARITH.ALL;
24use IEEE.STD_LOGIC_UNSIGNED.ALL;
25
26---- Uncomment the following library declaration if instantiating
27---- any Xilinx primitives in this code.
28library UNISIM;
29use UNISIM.VComponents.all;
30
31entity dna_gen is
32  Port (
33    clk   : IN  STD_LOGIC;
34    start : IN  STD_LOGIC;
35    dna   : OUT STD_LOGIC_VECTOR(63 downto 0) := (others => '0');
36    ready : OUT STD_LOGIC := '0'
37  );
38end dna_gen;
39
40architecture Behavioral of dna_gen is
41        constant DNA_FOR_SIM : bit_vector := X"01710000E000FAD2"; -- for simulation only
42  signal dout_sig  : STD_LOGIC := '0';
43  signal read_sig  : STD_LOGIC := '0';
44  signal shift_sig : STD_LOGIC := '0';
45  signal dna_sig   : STD_LOGIC_VECTOR(63 downto 0) := (others => '0');
46
47  type FTU_dna_gen_StateType is (IDLE, READ_DNA, SHIFT_DNA, DNA_READY);
48  signal FTU_dna_gen_State : FTU_dna_gen_StateType;
49
50  signal shift_cntr : INTEGER range 0 to 64 := 0;
51 
52begin
53 
54  DNA_PORT_inst : DNA_PORT
55   generic map (
56      SIM_DNA_VALUE => DNA_FOR_SIM)  -- Specifies the Pre-programmed factory ID value
57   port map (
58      DOUT => dout_sig,   -- 1-bit DNA output data
59      CLK => clk,         -- 1-bit clock input
60      DIN => '0',         -- 1-bit user data input pin
61      READ => read_sig,   -- 1-bit input, active high load DNA, active low read
62      SHIFT => shift_sig  -- 1-bit input, active high shift enable
63   );
64
65  FTU_dna_gen_FSM : process(clk)
66  begin
67    if Falling_edge(clk) then
68      case FTU_dna_gen_State is
69        when IDLE =>
70          ready <= '0';
71          read_sig <= '0';
72          shift_sig <= '0';
73          if (start = '1') then
74            FTU_dna_gen_State <= READ_DNA;
75          else
76            FTU_dna_gen_State <= IDLE;
77          end if;
78        when READ_DNA =>
79          ready <= '0';
80          read_sig <= '1';
81          shift_sig <= '0';
82          FTU_dna_gen_State <= SHIFT_DNA;
83        when SHIFT_DNA =>
84          shift_cntr <= shift_cntr + 1;
85          ready <= '0';
86          read_sig <= '0';
87          if (shift_cntr < 57) then
88            dna_sig <= dna_sig(62 downto 0) & dout_sig;  -- put in from right
89            shift_sig <= '1';
90            FTU_dna_gen_State <= SHIFT_DNA;
91          --elsif (shift_cntr = 56) then
92            --dna_sig <= dna_sig(62 downto 0) & dout_sig;  -- put in from right
93            --shift_sig <= '0';
94            --FTU_dna_gen_State <= SHIFT_DNA;
95          else
96            shift_sig <= '1';
97            FTU_dna_gen_State <= DNA_READY;
98          end if;
99        when DNA_READY =>
100          ready <= '1';
101          read_sig <= '0';
102          shift_sig <= '0';
103      end case;
104    end if;
105  end process FTU_dna_gen_FSM;
106
107  dna <= dna_sig;
108   
109end Behavioral;
Note: See TracBrowser for help on using the repository browser.