vak: (Улыбка)
Serge Vakulenko ([personal profile] vak) wrote2016-11-09 11:32 am

Асинхронность, которую мы потеряли

В микро-БЭСМ в качестве программируемого таймера использовалась микросхема к580ви53. Ну не вопрос, подумал я, это ведь классический Intel 8253. Для него в интернете есть куча исходников на Верилоге, сейчас быстренько привинчу. Не тут-то было. Нашёл три разные реализации i8253 - все оказались кривоватые и не соответствующие реальному чипу. И неспроста: проблема оказалась глубже. Дело в том, что этот чип представляет собой классический пример асинхронного дизайна, забытого в наше время. В микросхеме отсутствует опорный синхросигнал.



Интерфейс к управляющему процессору состоит из сигналов адреса, данных, /CS, /RD, /WR. Здесь не участвуют сигналы CLK. Они влияют только на декремент счётчиков времени, но не на логику внешнго интерфейса. Хитрая задача абитража между осинхронными запросами от процессора и событиями от синхросигналов решается схемотехникой, что нетривиально. Современные средства Verilog-синтеза такое не могут. Приходится признать, что с развитием технологий разработки цифровых микросхем мы кое-что утеряли, а именно способность проектировать асинхронные схемы.

Чтобы сделать i8253 "понятным" для современных Verilog-синтезаторов, достаточно сделать его синхронным, то есть ввести глобальный высокоскоростной сигнал CLK со стороны процессора, и тактировать все остальные события по нему. Хотя это будет уже не совсем i8253, но для проектов типа микро-БЭСМ вполне годится.

[identity profile] gouriev.livejournal.com 2016-11-11 02:40 pm (UTC)(link)
а "синтезировать" вручную нельзя?
или это ограничение именно FPGA?

[identity profile] spamsink.livejournal.com 2016-11-11 05:23 pm (UTC)(link)
Можно вручную, хотя если конкретный дизайн требует определеных соотношений задержек некоторых сигналов), то может понадобиться вручную писать и некоторые атрибуты для размещения, типа "эти два элемента должны попасть в один логический блок, а эти два - в другой логический блок". При этом будет гарантировано, что внутри блока задержка будет меньше, чем между блоками.