May 18th, 2021

QuatCore

Слишком общительный FIFO ушёл в себя...

8-го апреля я хотел запустить "супрематический алгоритм" обнаружения точек в железе (на своём макете), но для этого нужно было увеличить размеры буферов FIFO на вход и выход, чтобы всё влезло, а когда я это сделал - опять перестал "проходить" по таймингам. Мне квартус выдал Critical Warning, что работоспособность этой "схемы" на 25 МГц он не гарантирует.

Чтобы это исправить, пришлось довольно основательно "перебрать" QuatCore - "отбалансировать ему конвейер". Этого самую малость не хватило, и наблюдая дальше failed paths (слишком длинные комбинаторные пути, по которым переходные процессы и не успевают затихнуть к фронту тактовой частоты) увидел, что очень "жадное" исполнение входного буфера FIFO привело к "комбинаторной связи" между потрохами видеопроцессора и основным процессором, что и было, вероятно, главной проблемой.

Балансировки конвейера я очень боялся, был уверен, что чего-то поломаю, поэтому устроил ему жуткие испытания в лице нового алгоритма захвата на ближней дистанции. Как результат, на месяц "отвлёкся" от обнаружения точек, и вообще ушёл в "симуляцию" (the matrix has you), и да, именно с матрицами я и возился до упора :)

А вот вылечивание FIFO от излишней "болтливости" казалось плёвым делом, я даже проверять не стал, и почти что забыл об этом изменении.

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

После танцев с осциллографом, проследив работу АЦП и выведя на отдельный шлейф "отладочные сигналы" с выходов нашего детектора и селектора синхроимпульсов, я понял: они работают нормально. Проверку чётности я тоже отключил от греха подальше, мало ли. Но мы всё равно висли. Только тогда я вспомнил об этом FIFO, поставил только что введённый там параметр AllowRWwhenFull = 1'b1 (т.е вернул "как было"), опять получил Critical Warning и предельную частоту 23,36 МГц, плюнул на это и прошил всё равно - и получил-таки изображение!

Collapse )

Продолжение следует... Казалось бы, маленькая правка - а какой эффект.