June 4th, 2021

Счётчик в кодах Грея - окончание

Начало, продолжение

Осталось за малым: всё-таки реализовать "обычный режим", где дойдя до крайнего значения, счётчик сразу перескакивает в начальное, без хитрого реверса, который мы наблюдали вчера. А ещё сделать разрешение работы clk_en и вход синхронной загрузки. И проверить, что всё работает и при другом количестве бит.

Collapse )

Проверим для начала работу clk_en и режим "без реверса":


Всё верно: пока clk_en=0, вообще ничего не делаем, потом приступаем. Дойдя до 8 = 4'b1000, сразу переключаемся в 0 = 4'b0000, и повторяем всё то же самое, как ни в чём не бывало.

Теперь ещё опробуем синхронную загрузку:


Видно, что dummy, вместо того, чтобы переключиться в очередной раз, стал равным "чётности" поступившего значения E = 4'1110, т.е 1. И как видно, счёт продолжился в правильном направлении, что не может не радовать.

И глянем Width=8. Увы, отсинтезировалось оно в 25 ЛЭ, слишком много на мой вкус. Ну хорошо, не смог один бит вместить в 1 ЛЭ, вместил в 2 ЛЭ, это было бы 16, плюс "фиктивный бит" dummy, это 17. Плюс логика "горизонтального XOR" между 8 значениями - это ещё 3 ЛЭ, итого 20. Как так-то?? Но хотя бы работает правильно:

И предельная частота для моей ПЛИС 5576ХС4Т: 76,92 МГц, худо-бедно.

Главного достигли: получили параметризуемый модуль. Можно задавать Width от 3 и вверх. Вообще, могли бы сюда включить очередной generate, чтобы отдельно рассмотреть случаи 1 и 2, "оставим это читателю в качестве упражнения".

Остаётся вопрос: а нафига вообще он нужен? Ну, я хочу с ним один опыт провернуть, но возможно чуть позже...