Мне нужно спроектировать ALU с двумя 8-битными входами A и B и управляющими входами x, y и z, который поддерживает следующие операции:
x y z | operation
0 0 0 | S = A-B
0 0 1 | S = A+B
0 1 0 | S = A*8
0 1 1 | S = A/8
1 0 0 | S = A NAND B (bitwise)
1 0 1 | S = A XOR B (bitwise)
1 1 0 | s = reverse the bits of A
1 1 1 | S = NOT A (bitwise)
Это должно быть сделано с помощью 8-битного сумматора и арифметико-логического расширителя. Читая мой учебник, я вижу, что цель AL-расширителя состоит в том, чтобы изменить входные биты так, чтобы сумматор, а не много дополнительных компонентов, мог использоваться для всего (или, по крайней мере, это то, что я понимаю из него) ). Например, AL-расширитель может поместить биты в дополнение к двум, чтобы сумматор делал вычитание. Аналогично, для побитовых логических операций биты могут быть изменены соответствующим образом, и один из входов сумматора может быть просто нулем, чтобы результат был получен правильно.
Но что именно я делаю с умножением? Моя книга очень расплывчатая, поэтому я не уверен, что AL-extender потребует от меня сделать что-то умное, чтобы заставить сумматор работать (просто добавлю 8 раз в моем случае? ... ха-ха), или если я можно просто кинуть множитель туда. Я должен прочитать о делении, но я уверен, что это похоже на умножение.
Ну, так или иначе, суть в том, что AL-экстендер «разрешен» иметь / иметь в нем? Является ли его единственной целью изменить ввод, чтобы его можно было подать на сумматор?
* РЕДАКТИРОВАТЬ: Ну, это умножение / деление на 8, так что это может быть легко выполнено со сдвигом влево или вправо на 3. У меня все еще был бы настоящий / правильный AL-экстендер, если бы я добавил туда несколько сдвигов? (Может быть, я переосмысливаю это как полный новичок ...)