vak: (Default)
[personal profile] vak
Меня давно интересовало, откуда взялись хардверные регистры, главный механизм хранения битов информации. В электронике они обозначаются термином D-flip-flop, по русски часто называют D-триггер. Буковка D в названии значащая, так как существуют флип-флопы и триггеры других видов.

Есть в этом гейте некоторая магия. Если посмотреть на схемы древних компьютеров 50-х и 60-х годов, все они сделаны на более простых элементах: защёлках, или RS-триггерах. И вот, штудируя книжку "The ZX Spectrum ULA", я обнаружил схему D-флип-флопа, на которой были сделаны Спектрумы, самые популярные домашние игровые компьютеры 80-х. Кстати, книжку весьма рекомендую: описывает технологию заказной схемотехники ULA, возникшей в 1972 году, задолго до FPGA (середина 80-х). Лидировала британская фирма Ferranti.



Сравните со схемой из википедии:



Как видим, британские инженеры сэкономили один транзистор, превратив трехвходовый гейт в двухвходовый. Базовый гейт двувходового ИЛИ-НЕ в их чипе упрощённо выглядит так:



Схему флип-флопа от Ferranti я просимулировал на Верилоге.
wire Q, NQ, K, L, M, N;
assign #1 K = ~(L | N);
assign #1 L = ~(K | CP);
assign #1 M = ~(L | CP);
assign #1 N = ~(M | D);
assign #1 Q = ~(L | NQ);
assign #1 NQ = ~(M | Q);
Буковками K, L, M, N обозначены выходы промежуточных гейтов:



Как можно видеть, выход Q принимает значение входа D в момент перехода синхросигнала CP из 1 в 0. То есть по заднему фронту:

В схеме тут же обнаружился глюк, то есть дребезг, или glitch по ихнему. По заднему фронту синхросигнала на выходе nQ ясно видно кратковременный переход в 0. Электронщики хорошо знают, что это опасное дело: тут возможно третье состояние и что угодно. Глюк устраняется, если ускорить гейт L. Инженеры Ferranti так и сделали: уменьшили сопротивление в коллекторной цепи На верилоге я задержал гейт M с одной до двух наносекунд:
assign #2 M = ~(L | CP);
Глюки исчезли:

Схема с трёхвходовым гейтом не должна страдать от глюков. Но три входа обошлись бы слишком дорого на чипе ULA. Впрочем, при стабильных параметрах резисторов на британском производстве эта проблема, вероятно, не проявлялась.

Date: 2022-08-13 00:06 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Да уж, за low power тогда не боролись.

Date: 2022-08-13 03:23 (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9
Можно не меняя схему заменить TTL на CMOS и потребление тока станет маленьким, если это важно.

Date: 2022-08-13 04:06 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Боюсь, в такой реализации температурные характеристики будут по качеству ниже плинтуса, поэтому так сейчас и не делают. А то чего б транзистор не сэкономить, флип-флопов в современных чипах много.

Date: 2022-08-13 06:13 (UTC)
sab123: (Default)
From: [personal profile] sab123
Насколько я помню из виденного давно в институте, несколько входов в ТТЛ делали и совсем бз дополнительных транзисторов, а транзистором с несколькими э-э-э коллекторами наверное (или может быть эимттерами).

Date: 2022-08-13 07:01 (UTC)
hozar: (Default)
From: [personal profile] hozar
эта серия, несмотря на скорострельность, жрала как не в себя

Date: 2022-08-13 12:01 (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9
Если речь про сопротивление в коллекторной цепи, то его в CMOS действительно не уменьшить по причине отсутствия там резисторов. Наверное можно получить аналогичный результат изменением параметров полевого транзистора в этом месте, но скорее всего дизайнерам лень этим заниматься. Проще когда все транзисторы одинаковые, а плюс-минус один затвор погоды не делает.