По-перше, при написанні HDL або адаптації HDL для FPGA, це дійсно коштує зрозуміти ваші конкретні можливості та обмеження FPGA. Xilinx робить відмінну роботу, що документує кожну модель FPGA. Дивлячись на блоки LUT4 та MUXF5, ваша сім'я FPGA може бути Spartan 3? Вивчаючи таблиці, ви можете побачити, які апаратні конструкції дуже ефективні для реалізації і які потребують більшої кількості ресурсів. Взагалі, чим ближче апаратна карта до того, що насправді на чіпі, тим швидше вона буде виконуватись і менша площа, яку вона буде займати.
Наприклад, Xilinx LUT також може використовуватися як регістр зсуву, тобто вам не потрібно використовувати фліпфлоп у фрагменті. Це призведе до дуже помітного поліпшення, якщо ви переконаєтеся, що ваші регіонами зсуву прив'язані до LUT. XST намагається максимально ефективно використовувати ваш HDL, щоб визначити ці ефективні відображення, але часто існують дурні речі, які заважають цим ефективним відображенням, наприклад, сигнал включення, який перевіряється перед сигналом скидання. Переконайтеся, що ви вивчаєте висновок синтезатора, а також місце та маршрут, щоб знайти випадки, коли ви можете покращити відображення на вашому FPGA. Документація Xilinx наводить приклади VHDL та Verilog, які XST може використовувати для виведення більш ефективних компонентів. Іноді часто простіше просто просто інсталювати компонент безпосередньо. І для складних компонентів - це UNIMACRO і майстер COREGEN, які виробляють дуже ефективне обладнання.
Для крайнього прикладу, спеціально написаний мікроконтроллер PicoBlaze для використання архітектур Xilinx FPGA. Можливо, було б корисно вивчити вихідний код PicoBlaze, щоб побачити приклади цього ефективного відображення.
По-друге, якщо ваш комбінаційний логічний шлях занадто довгий, він обмежуватиме вашу максимальну тактову частоту. Крім перезапису вашого коду, щоб краще покращити його на FPGA або переписати, щоб усунути непотрібні апаратні ресурси, ви також можете вставити фліп-флоп (регістри) десь посередині вашого комбінаційного логічного ланцюга. В архітектурі комп'ютера це називається конвеєрним процесом і збільшить кількість циклів за інструкцією. Наприклад, PicoBlaze використовує два цикли для кожної інструкції. Intel Pentium 4 мав близько 17 циклів за інструкцією. Якщо ви розумні, тоді ви можете написати свій ЛПВЩ таким чином, що ви починаєте обробку однієї інструкції, одночасно закінчуючи обробку останньої інструкції. Це означає, що для кожної інструкції (латентності) все одно буде потрібно 2 тактові цикли, однак ви зможете вийти з однієї інструкції на цикл (пропускна спроможність). Більшість мікроконтролерів, таких як 8051 і PicoBlaze, стосуються латентності, і більшість мікропроцесорів, таких як архітектура x86, стосуються пропускної спроможності.