Булева логика — реализация с использованием только 4 логических элементов И-НЕ

В настоящее время я готовлюсь к следующему семестру своей программы в университете, и я застрял на вопросе класса «Цифровые схемы».

Вот задача:

[...] насос P1 работает, когда уровень заполнения резервуара падает ниже 90% (U=0), но только тогда, когда датчик дымности одновременно выдает сигнал (S1=1). Если нижний датчик уровня заполнения сигнализирует с L=0, что уровень заполнения ниже 50%, насос P1 работает (P1=1) независимо от сигналов датчика непрозрачности (S1), пока U=0 одновременно . [...]

Задача состоит в том, чтобы сначала вывести логическое уравнение для комбинационной логики контроллера насоса (выходной сигнал).

Я закончил с P1 = U'*(S1+L').

Затем мы должны реализовать контроллер, используя только вентили NAND2 с намеком на то, что если 4 вентилей NAND2 недостаточно для реализации схемы, мы должны рассмотреть возможность дальнейшего упрощения логического уравнения.

Вот где моя проблема:

Я могу только реализовать схему с 5 вентилями NAND2:

P1 = U'*(S1+L') = U'*(S1+L')'' = U'*(S1'*L)'

схематический

смоделируйте эту схему - схема, созданная с помощью CircuitLab

Я не вижу никакого способа, как я мог бы упростить это еще больше. Может кто подскажет.

Заранее спасибо :)

Ответы (5)

Если я не ошибся (весьма вероятно), я считаю, что это можно сделать с помощью 3 вентилей NAND. Таблица истинности должна выглядеть так:

U С 1 л п 1 Комментарии 0 0 0 1 0 0 1 0 0 1 0 1 0 1 1 1 1 0 0 Икс не может случиться 1 0 1 0 1 1 0 Икс не может случиться 1 1 1 0
Использование карты Карно для нахождения логического выражения дает реализацию, в которой используются 3 вентиля И-НЕ с двумя входами.

