Устранение опасности гонки сигналов в динамической защелке/регистре ИС!

Я работаю в программном обеспечении MAGIC Integrated Circuit на уровне компоновки.

Я получил 8-битный динамический регистр, состоящий из 1-битных динамических триггеров, которые записывают ввод на положительном фронте сигнала:

резкий поворот

(Примечание: для надежности я использовал вентили передачи в качестве переключателей вместо NMOS. Инверторы — это обычные инверторы CMOS.)

Таким образом, у него в основном есть 8 таких триггеров, подключенных к одному и тому же CLK. Однако, когда я просто делаю простое распространение CLK, а не CLK, мой регистр работает ОБА по положительному и отрицательному фронту CLK, в то время как он должен работать только по положительному фронту. Мой ТА сказал мне, что это из-за опасности расы, когда в какой-то момент и CLK, и не CLK находятся на высоком логическом уровне во время перехода. Это было правильно, когда я моделировал, поэтому я исключил Race Hazard с помощью этой схемы:

гоночная трасса

И действительно, при этом не было наложения логической «1» для CLK и notCLK. Конечно, имело место наложение нулей, но это неизбежно и не должно влиять на схему, верно?

Тем не менее, у меня все еще есть 8-битный регистр, записывающий входные значения как на положительных, так и на отрицательных фронтах CLK! Почему это все еще происходит? Он работает правильно, не считая этого факта. Вот схема сигнала:диаграмма

Как вы можете видеть, t2clk и t2nclk являются моими выходами CLK, а не CLK схемы устранения гонки, и это успешно устранило перекрытие «1». Однако он по-прежнему записывает значения на отрицательном фронте сигналов!

Вот мой макет всего 8-битного регистра, если он пригодится:

макет

Если вам нужны подробные макеты, я дам, но я могу гарантировать, что они верны моим объяснениям! :) Помогите как можно скорее плз, крайний срок завтра!!! :)

РЕДАКТИРОВАТЬ: Может ли добавление ворот Transmission вместо NMOS быть причиной неисправности?

Ответы (1)

Да, если вы заменили NMOS-транзисторы полными передающими затворами, где P- и N-транзисторы находятся на противоположных фазах синхронизации, у вас возникнет проблема гонки. Предположим, что ваши две фазы часов названы PH1и PH2. Один из передаточных ворот должен управляться с помощью PH1и , ~PH1а другой должен управляться с помощью PH2и ~PH2.

Вы не можете использовать PH2как ~PH1или использовать PH1как ~PH2.

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

Да. Вторая схема тактового генератора, на этот раз использующая вентили И-НЕ, требуется для генерации ~PH1 и ~PH2. Кроме того, вам необходимо охарактеризовать время выключения вентилей передачи и убедиться, что время неперекрытия часов больше на удобный запас.
Джо попал в точку! тем не менее, вы можете генерировать все необходимые вам сигналы с инверторами на сигналах Phi1 и Phi2, чтобы получить (4), которые вам нужны.
Отличный ответ! Я рассматривал возможность добавления либо четырех сигналов для распространения по схеме, либо добавления двух инверторов в каждую ячейку триггера. Я остановился на втором варианте :)