aboutsummaryrefslogtreecommitdiffstats
path: root/fpga_interchange/luts.cc
diff options
context:
space:
mode:
authorKeith Rothman <537074+litghost@users.noreply.github.com>2021-03-25 13:36:11 -0700
committerKeith Rothman <537074+litghost@users.noreply.github.com>2021-03-25 17:20:13 -0700
commitcc4f2b451613f2d7152e1d42d2e4d0d59887df1c (patch)
tree51e2b45667cd6d634b81a3a772253af3d11eab27 /fpga_interchange/luts.cc
parentbbe1881293be1eb539b44c30645cbbb1a588d09c (diff)
downloadnextpnr-cc4f2b451613f2d7152e1d42d2e4d0d59887df1c.tar.gz
nextpnr-cc4f2b451613f2d7152e1d42d2e4d0d59887df1c.tar.bz2
nextpnr-cc4f2b451613f2d7152e1d42d2e4d0d59887df1c.zip
Add some FIXME's around VCC assumption in LUT logic.
Signed-off-by: Keith Rothman <537074+litghost@users.noreply.github.com>
Diffstat (limited to 'fpga_interchange/luts.cc')
-rw-r--r--fpga_interchange/luts.cc17
1 files changed, 17 insertions, 0 deletions
diff --git a/fpga_interchange/luts.cc b/fpga_interchange/luts.cc
index 75459393..930e25d1 100644
--- a/fpga_interchange/luts.cc
+++ b/fpga_interchange/luts.cc
@@ -45,6 +45,12 @@ bool rotate_and_merge_lut_equation(std::vector<LogicLevel> *result, const LutBel
if ((bel_address & (1 << bel_pin_idx)) == 0) {
// This pin is unused, so the line will be tied high, this
// address is unreachable.
+ //
+ // FIXME: The assumption is that unused pins are tied VCC.
+ // This is not generally true.
+ //
+ // Use Arch::prefered_constant_net_type to determine what
+ // constant net should be used for unused pins.
if ((used_pins & (1 << bel_pin_idx)) == 0) {
address_reachable = false;
break;
@@ -134,6 +140,11 @@ uint32_t LutMapper::check_wires(const std::vector<std::vector<int32_t>> &bel_to_
}
}
+ // FIXME: The assumption is that unused pins are tied VCC.
+ // This is not generally true.
+ //
+ // Use Arch::prefered_constant_net_type to determine what
+ // constant net should be used for unused pins.
uint32_t vcc_mask = 0;
DynamicBitarray<> wire_equation;
@@ -351,6 +362,12 @@ bool LutMapper::remap_luts(const Context *ctx)
} else {
// Look to see if wires can be run from element inputs to unused
// outputs. If not, block the BEL pin by tying to VCC.
+ //
+ // FIXME: The assumption is that unused pins are tied VCC.
+ // This is not generally true.
+ //
+ // Use Arch::prefered_constant_net_type to determine what
+ // constant net should be used for unused pins.
uint32_t vcc_pins = check_wires(bel_to_cell_pin_remaps, lut_bels, used_pins);
#if defined(DEBUG_LUT_ROTATION)
log_info("vcc_pins = 0x%x", vcc_pins);