Як в ALU реалізуються різні функції (наприклад, додавання, віднімання тощо)?


9

Мені цікаво, оскільки існує дуже багато функцій, які потрібно виконати ALU, як я можу почати реалізовувати це (домашнє завдання, де я повинен впровадити систему MIPS з Logisim, використовуючи базові ворота, триггер тощо).

Частина, яку я плутаю, - це як я можу реалізувати ALU, який може виконувати різні функції, такі як Додати / Віднімати / І / АБО / тощо. Чи потрібно мені більше керувати логікою (див. Угорі справа в "попередньому призначенні" нижче).

У попередньому призначенні я реалізував ALU, який може робити Add / Subtract / Negate. Тепер я думаю, що АЛУ повинен мати можливість виконувати такі функції

Моє попереднє завдання

Відповіді:


7

Хоча внутрішні обчислення всіх відповідей, а потім використання мукс для вибору серед них буде працювати, це, звичайно, не мінімальний дизайн.

Подумайте, що ви можете трохи розрізати проблему; замість одного блоку логіки з двома 8-бітовими входами ви можете розділити це на два 4-бітні секції, доки ви можете зв'язати їх, щоб отримати правильний загальний результат. На щастя, з'єднання зрізів не гірше, ніж один біт, який у разі додавання являє собою несучий біт. Таким чином, кожен 4-бітний зріз має переносний біт і переносний біт. (Зверніть увагу, що такі логіки, як AND і NOR, цього навіть не знадобляться, хоча якщо згодом ви реалізуєте зсув вліво / вправо, цей біт легко перевстановлюється).

Якщо ви перенесені до крайності, ви можете використовувати 8 скибочок 1-бітної кожної. Корисно подумати над 1-бітовими фрагментами, оскільки це полегшує роздуми про підхід, який масштабує назад до великих фрагментів. Отже, з 1-бітовим фрагментом у вас всього 7 входів: 4-бітовий функціональний код, трохи від вводу A, трохи від входу B і біт перенесення. У вас також є лише два виходи: функціонувати та виконувати. Тож тепер ви можете записати дві функції виведення з точки зору всього 7 входів, що в межах сфери здатності людини розумно зменшити. У вас з'явиться кілька затворів, які не обов'язково завжди будуть обчислювати всі функції, але не має значення, що відбувається всередині фрагмента, лише те, що він дає правильний результат при погляді ззовні.

Тепер ви можете пройти пару шляхів. Один із способів - просто використовувати 8 цих 1-бітових фрагментів, і ви закінчили. Інший спосіб - зробити більші скибочки, а потім використовувати їх. Переходячи від 1-бітного до 2-бітного рівняння, рівняння переходять від 7 входів до 9, а для 4-розрядних знадобиться функцій 13 входів. Це не обов'язково просто, але дасть більш компактні результати, ніж підхід compute-all-then-mux. Крім того, якщо ви подивитесь на внутрішні частини 4-бітового ALU-фрагмента 74181, ви не побачите муксу.


Я більше орієнтувався на свою відповідь на тему "легко змусити голову почати з" кінця спектру, але дякую за вказівку більш оптимальної (апаратної) можливості.
Мартін Томпсон

5

Так, вам потрібно більше логіки управління.

Ваше попереднє завдання було суто арифметичним (це слово?), Тож ви можете використовувати одну суматор і масажувати входи, використовуючи керуючі сигнали, щоб створити потрібні функції

Ваші нові функції логічні , тому для виконання логічних операцій вам потрібен ще один блок. Сигнали управління змінять функціональність цього блоку.

Тоді внизу вашої діаграми вам знадобиться мультиплексор (іноді його називають «mux»), керований керуючими сигналами, щоб вибрати, який з відповідей ви збираєтесь виводити (той із суматора, і це схема «масажування вхідних даних» або з логічного оператора).

Якщо ви можете вибрати нові кодування для своїх контрольних ліній ALU, я можу спокусити використовувати MSB як "арифметичний / логічний" вибір, а інші вибрати "підфункцію", якщо це має сенс, оскільки це спрощує декодування для остаточний мукс.


Так, арифметичні - це слово :)
Маєнко

1
Мені здається просто арифметикою - це те слово, яке ти хочеш. Зауважте, це слово має наголос на третьому складі. З наголосом на другому складі це інше слово, яке стосується механіки виконання основних числових опертацій, як ви дізнаєтесь у школі класу.
Олін Латроп

1

Один приємний підхід до обробки логічних операцій полягає в тому, щоб біти двох операндів слугували введеннями селектора для 4-вхідного мультиплексора і подавали на входи "даних" мультиплексора чотирибітний шаблон, відповідний бажаній операції (як правило, у 8-бітний ALU, було б вісім мультиплексорів - по одному на кожен біт - і вхідні дані "8" мультиплексорів будуть пов'язані між собою).


начебто використання мультиплексора як дуже маленького ПЗУ - і це ще один спосіб, щоб використовувати фактичні ПЗУ.
JustJeff

Nx1-бітний ПЗУ є мультиплексором, вхід якого "дані" є провідним. У описаному нами сценарії введення мультиплексора "дані" було б вибором оператора. На практиці, ймовірно, можна використовувати невеликий ПЗУ для вибору декількох з 16 можливих логічних операцій, а також декількох інших операцій, з 3- або 4-розрядного коду (можна, за бажанням, передати опкод безпосередньо до логічний блок, але використовуйте інші мультиплексори для вибору інших операцій у випадках, коли опкод не створив би корисну логічну операцію).
supercat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.