PoC.io.FanControl

This module generates a PWM signal for a 3-pin (transistor controlled) or
4-pin fan header. The FPGAs temperature is read from device specific system
monitors (normal, user temperature, over temperature).

For example the Xilinx System Monitors are configured as follows:

                                                                |                                                                                        /-----\
Temp_ov  on=80  |       -       -       -       -       -       -       /-------/                               \
                                                                |                                                /                              |                                \
Temp_ov off=60  |       -       -       -       -       -       /       -       -       -       -       |       -       -       -       -       \----\
                                                                |                                        /                                      |                                                               \
                                                                |                                       /                                               |                                                        | \
Temp_us  on=35  |       -        /---/                                          |                                                        |      \
Temp_us off=30  |       -       /       -       -|-     -       -       -       -       -       |       -       -       -       -       -       -       -|-  \------\
                                                                |  /             |                                              |                                                        |                                       \
----------------|--------|------------|--------------|----------|---------
pwm =                                           |               min      |      medium          |               max                              |      medium  |       min

Entity Declaration:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
entity io_FanControl is
  generic (
    CLOCK_FREQ              : FREQ;
    ADD_INPUT_SYNCHRONIZERS : boolean     := TRUE;
    ENABLE_TACHO            : boolean     := FALSE
  );
  port (
    -- Global Control
    Clock                   : in  std_logic;
    Reset                   : in  std_logic;
    
    -- Fan Control derived from internal System Health Monitor
    Fan_PWM                 : out std_logic;
    
    -- Decoding of Speed Sensor (Requires ENABLE_TACHO)
    Fan_Tacho      : in  std_logic := 'X';
    TachoFrequency : out std_logic_vector(15 downto 0)
  );
end entity;