Skip to content
Hendrik Hangmann edited this page Aug 20, 2013 · 3 revisions

Step 1 – Adding the Heat Core to your XPS project

Download the Heat Core

You can download the Heat Core and the TimeBase at https://github.com/hangmann/fpga-heater

Add the PCore to your project

Open the “pcores” folder in your project’s directory and paste the Heat Core and the TimeBase directories.

Adding the PCore to your project

Open your XPS project and rescan the user repositories.

You can easily add the PCores by right-clicking and adding them.

You can now choose the amount of LUT-Oscillators, which create the heat, by changing the value of C_NUM_LUTS.

Avoid Trimming

To avoid the trimming of the heat core, open the Implementation Options File and add -u to the mapper options.

Ignoring Timing Errors

It is mandatory to ignore timing errors for your project, because the Heat Core will produce them in order to work properly. Therefore go to your project options and uncheck “Treat timing closure failure as an error”.

Step 2 - Using the Heat Core in your C code

You can either use the example project heat_control, which can be found in the GitHub repository or download the header files and follow these steps:

First, add the C header files to your project

  • heat_core.h
  • time_base.h
  • system_monitor.h

Now you can use the HeatCore with the following functions

  • int get_active_heater( unsigned int* heat_core ) - returns the number of active heat blocks (1 - 32)
  • void set_active_heater( unsigned int* heat_core, int active ) - sets the number of active heat blocks (1 - 32)
  • void enable( unsigned int* heat_core ) - enables the HeatCore
  • void disable( unsigned int* heat_core ) - disables the HeatCore
  • void increase( unsigned int* heat_core) - increases the HeatCore's intensity level
  • void decrease( unsigned int* heat_core) - decreases the HeatCore's intensity level
  • int enabled( unsigned int* heat_core ) - returns "1" if heater is enabled
  • unsigned int sysmon_get_mcelsius( ) - returns the temperature of your FPGA in millicelsius
  • unsigned int sysmon_get_vcc() - returns the voltage of your FPGA
  • void wait_for_ms(int duration) - waits for duration ms

Step 3 - Set placement constraints

Open the UCF file of your project. You can easily constraint your HeatCores by typing e.g.

INST "heat_core_1" AREA_GROUP = "heat_cores";

INST "heat_core_2" AREA_GROUP = "heat_cores";

AREA_GROUP "heat_cores" RANGE = SLICE_X0Y50:SLICE_X61Y111;