Я не уверен, что случаи безразличия оправданы формулировкой вопроса ... Хотя они имеют смысл, поскольку бак не может быть одновременно заполнен более чем на 90% и менее чем на 50%. Наверное, это правильный подход.
@ЕвгенийШ. Ну а случай, когда уровень заполнения выше 90%, но ниже 50% невозможен (не может произойти). Мое основное понимание заключалось в том, что тогда с ними можно было бы обращаться как с безразличными. Хотя я могу ошибаться.
Да, я тоже добавил это в комментарий, похоже, это единственный способ получить менее 5 NAND. Проголосовал за
Просто мысль. Зачем разработчику постановки задачи тратить время на то, чтобы сказать, что если L=0, то насос работает независимо от S1 только в том случае, если U=0 ? Эта дополнительная формулировка должна что-то означать. Или еще почему они удосужились это сказать? Это слишком определенно , чтобы быть случайностью.
Я бы сказал, что вся постановка задачи довольно неудобна.
@ЕвгенийШ. Возможно. Но такая формулировка не падает из уст случайно. Я подозреваю, что постановка задачи подразумевает это. Возможно, верхний датчик имеет «поведение», которое должно учитываться логикой по какой-то неустановленной гипотетической причине безопасности. Кто знает? В любом случае, эти слова не пишутся случайно. (Или я не вижу хорошего способа утверждать, что это был несчастный случай.) Возможно, предполагается, что ученик идентифицирует этот конфликт?
Кажется, что есть только три способа решить эту проблему: 1) если вам разрешено иметь дополненный вывод, 2) невозможно иметь U=1 и L=0 одновременно, или 3) есть ошибка или упущение в вопросе. У нас нет полного текста вопроса, поэтому я подозреваю, что № 3, но у Карла есть самый поучительный ответ, поэтому я голосую за него.
Спасибо за доработки, они мне помогли и подтвердили, что, как я понял вопрос, ниже 5 вентилей NAND2 попасть не реально. Прошу прощения, что пропустил часть текста задачи. В нем указано, что работающий насос означает P1=1. Также указывается U=1 и возможно L=0, так как датчик 50% может быть неисправен и в этом случае насос не будет работать (P1=0). (Вот почему я использовал скобки (U'*S1)+(U'*L') = U'*(S1+L'). Я думаю, что формулировка неясна, но это вопрос из прошлого года (не могу задать профессору ). более важно то, что мое основное понимание правильное. Так что всем спасибо! :)
@ЕвгенийШ. Такая постановка задачи звучит неплохо по сравнению с тем, с чем мне приходится работать, так что, возможно, она задумана как введение в «реальный мир»?
Я почти уверен, что двойная проверка для U0, когда L0 низкий, перенесена из реального требования не переполнять резервуар в случае отказа датчика. Таким образом, «не может случиться» в этом ответе игнорирует требование безопасности, что... скажем так, не идеально. Пожалуйста, не следуйте примеру Боинга.

Отбрасывая ненужные слова, получаем…

насос P1 работает … если U=0, только когда S1=1…
насос P1 работает =1 независимо от S1, только если U=0
насос P1 работает, если L=U=0 и S1=x

  P1 = U’*S1 + L’ = ((U*U)’*S1)’*L)’    
  shows 3 (a*b)‘s meaning 3 NAND’s
Это запускает насос для всех случаев L0, а не только для L0 и U0.

Зачем эти скобки? Когда L=0, выход не зависит от любого другого входа, верно?

Таким образом, P1 = U'*S1+L', и его можно реализовать с помощью 4 нандов.

Когда L = 0, выход не зависит от любого другого входа, верно . Пока U = 0.... Не совсем независимый
Да, но я имею в виду, что это диктуется внешними факторами.
U — это входной, а не внешний фактор.
Когда он ниже 50%, он всегда ниже 90%. Поэтому, когда L=0, U всегда равно 0. Внешний фактор заключается в том, что они связаны с физической реальностью.
Эта физическая реальность отражена в ответе Карла «все равно». Я не проверял эквивалентность вашего финального выражения его, возможно, они эквивалентны. Но эти шаги должны быть проработаны.

Попробуйте начать с дополненного вывода, чтобы уменьшить количество необходимых инверсий:

P1' = U + S1'*L

Если вы посмотрите на карту Карно для P1, то увидите, что проще упростить P1', чем P1.

Я не думаю, что это помогает уменьшить количество NAND
@ЕвгенийШ. Изменение вещей таким образом, чтобы насос был включен, когда выход равен 0, действительно улучшает ситуацию по сравнению с утверждением, что насос включен, когда выход равен 1. Таким образом, дополнение выхода действительно влияет на результат.
@jonk Конечно, вы можете переопределить сигналы для их дополнений (не только выходных, но и входных). Но это не то, о чем просит проблема.
@ЕвгенийШ. Говорит ли в постановке задачи что-нибудь о выходном логическом значении, связанном с работой насоса? Если да, то я, возможно, пропустил это. В противном случае я не уверен, что понимаю фразу «Но это не то, о чем просит проблема». Не могли бы вы уточнить?
@jonk На самом деле, ты прав. В цитируемом тексте не упоминается полярностьP1
@ЕвгенийШ. И в этом суть. Внимательно прочитайте!
Да, это может быть способом. Но этот ответ должен работать в этих условиях и удалить это отрицание и добавить формулировку «при условии, что насос работает, когда P1 = 0 ...»
@jonk Хорошо, я только что перечитал это: «Насос P1 работает (P1 = 1)», так что нет, я должен снова исправить себя, это указано явно.

Здесь активно обсуждают постановку задачи и ее интерпретацию . Я придерживаюсь позиции, что:

  1. Вы точно отразили нам постановку задачи.
  2. Автор не мог случайно написать часть о том, что насос игнорирует S1, когда L=0 , и только если U=0.

Внимательное прочтение условия задачи позволяет предположить, что в нем может быть не указано явное значение логического уровня, необходимого для включения насоса . Похоже , что P1 является насосом. Затем также появляется сообщение о том, что P1=1, когда насос включен . Таким образом, происходит смешение двух вещей: сам насос называется P1, а также предлагается логический символ P1.

Но если кто-то должен предположить, что автор контента случайно добавил это указание на U, или же позволяет вам сделать выбор относительно логического уровня, отличного от состояния насоса, я бы выбрал последнее.

И нет, я не нахожу много убежища в этом аргументе. Но я нахожу хоть немного. Кроме того, вы отметили, что в вопросе предлагалось «упростить логику», если вы не можете получить четыре NAND. Я приму это как дополнительную подсказку или предложение.

Поэтому у вас есть свой ответ. Не предполагайте, что насос включен , когда на выходе 1. Вместо этого запланируйте, чтобы выход был равен 0, когда насос включен .

Похоже, что он устанавливает логический уровень для насоса: « Насос P1 работает (P1=1) » .
@ЕвгенийШ. Вы можете быть правы. Посмотрим, смогу ли я разработать контраргумент! Хм. Хорошо. Обязательно ли P1 является выходом, который я должен развивать только потому, что они говорят, что P1 равен 1, когда насос включен? Может быть, P1 — это просто абстрактная переменная, а не обязательно та логика, которую я должен использовать. Вместо этого я мог бы создать /P1 (P1'). Но да. Я снова чувствую себя менее уверенным. Я отредактирую, чтобы отразить это.
Я думаю, если вы разработаете контроллер с предопределенными интерфейсами...
@ЕвгенийШ. Я добавил некоторые комментарии. Одна вещь о P1 заключается в том, что она объединена. Они используют P1 для маркировки самого насоса. Затем они используют P1 в качестве логического символа. Насос не является логическим символом. Эти явно разные. Вы не можете установить P1=1, если P1 является насосом. ;) Я нахожу в этом некоторое (не очень) убежище.