Tutorials

FPGA Toolkit

 
 

The process of building a partially reconfigurable design is broken into two portions.  First the static design must be generated.  This design contains all the inputs and outputs to the external world in addition to the portion of the design that will not change between modules.  For the purposes of this tutorial the counter example will be evaluated on the Xilinx XUPV5. 

 

Static Design

Other than the reset logic, this design does not contain any logic outside of the reconfigurable modules.   First bus macros must be declared in the design.  For the counter example there are 8 nets that traverse the boundary from the static to the reconfigurable region.  The picture to the left shows an FPGA editor screenshot of the hard macro bus macro that is generated.  The portion where the nets line up is the boundary between the static region above and the reconfigurable region below.  The component declaration and instantiation is below to show how these bus macros are inserted into the VHDL.

  1. 1.  component busmacro_xc5v_async_vert_input_0 port(

  2. 2.    input0  : in  std_logic;

  3. 3.    input1  : in  std_logic;

  4. 4.    input2  : in  std_logic;

  5. 5.    input3  : in  std_logic;

  6. 6.    input4  : in  std_logic;

  7. 7.    input5  : in  std_logic;

  8. 8.    input6  : in  std_logic;

  9. 9.    input7  : in  std_logic;

  10. 10.    output0 : out std_logic;

  11. 11.    output1 : out std_logic;

  12. 12.    output2 : out std_logic;

  13. 13.    output3 : out std_logic;

  14. 14.    output4 : out std_logic;

  15. 15.    output5 : out std_logic;

  16. 16.    output6 : out std_logic;

  17. 17.    output7 : out std_logic);

  18. 18.  end component;

  19. 19.  attribute box_type  of busmacro_xc5v_async_vert_input_0: component is "black_box";

  20. 20.  attribute lock_pins of busmacro_xc5v_async_vert_input_0: component is "true";

  21. 21.  -- Output bus-macro

  22. 22.  busmacro_xc5v_async_vert_output_0_0 : busmacro_xc5v_async_vert_output_0 port map(

  23. 23.    passthrough_wires(0), passthrough_wires(1), passthrough_wires(2), passthrough_wires(3), passthrough_wires(4), passthrough_wires(5), passthrough_wires(6), passthrough_wires(7),

  24. 24.    data_reg_o(0), data_reg_o(1), data_reg_o(2), data_reg_o(3), data_reg_o(4), data_reg_o(5), data_reg_o(6), data_reg_o(7));




  1. 1.# PlanAhead generated physical constraints

  2. 2.AREA_GROUP "counter" RANGE=SLICE_X10Y80:SLICE_X27Y99;


The reconfigurable region is defined by the UCF file above.  This UCF file will be used throughout the entire OpenPR process to control the placement of both the static and reconfigurable regions.

The route_passthroughs.scr file must also be modified to reflect the passthrough nets in the PR region. These nets are reflected in pink in the diagram to the right.  They must be placed in the design to complete the connections between the input and output bus macros to prevent them from being ripped out by MAP for being dangling instances.  The modifications should simply reflect the names for the passthrough nets as they would appear in the XDL after synthesis.  For example in the VHDL in this design the pass through nets are defined as:

  1. 1.setattr main edit-mode Read-Write

  2. 2.select net passthrough_wires<0>

  3. 3.select net passthrough_wires<1>

  4. 4.select net passthrough_wires<2>

  5. 5.select net passthrough_wires<3>

  6. 6.select net passthrough_wires<4>

  7. 7.select net passthrough_wires<5>

  8. 8.select net passthrough_wires<6>

  9. 9.select net passthrough_wires<7>

  10. 10.autoroute

  11. 11.save

  12. 12.exit

signal passthrough_wires  : std_logic_vector(7 downto 0);

After this design passes through Synthesis, Translate,  and Map, the nets become named as below with the bus being broken into individual nets with the <#> suffix.

Finally the XML project file for the sandbox must be be modified to reflect the proper sandbox settings.  First the name of the reconfigurable region must be identified to prevent the placement of the static design. The name and size of the bus macro primitive needs to be placed in the XML project file.  The passthroughNet and clock net also needs to be identified.