Description:
For LatticeECP3 devices, there are a total of 8 SECONDARY clocks. Each of the SECONDARY clocks can be further divided into REGION clock. The SECONDARY clocks are divided into different sized REGIONs depending on the device density. For example, in LatticeECP3-150, each SECONDARY can be divided into 6 x 6 regions, which can be used as 36 different local clocks.
A clock can be assigned to one or several cascaded regions, depending on the clock loads. The secondary clock resource can also be used as clock enable, and local reset.
To use SECONDRY region clock, you must first define the region in the preference file (*.lpf), then assign a clock net to the region. Once the region is assigned, the place and route tool will follow the region assignment, to place the related sequential element to the assigned region. It is the user's responsibility to make sure that the region is appropriately assigned, although, the preference checker and place and route tool will put warning or errors on the assignments that are invalid.
The following is an example of assigning a clock to use secondary region clock resources:
1). Define the region:
REGION "<region_name>" CLKREG "CLKREG_R1C1" 6 3;
Where <region_name> is the name of the region;
CLKREG "CLKREG_R1C1" 2 3 defines the region. CLKREG_R1C1 defines the origin the region, i.e, start with R1C1 (total of 6 x 6 for ECP3 -150 devices) on the top left most region. "2 3" define the size of the region, i.e, 2 x 3 cascaded regions.
To define the region to be the lower left block, the syntax is as follows:
REGION "<region_name>" CLKREG "CLKREG_R6C6" 1 1;
2). Assigning clock onto the defined region:
USE SECONDARY NET "<clock_name>" REGION "<region_name>";