Начните с реализации либо MD5, либо SHA1, написанного на C. Затем вручную переведите каждый шаг в алгоритме на шаг в блок-схеме. Каждая арифметическая или логическая операция в коде C становится комбинационной логической операцией (гейтами). Переменные источника и назначения в коде C становятся входными и выходными портами в вашем оборудовании. Временные переменные в коде C становятся именами внутренних сетей, соединяющих ваши комбинационные логические блоки.
Теоретически, должно быть возможно создать чисто комбинационную реализацию этих алгоритмов. На практике вы можете обнаружить, что для этого требуется слишком много аппаратных ресурсов (сумматоры, множители и т. Д.) И что вам потребуется повторно использовать ресурсы. Как только вам понадобится повторно использовать ресурсы, вам нужно ввести несколько промежуточных регистров, и тогда ваш вывод будет недействительным в течение определенного количества тактов.