J'implémentais l'ALU à partir des spécifications données dans mon livre The Elements of Computing Systems. Je suis coincé sur un seul problème. Comment savoir si un nombre donné est nul ou non. Une chose que je peux faire est ou tout dans le bus, puis appliquer un pas de porte sur cela. Mais il doit y avoir une autre solution élégante.
16
Réponses:
Il n'y a tout simplement aucun moyen de contourner OU tous les bits, aussi insatisfaisant que cela puisse paraître. Cependant, vous n'êtes pas non plus limité à deux portes d'entrée en silicium. Vous pouvez créer une porte NOR à 4 entrées dans la logique CMOS en plaçant 4 transistors de type p de série dans le réseau de pullup et 4 transistors de type n parallèles dans le réseau de conversion. Cela réduit la profondeur de votre topologie d'arbre et donc votre retard de propagation. Vous ne pouvez pousser cette théorie jusqu'à présent qu'avant que la chute de tension cumulée à travers les transistors de la série ne fasse que le pull-up ne soit pas assez "1" ... quatre est une bonne règle si je me souviens bien.
la source
La fonction logique est la porte NOR. C'est la fonction logique la plus simple qui existe.
la source
La solution typique avec les machines à 8 bits était que l'ALU produirait un certain nombre de bits «indicateurs» qui représenteraient le résultat de l'opération la plus récente. Bien qu'il soit possible d'avoir un nombre quelconque de bits de drapeau autour (c'est-à-dire que vous pourriez avoir un drapeau 'Z' pour chaque registre de votre CPU), c'est généralement la chose que vous venez de calculer qui vous intéresse le plus, donc il est logique de procéder ainsi.
Certains de ces anciens processeurs définiraient automatiquement des bits de drapeau pour presque tous les mouvements de données, tandis que d'autres vous obligeraient à coller une instruction de `` comparaison '' spécifique dans votre code si vous avez soudainement besoin de savoir si un certain registre était nul. Et que vous fournissiez une vérification de zéro pour chaque registre ou simplement pour ce qui vient d'être calculé, il n'y a vraiment pas de moyen plus simple de vérifier «si ce mot est zéro» que de simplement OU tous les bits ensemble.
la source
Certains processeurs, MIPS par exemple, ont un registre qui contient toujours zéro, ce qui rend le test d'un autre registre à zéro très rapide.
la source
Je suis un grand fan de
or_reduce
- la plupart des outils de synthèse l'optimiseront pour la meilleure implémentation car ils savent exactement ce que vous faites.la source