Como várias funções (por exemplo, adicionar, subtrair e etc) são implementadas na ALU?

9

Eu estou pensando, já que existem tantas funções que uma ALU precisa executar, como posso começar a implementar uma (uma tarefa em que devo implementar um sistema MIPS com o Logisim, usando Gates básicos, chinelos etc.).

A parte em que estou confuso é como posso implementar uma ALU que pode executar diferentes funções como Adicionar / Subtrair / AND / OR / etc. Preciso controlar mais a lógica (veja o canto superior direito em "atribuição anterior" abaixo).

Em uma tarefa anterior, implementei uma ALU que pode adicionar / subtrair / negar. Agora, acho que uma ULA deve ser capaz de executar funções como

Minha tarefa anterior

Jiew Meng
fonte

Respostas:

7

Embora o cálculo interno de todas as respostas e o uso de um mux para selecionar entre elas funcionem, certamente não é um projeto mínimo.

Considere que você pode dividir o problema em bits; em vez de um único bloco de lógica com duas entradas de 8 bits, você pode particionar isso como duas seções de 4 bits, desde que possa vinculá-las para obter um resultado geral correto. Felizmente, vincular as fatias não é pior do que um único bit, que no caso de adição representa o bit de transporte. Portanto, cada fatia de 4 bits tem uma entrada e uma saída. (Observe que lógicas como AND e NOR nem precisarão disso, embora, se mais tarde você implementar turnos para a esquerda / direita, esse bit será reutilizado facilmente).

Levado ao extremo, você pode usar 8 fatias de 1 bit cada. É útil pensar nas fatias de 1 bit, porque facilita a reflexão sobre uma abordagem que aumenta de volta para fatias maiores. Portanto, com uma fatia de 1 bit, você tem apenas 7 entradas: o código de função de 4 bits, um pouco da entrada A, um pouco da entrada B e um bit de transporte. Você também tem apenas duas saídas: funcionar e executar. Portanto, agora você pode escrever as duas funções de saída em termos de apenas 7 entradas, que estão dentro do domínio da capacidade humana de reduzir razoavelmente. Você terminará com um punhado de portas que nem sempre necessariamente computarão todas as funções, mas não importa o que acontece dentro da fatia, apenas que produz o resultado correto quando visto de fora.

Agora você pode seguir algumas maneiras. Uma maneira é simplesmente usar 8 dessas fatias de 1 bit e pronto. Outra maneira é fazer fatias maiores e depois usá-las. Passando de 1 para 2 bits, as equações vão de 7 entradas para 9, e 4 bits exigirão funções de 13 entradas. Não é necessariamente fácil, mas fornecerá resultados mais compactos do que a abordagem computar tudo depois mux. Além disso, se você olhar para as partes internas de uma fatia ALU 74181 de 4 bits, não verá um mux lá.

JustJeff
fonte
Eu estava direcionando minha resposta mais para o final do espectro "fácil de entender", mas obrigado por apontar uma possibilidade mais ótima (em termos de hardware).
Martin Thompson
5

Sim, você precisa de mais lógica de controle.

Sua tarefa anterior era puramente aritmética (isso é uma palavra?); Portanto, você pode usar um somar somador e massagear as entradas usando os sinais de controle para criar as funções que deseja

Suas novas funções são lógicas , portanto, você precisa de outro bloco para executar operações lógicas. Os sinais de controle mudarão a funcionalidade deste bloco.

Então, na parte inferior do seu diagrama, você precisará de um multiplexador (às vezes chamado de 'mux') acionado pelos sinais de controle para escolher qual das respostas você irá emitir (a do somador e o circuito de "massagem de entrada" ou aquele do operador lógico).

Se você pode escolher novas codificações para suas linhas de controle da ALU, talvez eu fique tentado a usar o MSB como uma seleção "aritmética / lógica" e os outros a selecionar a "subfunção" se isso fizer sentido, pois simplifica a decodificação para o mux final.

Martin Thompson
fonte
Sim, aritmética é uma palavra :) #
Majenko 21/10
11
Parece-me que apenas aritmética é a palavra que você deseja. Observe que esta palavra tem ênfase na terceira sílaba. Com o sotaque da segunda sílaba, é uma palavra diferente referente à mecânica de executar operações numéricas básicas, como você aprende na escola primária.
Olin Lathrop
1

Uma boa abordagem para lidar com operações lógicas é fazer com que os bits dos dois operandos sirvam como entradas seletoras para um multiplexador de 4 entradas e alimente as entradas de "dados" do multiplexador com um padrão de quatro bits correspondente à operação desejada (normalmente em uma ULA de 8 bits, haveria oito multiplexadores - um para cada bit - e as entradas "dados" de todos os 8 multiplexadores seriam ligadas).

supercat
fonte
meio que usar um multiplexador como uma ROM muito pequena - e esse é outro caminho, usar as ROMs reais.
JustJeff
Uma ROM de Nx1 bits é um multiplexador cujas entradas de "dados" são cabeadas. No cenário que descrevi, as entradas de "dados" do multiplexador seriam selecionadas pelo operador. Na prática, provavelmente seria usada uma pequena ROM para selecionar algumas das 16 operações lógicas possíveis, além de algumas outras operações, de um código de operação de 3 ou 4 bits (seria possível, se desejado, passar o código de operação diretamente para o unidade lógica, mas use outros multiplexadores para selecionar outras operações nos casos em que o código de operação não geraria uma operação lógica útil).
Supercat 23/10