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

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

Интерфейс к управляющему процессору состоит из сигналов адреса, данных, /CS, /RD, /WR. Здесь не участвуют сигналы CLK. Они влияют только на декремент счётчиков времени, но не на логику внешнго интерфейса. Хитрая задача абитража между осинхронными запросами от процессора и событиями от синхросигналов решается схемотехникой, что нетривиально. Современные средства Verilog-синтеза такое не могут. Приходится признать, что с развитием технологий разработки цифровых микросхем мы кое-что утеряли, а именно способность проектировать асинхронные схемы.
Чтобы сделать i8253 "понятным" для современных Verilog-синтезаторов, достаточно сделать его синхронным, то есть ввести глобальный высокоскоростной сигнал CLK со стороны процессора, и тактировать все остальные события по нему. Хотя это будет уже не совсем i8253, но для проектов типа микро-БЭСМ вполне годится.
no subject
>>то есть ввести глобальный высокоскоростной сигнал CLK
Да, это нормальная практика для старых асинхронных схем. Во всяком случае, мне ничего более подходящего придумать не удалось.
no subject
no subject
боюсь, когда процесс автоматизации дотянется до медицины человека.
но вот вопрос.
на верилоге нельзя смоделировать асинхронные схемы?
неужели правда?
no subject
no subject
Судя по по обсуждению ассинхронной загрузки триггера на альтеровском форуме, утеряли дословно, "вредные привычки".
no subject
no subject
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
no subject
А чуть подробнее?
no subject
no subject
https://github.com/besm6/micro-besm/blob/master/rtl/i8253.sv
no subject
Полноценный арбитр - маловероятно, имхо. Скорее всего, какое-то событие просто имеет фиксированный приоритет. Во встроенном таймере 1801ВМ1 (примерно тех времен схемотехника, что и 8253), например, события клока игнорируются в момент записи регистра со стороны шины.
no subject
Может, она на самом деле синхронная, но это скрыто? Стоит какой-нибудь простой генератор (хоть RC, пусть даже с 30% шатанием выходной частоты), лишь бы в допустимых пределах при разрешённой температуре, и по его выходу происходит арбитраж этих узлов...
no subject
Так не на Verilog же его делали. А схемотехнически асинхронный арбитр настолько сложнее? Насчет "в обратном направлении" - ясно, что WR приоритетнее, а RD вроде бы обслуживался из буфера (и если иглы и проскочили в начале RD, их отсекает принимающий ведущий шины, фиксируя данные по концу RD).
no subject
или это ограничение именно FPGA?
no subject
no subject
Проблема в том, что редко кто из цифровых электронщиков понимает, что это такое.