mirror of https://github.com/YosysHQ/nextpnr.git
The MMCM fasm writer put the 10-bit BANDWIDTH loop-filter word into FILTREG1_RESERVED[11:0] and wrote a hardcoded 0x3d4 into TABLE[9:0]. prjxray's TABLE[9:0] is the loop-filter table word; with the filter word misplaced the MMCM analog loop is misconfigured and never asserts LOCKED on hardware (clock outputs stay dead). Swap them: TABLE[9:0] gets filter_lookup[CLKFBOUT_MULT-1], FILTREG1_RESERVED[11:0] gets the constant 0x8, matching Vivado bitstreams for the same configurations. Also program POWER_REG from the actual configuration instead of 0xffff: 0x0100 for integer-only counters, 0x9900 when CLKOUT0 or CLKFBOUT uses fractional divide, again matching Vivado (verified on integer and CLKOUT0_DIVIDE_F=6.5 fractional testcases by diffing against Vivado bitstreams). Hardware-validated on xc7a100t (QMTech Wukong): MMCM-derived clocks (integer and fractional configurations) lock and run; the same designs never asserted LOCKED before this change. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| himbaechel_dbgen | ||
| uarch | ||
| .gitignore | ||
| CMakeLists.txt | ||
| arch.cc | ||
| arch.h | ||
| arch_pybindings.cc | ||
| arch_pybindings.h | ||
| archdefs.h | ||
| chipdb.h | ||
| himbaechel_api.cc | ||
| himbaechel_api.h | ||
| himbaechel_constids.h | ||
| himbaechel_gfxids.h | ||
| himbaechel_helpers.cc | ||
| himbaechel_helpers.h | ||
| main.cc | ||
| test_main.cc | ||