source: FPGA/FTU/test_firmware/FTU_test1.vhd@ 206

Last change on this file since 206 was 206, checked in by qweitzel, 16 years ago
added a first test firmware for the FTU board
File size: 5.0 KB
Line 
1----------------------------------------------------------------------------------
2-- Company: ETH Zurich, Institute for Particle Physics
3-- Engineer: P. Vogler, Q. Weitzel
4--
5-- Create Date: 04/05/2010
6-- Design Name:
7-- Module Name: FTU_test1 - Behavioral
8-- Project Name:
9-- Target Devices:
10-- Tool versions:
11-- Description: Test firmware for FTU board, switch on/off enable signals
12--
13-- Dependencies:
14--
15-- Revision:
16-- Revision 0.01 - File Created
17-- Additional Comments:
18--
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.
28--library UNISIM;
29--use UNISIM.VComponents.all;
30
31entity FTU_test1 is
32 port(
33 -- global control
34 ext_clk : IN STD_LOGIC; -- external clock from FTU board
35 --reset : in STD_LOGIC; -- reset
36 brd_add : IN STD_LOGIC_VECTOR(5 downto 0); -- global board address (not local)
37
38 -- rate counters LVDS inputs
39 -- use IBUFDS differential input buffer
40 patch_A_p : IN STD_LOGIC; -- logic signal from first trigger patch
41 patch_A_n : IN STD_LOGIC;
42 patch_B_p : IN STD_LOGIC; -- logic signal from second trigger patch
43 patch_B_n : IN STD_LOGIC;
44 patch_C_p : IN STD_LOGIC; -- logic signal from third trigger patch
45 patch_C_n : IN STD_LOGIC;
46 patch_D_p : IN STD_LOGIC; -- logic signal from fourth trigger patch
47 patch_D_n : IN STD_LOGIC;
48 trig_prim_p : IN STD_LOGIC; -- logic signal from n-out-of-4 circuit
49 trig_prim_n : IN STD_LOGIC;
50
51 -- DAC interface
52 -- miso : IN STD_LOGIC; -- master-in-slave-out
53 sck : OUT STD_LOGIC; -- serial clock to DAC
54 mosi : OUT STD_LOGIC; -- serial data to DAC, master-out-slave-in
55 clr : OUT STD_LOGIC; -- clear signal to DAC
56 cs_ld : OUT STD_LOGIC; -- chip select or load to DAC
57
58 -- RS-485 interface to FTM
59 rx : IN STD_LOGIC; -- serial data from FTM
60 tx : OUT STD_LOGIC; -- serial data to FTM
61 rx_en : OUT STD_LOGIC; -- enable RS-485 receiver
62 tx_en : OUT STD_LOGIC; -- enable RS-485 transmitter
63
64 -- analog buffer enable
65 enables_A : OUT STD_LOGIC_VECTOR(8 downto 0); -- individual enables for analog inputs
66 enables_B : OUT STD_LOGIC_VECTOR(8 downto 0); -- individual enables for analog inputs
67 enables_C : OUT STD_LOGIC_VECTOR(8 downto 0); -- individual enables for analog inputs
68 enables_D : OUT STD_LOGIC_VECTOR(8 downto 0); -- individual enables for analog inputs
69
70 -- testpoints
71 TP_A : out STD_LOGIC_VECTOR(11 downto 0) -- testpoints
72 );
73end FTU_test1;
74
75architecture Behavioral of FTU_test1 is
76
77 component FTU_test1_dcm
78 port(
79 CLKIN_IN : IN STD_LOGIC;
80 CLKFX_OUT : OUT STD_LOGIC;
81 CLKIN_IBUFG_OUT : OUT STD_LOGIC
82 );
83 end component;
84
85 component Clock_Divider
86 port(
87 clock : IN STD_LOGIC;
88 enable_out : OUT STD_LOGIC
89 );
90 end component;
91
92 signal clk_5M_sig : STD_LOGIC;
93 signal enable_sig : STD_LOGIC;
94
95begin
96
97 Inst_FTU_test1_dcm : FTU_test1_dcm
98 port map(
99 CLKIN_IN => ext_clk,
100 CLKFX_OUT => clk_5M_sig,
101 CLKIN_IBUFG_OUT => open
102 );
103
104 Inst_Clock_Divider : Clock_Divider
105 port map (
106 clock => clk_5M_sig,
107 enable_out => enable_sig
108 );
109
110 enables_A(8) <= enable_sig;
111 enables_B(8) <= enable_sig;
112 enables_C(8) <= enable_sig;
113 enables_D(8) <= enable_sig;
114
115end Behavioral;
116
117
118library IEEE;
119use IEEE.STD_LOGIC_1164.ALL;
120use IEEE.STD_LOGIC_ARITH.ALL;
121use IEEE.STD_LOGIC_UNSIGNED.ALL;
122
123entity Clock_Divider is
124 port(
125 clock : in std_logic;
126 enable_out: out std_logic
127 );
128end entity Clock_Divider;
129
130architecture RTL of Clock_Divider is
131
132 constant max_count : integer := 5000000/1000000; -- for simulation
133 --constant max_count : integer := 5000000/1; -- for implementation
134 constant final_count : integer := 3;
135
136begin
137
138 process(clock)
139 variable count : integer range 0 to max_count;
140 variable count2 : integer range 0 to final_count;
141 begin
142 if rising_edge(clock) then
143 --enable_out <= '0';
144 if count2 = final_count then
145 enable_out <= '0';
146 else
147 if count < max_count/2 then
148 enable_out <= '0';
149 count := count + 1;
150 elsif count < max_count then
151 enable_out <= '1';
152 count := count + 1;
153 else
154 count := 0;
155 enable_out <= '0';
156 count2 := count2 + 1;
157 end if;
158 end if;
159 end if;
160 end process;
161
162end architecture RTL;
Note: See TracBrowser for help on using the repository browser.