[LatticeECP3] Is there a method to partition a PRIMARY clock network?
Yes, each PRIMARY global clock nets in a LatticeECP3 device can be partitioned into four QUADRANTs. In a LatticeECP3 device, there are a total of 8 PRIMARY global clock nets. If each of them can be partitioned, then it is possible to have up to 32 asynchronous PRIMARY global clocks in a LatticeECP3 device. This is because each QUADRANT can have its own input (i.e. unshared input).
A clock can be assigned to all four QUADRANTs, two adjacent QUADRANTs, or one QUADRANT.
There are two ways to assign a PRIMARY clock network to a QUADRANT: Using the Spreadsheet View and editing the LPF.
Below is example syntax for assigning QUADRANTs in an LPF:
1). Assigning to one QUADRANT of a PRIMARY clock network
USE PRIMARY NET <CLOCK_NAME> <QUADRANT_LOCATION>;
Where <QUADRANT_LOCATION> can be either QUADRANT_TL, QUADRANT_TR, QUADRANT_BL, or QUADRANT_BR.
2). Assigning to two QUADRANTs of a PRIMARY clock network
USE PRIMARY NET <CLOCK_NAME> <QUADRANT_LOCATION1> <QUADRANT_LOCATION2>;
Where (<QUADRANT_LOCATION1>, <QUADRANT_LOCATION2>) can be either one of the following pairs of QUADRANTs:
-QUADRANT_TL, QUADRANT_TR
-QUADRANT_TL, QUADRANT_BL
-QUADRANT_TR, QUADRANT_BR
-QUADRANT_BL, QUADRANT_BR
Note that diagonally adjacent QUADRANTs (e.g QUADRANT_TL, QUADRANT_BR) are not valid combinations.
3). Assigning to all four QUADRANT of a PRIMARY clock network is the same as assigning a PRIMARY clock
USE PRIMARY NET <CLOCK_NAME>;
Note that assigning to three adjacent QUADRANTs is not available.
Also note that in the absence of regional constraints, the Placer will put all of the logic related to a certain clock in the correct location so as to honor the QUADRANT constraint. User should also check that any location constraint will not be in conflict with the QUADRANT constraint.