SignalTap от языка не зависит, он принимает имена сигналов.
На "топ-левел как пины" по-любому не надо, особенно, если не хватает свободных выводов, для этого придуманы виртуальные выводы. А вот без виртуальных выводов не всегда удаётся обойтись, если оптимизатор намухлюет с именами.
А лучше всего, по-моему, пользоваться советом DXP. Правда, я ещё не успел его попробовать