CPU EDGE TRIGGERED

From PSXDEV
Jump to: navigation, search

Contents

Активная логика (триггеры)

Edge-triggered схемы срабатывают не по уровню, а по факту смены уровня с 0 на 1 (задний фронт, raising edge, posedge в Verilog) или с 1 на 0 (передний фронт, falling edge, negedge в Verilog).

400px

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

Либо мы можем за 1 полутакт сделать сразу два действия, опять же используя этот трюк. Первое действие мы вешаем на триггер по заднему фронту, а второе - на триггер по переднему фронту. Память DDR так и работает.

Активная логика отличается от пассивной тем, что умеет запоминать некоторые состояния (в данном случае триггеры запоминают входное значение).

Семейство триггеров по нарастающему фронту выглядит примерно так (в большинстве это довольно крупные ячейки, состоящие из нескольких частей):

DFFs.jpg

Устройство современных DFF

Modern dff.jpg

Master flip-flop открывается первым, т.к. CLK=0 заведен на PMOS. Slave открывается вторым.

В стандартных ячейках PSXCPU используется немного другая схема. Вместо FF на паре инверторов+MOSFET применяется инверторы+MUX.

Если на CLK=0 первый MUX открывается для приема D, то это posedge DFF. Если на CLK=0 открывается второй MUX, а первый остается закрытым, то это negedge DFF.

Я не очень понимаю как это работает, но скорее всего вся фишка в propagation delay. Эту магию знать не обязательно, будем отталкиваться от того, что если вход DFF заходит в MUX, который открывается при CLK=0 MOSFET-ом P-типа, то это posedge DFF.

DFF срабатывающий по нарастающему фронту (posedge, смена CLK 0->1)

DFF.jpg

Схемка для симуляции в Logisim лежит в SVN.

250px

DFF по нарастающему фронту, со сбросом

Взяв за основу DFF, разработчики стали плодить его модификации.

Одна из них - DFF с дополнительным входом для сброса (причем вход в инверсной логике, как это обычно принято делать для сигналов сброса).

DFFR circuit.jpg

  • Если /res (in2) равен нулю (сброс), то на выходе всегда будет 0
  • Иначе схема работает как обычный DFF, устанавливая значение по нарастающему фронту

На следующей схеме не отражается тонкая механика работы мультиплексоров с задержкой:

DFFR logic.png

(схема приведена чтобы примерно понимать какие логические элементы используются)

DFF со сбросом применяются например в счётчиках, а /RES используется когда нужно сбросить счётчик.

DFF по нарастающему фронту, селектируемый по MUX, со сбросом

Данный вариант ячейки является гибридным: вместо обычного входа (D) на ней установлен мультиплексируемый вход.

Вероятнее всего комбинация MUX + DFF встречалась настолько часто, что разработчики решили добавить гибридную ячейку.

Схема не особо отличается от DFFR.

Топология:
DFFR MUX topo.jpg

Транзисторная схема:
DFFR MUX trans.jpg

Логическая схема (опять здесь не учитываются "медленные" MUXы):
DFFR MUX logic.jpg

DFF по спадающему фронту (negedge)

NDFF trans.jpg

Как видно, когда CLK=0, то нижний MUX (куда приходит вход D) остается закрытым, а верхний открывается. Как уже было сказано выше - такая магия формирует negedge DFF.