Eu estava implementando a ALU a partir das especificações fornecidas no meu livro de sistemas The Elements of Computing. Estou preso em apenas um problema. Como faço para descobrir se um determinado número é zero ou não. Uma coisa que posso fazer é ou quase tudo no ônibus e, em seguida, aplico um não portão nisso. Mas tem que haver alguma outra solução elegante.
16
Respostas:
Simplesmente não há maneira de contornar ORing todos os bits, por mais insatisfatório que isso possa parecer. No entanto, você também não está restrito a duas portas de entrada em silicone. Você pode criar uma porta NOR de 4 entradas na lógica do CMOS, colocando 4 transistores do tipo p da série na rede pullup e 4 transistores paralelos do tipo n na rede de pulldown. Isso reduz a profundidade da topologia de sua árvore e, portanto, o atraso na propagação. Você só pode levar essa teoria até agora, antes que a queda de tensão acumulada nos transistores da série faça com que a tração não seja suficiente para ser um "1" ... quatro é uma boa regra geral, se bem me lembro.
fonte
A função lógica é a porta NOR. Essa é a função lógica mais simples que existe.
fonte
A solução típica com máquinas de 8 bits era que a ALU produziria um número de bits 'flag' que representariam o resultado da operação mais recente. Embora seja possível ter qualquer número de bits de flag ao redor (por exemplo, você pode ter um flag 'Z' para cada registro em sua CPU), geralmente é o que você acabou de calcular que mais interessa, então faz certo sentido fazer dessa maneira.
Algumas dessas CPUs antigas definiam automaticamente os bits de flag para quase todas as movimentações de dados, enquanto outras exigiam que você ficasse uma instrução específica de 'comparação' no seu código, se de repente você precisasse saber se um determinado registro era zero. E se você fornece uma verificação zero para cada registro ou apenas para o que acabou de ser calculado, realmente não há maneira mais simples de verificar "essa palavra é zero" do que apenas OU todos os bits juntos.
fonte
Algumas CPUs, MIPS, por exemplo, têm um registro que sempre contém zero, tornando muito rápido o teste de outro registro para zero.
fonte
Sou um grande fã
or_reduce
- a maioria das ferramentas de síntese irá otimizar para a melhor implementação, pois elas sabem exatamente o que você está fazendo.fonte