Звоните! (926)274-88-54 Бесплатная доставка. Бесплатная сборка. |
Ассортимент тканей График работы: Ежедневно. С 8-00 до 20-00. Почта: soft_hous@mail.ru |
|
(926)274-88-54 ГлавнаяИнтернет-магазинТкани в наличииМягкая мебельДиваны еврокнижка
Диван-кровать
Диван книжка
Кожаные диваны
Угловые диваны
Кресло-кровать
Недорогие диваны
Кресла
Диваны с фабрики
Кожаная мебель
Производство
Недорогая мебель
Как купитьЗаказ мебелиМебель для домаКухниШкафы купеОфисная мебельШкольная мебельПродажа мебели
Карта сайта
Вакансии
Схема проезда
(926)274-88-54
|
Читальный зал --> Программные средства foundation Combine moves for each cell. Gil = Rll # Cll # Dll; G12 = R12 # C12; G13 = R13 # C13 # E13; G21 = R21 # C2i; G22 = R22 # C22 # D22 # E22; G23 = R23 # C23; G31 = R31 # C31 # E31; G32 = R32 # C32; G33 - R33 # C33 # D33; equations WHEN G22 THEN MDVE= M0VE22; ELSE WHEN Gil THEN MOVE = MOVEU ELSE vfflEN G13 THEN MOVE - M0VE13 ELSE WHEN 031 THEN MOVE - MDVE31 ELSE WHEN G33 THEN MOVE - M0VE33 ELSE WHEN G12 THEN MOVE - M0VE12 ELSE WHEN G21 THEN MOVE = M0VE21 ELSE WHEN G23 THEN HOVE = M0VE23 ELSE VHEN G32 THEN MOVE - M0VE32 ELSE MOVE = TONE; end twoinrow Gxy ==> a move exists in cell xy Обратите внимание, что необходимо использовать вложенный оператор WHEN, а не девять параллельных операторов WHEN или присваиваний, поскольку выбрать нужно только один ход, даже если имеется несколько возможностей. Заметьте также, что первой проверяется центральная клетка G22, а потом - угловые клетки. Это делается в надежде, что, помещая наиболее частые ходы во вложенном операторе WHEN раньше, мы минимизируем число термов. Увы, нашему проекту все еще требуется масса термов-произведений, как следует из табл. 6.14. Между прочим, мы до сих пор не объяснили, почему выбран тот способ кодирования вьЕходньЕх сигналов, который указан в программе для M0VE11, MOVE 2 2 и т.д. Довольно очевидно, что изменение способа кодирования не позволит сократить число термов-произведений настолько, чтобы схема могла быть размещена в ИС 22V10. Однако, как сейчас будет показано, все же существует метод борьбы с кошмарным числом термов-произведений. Табл. 6.13. Программа на языке ABEL для нахождения двух меток подряд при игре в крестики и нолики (продолжение) С32 = Х12 & Х22 & !Х32 & !У32; СЗЗ = Х13 & Х23 & !ХЗЗ к !УЗЗ; Find moves in diagonals. Dxy or Exy ==> a move exists in cell xy Dll = X22 к X33 к !X11 к !Y11; D22 = Xll & X33 & !X22 & !У22 D33 - Xll & X22 & !X33 к !Y33 E13 = X22 & X31 k !X13 & !Y13 E22 = X13 & X31 & !X22 & >Y22 E31 = X13 к 122 к !X31 & !У31 P-Teras Fan-in Fan-out Type Каше 61/142 107/129 77/88 133/87 378/446 18 18 17 18 Pin MOVES Pin M0VE2 Pm MDVEl Pm MOVEO Табл. 6.14. Использование термов-произведений в ПЛУ TWOINROW Best P-Term Total: 332 Total Pins: 22 Average Р-Тегш/Qutput; 83 Ясно, что необходимо разбить блок TWOINROW на две или большее число частей. Как и в любой задаче проектирования, при этом возможны несколько различных стратегий. Первая стратегия, которую я попробовал, состояла в использовании двух различных ПЛУ, из которых одно п{5едназначалось для поиска ходов по всем строкам и по одной из диагоналей, а другое - для нахождения ходов по всем столбцам и остающейся диагонали. Это помогло, но не настолько, чтобы каждая половина помещалась в ИС 22V10. Вторая стратегия состояла в попытке разделить задачу на части другим путем, когда первое ПЛУ находит все ходы в клетки 11, 12, 13, 21 и 22, а второе ПЛУ -все ходы в остающиеся клетки. Это сработало! Программа для первого ПЛУ, названного TVЮINHAF, получается из табл. 6.13 простым переведением в комментарий четырех строк оператора WHEN, относящихся к клеткам 23, 31, 32 и 33. Аналогично из программы для TWOINROW можно получить программу для второго ПЛУ, но подождите минуту. При изготовлении реальных цифровых систем всегда желательно минимизировать число различных типов применяемых блоков: это сокращает стоимость изделия и уменьшает его сложность. Точно так же в отношении профаммируемых блоков желательно минимизировать число различных используемых профамм. Даже если блоки реализуются на одних и тех же ПЛУ, для каждой новой профаммы необходимо составлять новый набор тестовых векторов, а это стоит денег Кроме того, изделие может оказаться настолько удачным, что можно будет сэкономить, заменив ПЛУ жестко запрограммированными ИС для каждой профаммы, а это снова подталкивает нас к минимизации числа различных профамм. Ифа в крестики и нолики останется той же самой ифой, если мы повернем игровое поле на 90° или на 180°. Но если повернуть поле на 180°, то ПЛУ TWOINHAF сможет находить ходы в клетки 33, 32, 31, 23 и 22. Выбранный способ представления текущего состояния поля отдельной парой чисел для каждой клетки позволяет повернуть поле просто путем соответствующей перестановки этих пар чисел. Другими словами, достаточно поменять местами содержимое следующих клеток: 33 11, 32 12, 31<- 13 и 23<- 21. При смене содержимого клеток профамма TWOINHAF будет по-прежнему выдавать коды ходов в клетки в верхней половине поля. Чтобы не было ошибок, необходимо преобразовать эти результаты в коды, соответствующие клеткам в нижней половине поля. Хорошо бы такое преобразование потребовало TWOINHAF Х11-ХЗЗ Y11-Y33 41> Х11-ХЗЗ M0VE(3 0] Y11-Y33 TWOINHAF pj- Х11-ХЗЗ MOVE(3 0) Y11-Y33 TWOINHAF X11-X33 M0VE[3 0) Y11-Y33 TWOINHAF Xll X33 MOVE(3 01 Y11-Y33 4 -7 PICK1 WINA(3 0] WINB(3 0) MOVEP 0) BLKA(3 0) BLKB(3 01 X22 Y22 PICK2 допоши тэьгая лотка Р1СК[3 0) MOVEO 0] MOVE(3 0I Рис. 6.13. Окончательное разбиение схемы для игры в крестики и нолики на блоки, реализуемые в ПЛУ Блоком PIGK1 реализуется совсем простая функция. Как следует из табл. 6.15, она состоит просто в том, что делается победный или блокирующий ход в случае, когда они имеются. Так как у ПЛУ 22V10 есть два дополнительных вхо- минимума логики. Это как раз то место, где пригодится выбранный нами способ кодирования ходов. Если вы внимательно посмотрите на коды MOVE в начале табл. 6.13, то вы увидите, что ход в клетку, занимающую данное положение в результате поворота поля на 180°, представлен кодом, который получается из кода для хода в клетку, занимающую то же самое положение nq, поворота поля, путем побитного дополнения и изменения порядка следования битов. Другими словами, нужное преобразование кода можно реализовать четырьмя инверторами и переключением соединений. Это можно делать бесплатно в ПЛУ, которое анализирует сигналы на выходах блоков TWOINHAF. Вы, вероятно, никогда не думали, что игра в крестики и нолики может быть настолько запутанной. Но мы уже на полпути к решению задачи. Давайте продолжим наше проектирование с учетом разбиения на блоки, показанного рис. 6.13. Каждое ПЛУ TWOINROW, появившееся при первоначальном разбиении на блоки, заменено теперь парой ПЛУ TWOINHAF. Нижним ПЛУ в каждой паре предшествуют блоки, помеченные буквой Р, в каждом из которых переставляется содержимое клеток так, чтобы тем самым повернуть поле на 180°, как об этом говорилось выше. Кроме того, за каждым из этих ПЛУ следует блок, помеченный буквой Т, в котором компенсируется поворот поля путем преобразования выходного кода; в действительности, эти блоки будут поглощены следующим за ними ПЛУ PICK1. ООО «Мягкий Дом» - это Отечественный производитель мебели. Наша профильная продукция - это диваны еврокнижка. Каждый диван можем изготовить в соответствии с Вашими пожеланияи (размер, ткань и материал). Осуществляем бесплатную доставку и сборку. Звоните! Ежедневно! (926)274-88-54 Продажа и изготовление мебели. Копирование контента сайта запрещено. Авторские права защищаются адвокатской коллегией г. Москвы. |