![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
В микро-БЭСМ в качестве программируемого таймера использовалась микросхема к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
Date: 2016-11-09 19:50 (UTC)>>то есть ввести глобальный высокоскоростной сигнал CLK
Да, это нормальная практика для старых асинхронных схем. Во всяком случае, мне ничего более подходящего придумать не удалось.
no subject
Date: 2016-11-10 19:50 (UTC)https://github.com/besm6/micro-besm/blob/master/rtl/i8253.sv
no subject
Date: 2016-11-09 21:06 (UTC)no subject
Date: 2016-11-09 22:37 (UTC)боюсь, когда процесс автоматизации дотянется до медицины человека.
но вот вопрос.
на верилоге нельзя смоделировать асинхронные схемы?
неужели правда?
no subject
Date: 2016-11-10 02:31 (UTC)no subject
Date: 2016-11-10 12:08 (UTC)no subject
Date: 2016-11-10 16:01 (UTC)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
Date: 2016-11-11 14:40 (UTC)или это ограничение именно FPGA?
no subject
Date: 2016-11-11 17:23 (UTC)no subject
Date: 2016-11-10 08:59 (UTC)Судя по по обсуждению ассинхронной загрузки триггера на альтеровском форуме, утеряли дословно, "вредные привычки".
no subject
Date: 2016-11-10 19:41 (UTC)А чуть подробнее?
no subject
Date: 2016-11-10 19:48 (UTC)no subject
Date: 2016-11-10 20:03 (UTC)Полноценный арбитр - маловероятно, имхо. Скорее всего, какое-то событие просто имеет фиксированный приоритет. Во встроенном таймере 1801ВМ1 (примерно тех времен схемотехника, что и 8253), например, события клока игнорируются в момент записи регистра со стороны шины.
no subject
Date: 2016-11-11 06:18 (UTC)Может, она на самом деле синхронная, но это скрыто? Стоит какой-нибудь простой генератор (хоть RC, пусть даже с 30% шатанием выходной частоты), лишь бы в допустимых пределах при разрешённой температуре, и по его выходу происходит арбитраж этих узлов...
no subject
Date: 2016-11-11 12:53 (UTC)Так не на Verilog же его делали. А схемотехнически асинхронный арбитр настолько сложнее? Насчет "в обратном направлении" - ясно, что WR приоритетнее, а RD вроде бы обслуживался из буфера (и если иглы и проскочили в начале RD, их отсекает принимающий ведущий шины, фиксируя данные по концу RD).
no subject
Date: 2016-11-11 19:41 (UTC)Проблема в том, что редко кто из цифровых электронщиков понимает, что это такое.