15 декабря 2013 - Детектор уровня

Как известно в Verilog есть два типа чувствительных блоков : always @ (posedge/negedge CLK) срабататывают по фронту и always @ (CLK) срабатывают по уровню. Процессор PlayStation использует оба метода.

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

Но как быть, если нам необходимо вначале сделать действие по фронту CLK, а за ним сделать действие по уровню CLK? Ведь нам необходимо расставить приоритеты, чтобы схема по уровню сработала позже, чем схема по фронту.

В этом нам помогают "детекторы уровня" :

Эта стандартная ячейка гарантирует, что фронт CLK "не пролезет" в схему (причем не только передний, но и задний), а пролезет только уровень. Реализуется этот механизм путём эксплуатирования propagation delay, при этом CLK превращается в "спайк" (короткий импульс), который возникает по середине уровня:

Таким образом процессор PSX уже в 1995 году использовал как фронт CLK, так и его уровень, предвосхитив повсевместное использование этого трюка. Примером устройств, использующих такую же логику является память DDR.