![]() |
От формул к процессору/@K
Часть I
Привет всем. Этим уроком я открываю цикл статей посвященных – логике, и самое главное логическим основам работы процессора. Вы поймете, как работает процессор на физическом и логическом уровнях. И возможно, захотите собрать эту не большую вещицу – своими руками! Но для начала нам нужно изучить формальную логику и начнем с основных логических операций: Всего может быть два возможных состояния – Сильный сигнал и Слабый, Истинна и Ложь, 1 и 0. Первая логическая операция. Логическое отрицание - ИНВЕРСИЯ - если исходное выражение истинно, то результат отрицания будет ложным, и наоборот, если исходное выражение ложно, то результат отрицания будет истинным. Например: A ____неА 1_____ 0 0_____1 С = A & B. Вторая логическая операция. Логическое умножение - КОНЪЮНКЦИЯ - это выражение будет истинно в одном случае, когда оба значения верны. Например, высказывание “Дождь будет утром и вечером”, верно только в одном случае если дождь будет и утром и вечером, а ложно, если дождь будет вечером, а утром не будет и наоборот. A & B = С 1__1= 1 1__0= 0 0__1= 0 0__0= 0 То есть Истинна и Истинна = Истинна Истинна и Ложь = Ложь Ложь и Истинна =Ложь Ложь и Ложь = Ложь Как и говорил, наше выражение будет истинным только в одном случае. Третья логическая операция. С = A + B Логическое сложение – ДИЗЪЮНКЦИЯ - это выражение будет истинно во всех случаях, кроме одного, когда оба значения ложны. Например, высказывание Дождь будет утром или вечером, означает следующее – Дождь будет только вечером, - Дождь будет только утром, - Дождь будет и утром и вечером. Но из-за характерных особенностей русского языка многие считают, что это высказывание означает, Дождь будет только вечером, либо Дождь будет только утром, а третьего в расчет не берут. A + B = С 1__1= 1 1__0= 1 0__1= 1 0__0= 0 То есть Истинна или Истинна = Истинна Истинна или Ложь = Истинна Ложь или Истинна = Истинна Ложь или Ложь = Ложь Как и говорил, наше выражение будет ложно только в одном случае. Четвертая логическая операция. Логическое следование: ИМПЛИКАЦИЯ - связывает два простых логических выражения, из которых первое является условием , а второе – следствием из условия. Это было научное определение так сказать, а сейчас объясню, что все это значит = короче представьте вам дали решить задачу, и условия к этой задачи тоже дали(исходные данные), вам осталась подумать над решением. Рассмотрим эту ситуацию: Вам дали правильные исходные данные к задаче – решали правильно, значит решили правильно(истинно). Вам дали правильные исходные данные к задаче – но решали не правильно, значит решили неправильно(ложь). Вам дали неправильные исходные данные к задаче – но решали вы все равно правильно(чудо), значит решили правильно(истинна). Вам дали неправильные исходные данные к задаче – решали неправильно, значит решили неправильно(истинна). Спросите почему Истинна? А как вы могли решить если исходные данные не верны, значит в итоге истинна. A B = С 1__1= 1 1__0 =0 0__1= 1 0__0= 1 Ложь тока в одном случае, когда думали не правильно. Пятая логическая операция. Логическая равнозначность: ЭКВИВАЛЕНТНОСТЬ - определяет результат сравнения двух простых логических выражений А и В. Результатом ЭКВИВАЛЕНТНОСТИ является новое логическое выражение, которое будет истинным тогда и только тогда, когда оба исходных выражения одновременно истинны или ложны. Короче истина ЭКВИВАЛЕНТНА истине. А ложь ЭКВИВАЛЕНТНА лжи. A B = С 1__1 = 1 1__0 = 0 0__1 = 0 0__0 =1 Э то основные логические операции, через них можно выразить все остальные. Хотя ели сказать по секрету, то основных операции всего три Логическое отрицание - ИНВЕРСИЯ Логическое умножение - КОНЪЮНКЦИЯ Логическое сложение – ДИЗЪЮНКЦИЯ Через них выражаются и ИМПЛИКАЦИЯ, и ЭКВИВАЛЕНЦИЯ и остальные. В последующих статьях мы это разберем - а пока усвойте этот материал. И если усвоите, то вы на шаг приблизитесь к пониманию работы процессора и всего остального. (c)Kerny |
Часть II
Привет всем – надеюсь вы хорошо усвоили материал прошлой статьи! сегодня мы изучим правила преобразования логических выражений…. Так для начала условимся – Логическое произведение (КОНЬЮНКЦИЯ) – записываем так A*B (логическое произведение А на В) или можно еще записывать так А&B. Логическое сложение (ДИЗЪЮНКЦИЯ) – записываем так А+В , можно еще записать по другому на клавиатура мне не позволяет…. Логическое отрицание (ИНВЕРСИЯ) – записывать будем, как неА. Закон непротиворечия Закон непротиворечия, означает следующее A не может быть равно своему отрицанию, неA *A=0 Например есть выражение A *неA+B, догадайтесь чему оно будет равно? Правильно A *неA+B=B. Закон исключения третьего Высказывание может быть либо истинным либо ложным, третьего не дано. Это означает, что результат логического сложения высказывания и его отрицания принимает значение истинна. А+неА=1 Да и незабываем , 1 - это истинна, 0 – это ложь. Что бы, было легче можно представлять , так «+», это «или», «*» - это «и», а инверсия – тут и так понятно…. Закон двойного отрицания Если выражение дважды отрицается, то в результате мы получим исходное высказывание. Например: ненеА=А Так же, как в Алгебре минус на минус - дает плюс. Закон тождества Всякое высказывание тождественно самому себе. Например А=А. Законы Моргана: Первый закон Де Моргана. не(А + В)= неА* неВ Отрицание выражения (А или В) равно неА и неБ, давайте проверим!? Для этого построим так называемую таблицу истинности: А______В_____неА____неВ__(А+В)__Не(А+ В)___неА* неВ 0______0______1______1_____0______1_________1 0______1______1______0_____1______0_________0 1______0______0______1_____1______0_________0 1______1______0______0_____1______0_________0 Сначала, даем начальные значения А и Б, затем их инвертируем, после подвергаем значения А и В дизъюнкции (операция «или»), затем то, что получилось инвертируем и получаем – одну единицу и три нуля… Теперь берем значения неА и неВ и подвергаем коньюнкции(логическое умножение) и в результате получаем , единицу и три ноля… тоесть не(А + В)= неА* неВ, формула верна Второй закон Де Моргана. не(А*В)= неА + неВ А______В______неА___неВ__(А*В)___Не(А *В) ______неА+ неВ 0______0______ 1_____1______0______1_____________1 0______1______ 1_____0______0______1_____________1 1______0______ 0_____1______0______1_____________1 1______1______ 0_____0______1______0_____________0 Тоже самое здесь - формула верна. Мы сейчас строили таблицы истинности – вообще-то это проходится по информатике…. А теперь пару примеров: Не(А+В)*(А*неВ) Начнем, видим в первой части выражения не(А+В) – первый закон Де Моргана – преобразовываем: НеА*неВ*(А*неВ), раскроем скобки НеА*неВ*А*неВ, видим неА и А, - закон непротиворечия . Остается 0*НеВ*неВ Смотрим НеВ*неВ, ага это равно просто неВ, спросите почему? Допустим есть некое третье значение например, значение С. С*неВ*неВ=С*неВ, допустим С=0 А неВ равно 1, тогда 0*1*1=0, а это тоже самое что и 0*1. Вот и получается, что неВ*неВ, равно просто неВ. Так вернёмся к примеру: Получаем, 0*неВ=0, тут можно пойти двумя путями, первый я назвал его алгебраический – умножение на ноль всегда дает ноль, или второй логический: У нас операция конъюнкция(вспоминаем союз «и») а эта операция так сказать истинна только в одном случае, когда оба значения истинны, тоесть 1*1=1, смотрим на первый множитель нашего выражения он уже равен нолю… Значит чему бы небыло равно, значение неВ, хоть 1 хоть 0, всегда будет ложь(ноль). В принципе остальные примеры решаются также. Наверное, сейчас вы задаетесь мыслями, а зачем это? Хотел написать ответ в этой статье, но передумал, скажу лишь, что узнаете в последующих статьях. Это только начало! (c)Kerny |
Часть III
Привет всем! Итак, третья статья из цикла! Приступим! Помните, я вам говорил, что всего логических операции три, и что через них выражаются все остальные, так вот сегодня мы рассмотрим это. Значит, начнем с эквиваленции Как мы помним, она выглядит так A _________B ________С 1__________1________1 1__________0________0 0__________1________0 0__________0________1 Получается, что мы должны найти выражение, состоящее из простых логических операций (инверсия, конъюнкция, дизъюнкция), которое бы в результате давало см. таблицу. Ну что ж попробуем подобрать нужную нам формулу…. Будем брать тока первую строку из нашей таблицы: A _________B ________С 1__________1________1 Тоесть при значениях А=1, B=1, нужно получить значение С=1. В чем проблема? - спросите вы. Это же обычная конъюнкция 1*1=1, Да это конъюнкция, но она нам не подходит – не забываем, что мы должны решить задачу в общем виде – заменим выражение 1*1=1 формулой А*В=С, и попробуем, подставить другие значения например 0*0=0, и видим, что это не подходит т.к при эквиваленции 0*0=1, а теперь не большой секрет – то, что я только что вам втирал можно было опровергнуть иначе, просто подумав – это же одна логическая операция – конъюнкция, а конъюнкция не может быть равна эквиваленции, отсюда вывод в нашей формуле должно быть больше одной логической операции, и еще если вы хорошо усвоили предыдущий материал, то должны знать, что 1*1*1=1, тоже не подойдет, т. к после преобразования получиться 1*1=1, отсюда еще один вывод, наша формула не должна преобразовываться, найдем нашу формулу: Пробуем разные комбинации, ниже подставляем вместо букв значения и сравниваем их с таблицей эквиваленции … ________________ A*B+B=C 1*1+1=1 1*0+0=0 0*1+1=1 Уже не подходит. ____________________ A*B+А*B=C 1*1+1*1=1 1*0+1*0=0 0*0+0*0=0 не подходит ____________________ A*B+неА*неB=C 1*1+не1*не1=1 1*0+не1*не0=0 0*1+не0*не1=0 0*0+не0*не0=1 ____________________ Ура! Нашли нужную нам формулу! Итак, мы выяснили, что эквиваленцию можно выразить следующей формулой : A*B+неА*неB=C Импликацию мы не будем выражать, я показал вам лишь ход мыслей…. Формула импликации: неА+В A _________B ________С 1__________1________1 1__________0________0 0__________1________1 0__________0________1 А теперь, рассмотрим, как это все изображается – схемами. Люди знакомые с программированием знают, что алгоритм программы можно изображать в виде блок схем, так вот здесь это тоже имеет место быть…. И это называется это логическими схемами. Так как, основных логических операций всего три, то и логических элементов будет три… Смотрите рисунок: ____________________________ http://img3.imageshost.ru/imgs/c5708...378dc5c128.jpg ____________________________ Итак, вы видите коньюнктор, у него всегда два входа и один выход, на вход подаются А и В (для отличия его от дизъюнктора добавляется символ & см. рисунок), в результате на выходе будет А*В, например: Подаются значения 1 и 0, в результате будет 0. Ниже дизъюнктор , у него всегда два входа и один выход, на вход подаются А и В (для отличия его от коньюнктора добавляется символ 1 см. рисунок), в результате на выходе будет А+В, например: Подаются значения 1 и 0, в результате будет 1. И последний элемент инвертор, у него один вход и один выход, если на вход подать 1 то результатом будет 0 и наоборот. Это так сказать промежуточная статья – так, что не ругайте…. Скоро будет еще интереснее. (c)Kerny |
Часть IV
Приступим, в предыдущей статье мы рассмотрели основные логические элементы, теперь разберемся с логическими схемами, попробуем построить схему для логического выражения B∙неА+неB∙A=C ______________________________ http://img3.imageshost.ru/imgs/a6bf1...9a10eb046b.jpg ______________________________ Надеюсь, принцип вы поняли. Теперь рассмотрим физическую реализацию логических элементов, Начнем с элемента “не”. ______________________________ http://img3.imageshost.ru/imgs/f6ae9...a7b380d6da.jpg ______________________________ Как видим на рисунке если подаем 0, то ничего не происходит…. Если 1, то канал закрывается и газ не проходит(может быть и жидкость). Надеюсь понятно. Логическое сложение: ______________________________ http://img3.imageshost.ru/imgs/398c0...7327de411a.jpg ______________________________ Как видим из рисунка, у нас получается: A _________B ________С 1__________1________0 1__________0________0 0__________1________0 0__________0________1 А, надо: A _________B ________С 1__________1________1 1__________0________1 0__________1________1 0__________0________0 Что ж - это не проблема, нам всего лишь нужно инвертировать полученный результат A _________B ________С________неС 1__________1________0________1 1__________0________0________1 0__________1________0________1 0__________0________1________0 А при физической реализации, добавить в схему инвертор. Логическое умножение: ______________________________ http://img3.imageshost.ru/imgs/4600e...0d2da3e7d4.jpg ______________________________ И тут тоже придется добавить инвертор. A _________B ________С________неС 1__________1________0________1 1__________0________1________0 0__________1________1________0 0__________0________1________0 Что ж вот основной принцип… А теперь займемся непосредственно формулами и логическими схемами, сегодня нам предстоит не много не мало, а придумать схему так называемого «полусумматора двоичных чисел», ведь мы знаем, что достаточно научить схему одному арифметическому действию – сложению, и получим какой ни какой, а процессор! Так, за помощь обратимся к двоичной системе счисления, попробуем сложить в двоичной системе, числа, имеется в виду не логическое сложение, а арифметическое. 1+1=10 1+0=1 0+1=1 0+0=0 Можете проверить с помощью калькулятора Windows. Что бы вам легче было понять, составим таблицу: (Арифметическое сложение, а не логическое, обратите внимание на знак «=», p s идут как одно число, это для того, что бы было видно разрядность числа ) A ____+____B ____=___P________S 1__________1________1________0 1__________0________0________1 0__________1________0________1 0__________0________0________0 A и В, числа которые складываем (в двоичной системе счисления), S – результат сложения (сумма), P – перенос из разряда, это нужно для случая 1+1=10, так как здесь, получается 10 (правильно говорить не десять, а один и ноль), то 1 пойдет в перенос (P) , а 0 в сумму (s), таким образом значение суммы(s) 0,1,1,0, значит мы должны найти такую формулу, при которой (Арифметическое сложение, а не логическое) A ____+____B _____=_____S 1__________1___________0 1__________0___________1 0__________1___________1 0__________0___________0 В одной из статей я показывал, как это делается – простым подбором. Вот искомая формула: S=(A+B)*не(A*B) Можете её проверить, вы это уже умеете. Для переноса (P) (Арифметическое сложение, а не логическое) A ____+____B _____=_____P 1__________1___________1 1__________0___________0 0__________1___________0 0__________0___________0 Тут и думать нечего, P=A*B, начертим логическую схему полусумматора двоичных чисел: ______________________________ http://img3.imageshost.ru/imgs/a5099...886a7b022d.jpg ______________________________ Надеюсь, вы все поняли, в следующих статьях мы разберем, как данные логические схемы реализовывать радиотехнически, и тп. Если же здесь есть механик, то он может взять сварочный аппарат и сделать механический полусумматор двоичных чисел:))) Желаю удачи! (c)Kerny |
начало дискретной алгебры,это знает любой
тему в топку |
ЭМ.. не согласен
|
учебник по дискретке копипастить не круто
|
Цитата:
|
а зачем это знать?
|
Если на программиста учишься,этому всегда учат :)
|
| Время: 11:03 |