mirror of
https://github.com/YosysHQ/nextpnr.git
synced 2026-01-11 23:53:21 +00:00
gatemate: document clock distribution strategies (#1580)
* gatemate: document clock distribution strategies * gatemate: rename option to strategy
This commit is contained in:
parent
f245185da8
commit
f19a67122f
@ -428,6 +428,28 @@ void GateMatePacker::assign_clocks()
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Since A2 and A4 (multi-die) devices are composed of multiple A1 dies, and each die has its own
|
||||
separate set of global clocks, there are several strategies for distributing these clocks:
|
||||
|
||||
mirror — (default)
|
||||
Allows up to four clocks. A mirrored PLL and BUFG are instantiated on each die.
|
||||
This ensures all clocks are available on all dies, but clocks are not phase-synchronized
|
||||
across dies. As a result, designs may experience timing issues at higher frequencies.
|
||||
|
||||
clk1 — (experimental)
|
||||
Most designs use a single global clock. In this mode, the clock is generated on one die,
|
||||
output through an unused dedicated clock pin, and re-entered as an input on the other dies.
|
||||
Since global clock inputs are shared between dies, this enables higher-frequency operation
|
||||
for designs that span multiple dies.
|
||||
|
||||
full — (experimental)
|
||||
Intended for designs that need to utilize all available PLLs across all dies.
|
||||
In this strategy, placement is restricted so that logic using a specific clock
|
||||
resides only in the die where that clock is available. This generally works well,
|
||||
though it can be problematic for RAM blocks that may require access to multiple
|
||||
global clock signals.
|
||||
*/
|
||||
void GateMateImpl::pack()
|
||||
{
|
||||
const ArchArgs &args = ctx->args;
|
||||
@ -435,8 +457,8 @@ void GateMateImpl::pack()
|
||||
parse_ccf(args.options.at("ccf"));
|
||||
}
|
||||
|
||||
if (args.options.count("multi")) {
|
||||
std::string val = args.options.at("multi");
|
||||
if (args.options.count("strategy")) {
|
||||
std::string val = args.options.at("strategy");
|
||||
if (val == "mirror") {
|
||||
strategy = MultiDieStrategy::CLOCK_MIRROR;
|
||||
log_info("Multidie mode: CLOCK MIRROR\n");
|
||||
@ -447,7 +469,7 @@ void GateMateImpl::pack()
|
||||
strategy = MultiDieStrategy::FULL_USE;
|
||||
log_info("Multidie mode: FULL USE\n");
|
||||
} else {
|
||||
log_error("Unknown value for 'multi' option. Allowed values are 'mirror', 'full' and 'clk1'.\n");
|
||||
log_error("Unknown value for 'strategy' option. Allowed values are 'mirror', 'full' and 'clk1'.\n");
|
||||
}
|
||||
} else {
|
||||
strategy = MultiDieStrategy::CLOCK_MIRROR;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user