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



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

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

Date: 2016-11-09 19:50 (UTC)
From: [identity profile] 1801bm1.livejournal.com
Я сфотографировал кристалл ВИ53, он там не особо сложный, но оно как-то пока не особо интересно им заниматься. А точной реализации на HDL до сих пор ни у кого нет, все время всплывают какие-то нюансы. Емнип, наиболее допиленный вариант от svofski в Векторе-06.
>>то есть ввести глобальный высокоскоростной сигнал CLK
Да, это нормальная практика для старых асинхронных схем. Во всяком случае, мне ничего более подходящего придумать не удалось.

Date: 2016-11-09 21:06 (UTC)
From: [identity profile] sir66.livejournal.com
Тут я могу только заметить, что старый 10 мегабитный ethernet тоже был в определенном сиысле асинхронным. Мало того, со всяким арбитражем и прочим. А современный подразумевает в большинстве случаев жёсткий детеоменизм с очередями и простым пакет дропом если что.

Date: 2016-11-09 22:37 (UTC)
From: [identity profile] gouriev.livejournal.com
конечно, автоматизация включает некоторую унификацию.
боюсь, когда процесс автоматизации дотянется до медицины человека.

но вот вопрос.
на верилоге нельзя смоделировать асинхронные схемы?
неужели правда?

Date: 2016-11-10 02:31 (UTC)
From: [identity profile] spamsink.livejournal.com
Смоделировать, конечно, можно, и в симуляторе даже работать будет, но синтезироваться это может неправильно (комбинационный цикл может быть разорван не в том месте, где надо), а даже если правильно, то в FPGA может не так работать, потому что времянки будут не те, что надо.

Date: 2016-11-10 12:08 (UTC)
From: [identity profile] ledernierheros.livejournal.com
А аналоговые схемы в чем проектируют?

Date: 2016-11-10 16:01 (UTC)
From: [identity profile] spamsink.livejournal.com
В Verilog-AMS (Analog-Mixed Signal, позволяет смешивать код с обычным верилогом) или в Verilog-A (чисто аналоговый). Вот, например, мемристор (http://sensors.kaust.edu.sa/tools/memristor-model) (оцените, откуда):

module memristor (p, n) ;

inout p, n ;
electrical p, n ;

parameter real uv = 10f;
parameter real d = 10n;
parameter real ron = 100;
parameter real roff = 38k;
parameter real rin = 5k;

real k, r1, r2, R;

analog begin
k = 2 * uv * ron * (roff - ron) / pow(d,2);
r1 = pow(rin,2) + k * idt( V(p,n), 0 );
r2 = min( pow(roff,2) , max(r1,pow(ron,2) ) );
R = sqrt(r2);
V(p,n) <+ R * I(p,n) ;
end
endmodule

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

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

Date: 2016-11-10 08:59 (UTC)
From: [identity profile] rvp74.livejournal.com
> Приходится признать, что с развитием технологий разработки цифровых микросхем мы кое-что утеряли,

Судя по по обсуждению ассинхронной загрузки триггера на альтеровском форуме, утеряли дословно, "вредные привычки".

Date: 2016-11-10 19:41 (UTC)
From: [identity profile] netch80.livejournal.com
> Хитрая задача абитража между осинхронными запросами от процессора и событиями от синхросигналов решается схемотехникой, что нетривиально.

А чуть подробнее?

Date: 2016-11-10 20:03 (UTC)
From: [identity profile] 1801bm1.livejournal.com
>>применяются асинхронные арбитры - неизвестно
Полноценный арбитр - маловероятно, имхо. Скорее всего, какое-то событие просто имеет фиксированный приоритет. Во встроенном таймере 1801ВМ1 (примерно тех времен схемотехника, что и 8253), например, события клока игнорируются в момент записи регистра со стороны шины.

Date: 2016-11-11 06:18 (UTC)
From: [identity profile] netch80.livejournal.com
Понял, спасибо. Я не настоящий сварщик, но вижу некоторые опасности. В принципе, ничего страшного, если на записи (пока WR активен) будут потеряны некоторые такты внешней CLKext (тут и далее - конкретного экземпляра таймера), но в обратном направлении это неверно - WR, RD должны быть удовлетворены, и вовремя (пока они не кончились). Если частота CLKext заметно выше 1/периода RD, WR, это не проблема, но при обратном соотношении уже получается чушь. Если же сигналы типа RD не гасить на остаток их активности уже после активности CLKext, могут получиться "иголки", что не лучше.

Может, она на самом деле синхронная, но это скрыто? Стоит какой-нибудь простой генератор (хоть RC, пусть даже с 30% шатанием выходной частоты), лишь бы в допустимых пределах при разрешённой температуре, и по его выходу происходит арбитраж этих узлов...
Edited Date: 2016-11-11 11:22 (UTC)

Date: 2016-11-11 12:53 (UTC)
From: [identity profile] skolk.livejournal.com
Может, она на самом деле синхронная, но это скрыто?

Так не на Verilog же его делали. А схемотехнически асинхронный арбитр настолько сложнее? Насчет "в обратном направлении" - ясно, что WR приоритетнее, а RD вроде бы обслуживался из буфера (и если иглы и проскочили в начале RD, их отсекает принимающий ведущий шины, фиксируя данные по концу RD).