Est-il possible de définir tous les opérateurs au niveau du bit en utilisant un «nand au niveau du bit» similaire à la façon dont toute logique booléenne peut être construite en utilisant uniquement le «nand booléen»?

9

Nand est connu comme une porte logique «universelle», car il vous permet de définir toutes les autres portes logiques booléennes:

not(x) = nand(x,x)
and(x, y) = not(nand(x, y))
or(x, y) = nand(not(x), not(y))
nor(x, y) = not(or(x, y))
xor(x, y) = nand(nand(a, nand(a, b)), nand(b, nand(a, b)))

Ceci est connu sous le nom de logique nand , et est couramment utilisé dans les ordinateurs modernes car un transistor peut être fait pour se comporter comme une porte nand.

Je me demande s'il est possible de faire quelque chose de similaire avec les opérations au niveau du bit. Un peut par exemple au niveau du bit nand (bnand) être utilisé pour définir bnot, bor, band, bnor, bxor? Existe-t-il une opération universelle au niveau du bit?

Qqwy
la source

Réponses:

13

Au niveau matériel, il n'y a pas de différence entre le bit à bit et la logique. Donc oui. Une opération logique n'est qu'une opération au niveau du bit sur un seul bit.

Martin Maat
la source
2

Sur la plupart des microprocesseurs modernes, les opérations au niveau du bit sont implémentées de manière native, de sorte qu'il n'y a aucun avantage à avoir une opération NAND.

Par exemple, le jeu d'instructions x86 a: AND , OR , XOR , NOT . Autant que je sache, toutes ces opérations sont effectuées en un seul cycle, de sorte qu'il n'y aurait aucun avantage à les remplacer par plusieurs opérations NAND. Il a également ANDN qui est un équivalent pour ((NOT x) AND y)celui qui pourrait être généré par un compilateur d'optimisation intelligent pour gagner un cycle.

Le mouvement RISC a essayé de promouvoir un jeu d'instructions réduit pour une architecture plus simple et plus performante. L'idée était que les compilateurs devraient combiner des instructions plus simples et plus rapides. Il apparaît cependant qu'en dehors de certains processeurs expérimentaux ou pédagogiques, la plupart fournissent nativement NAND ainsi que les opérations habituelles au niveau du bit (par exemple PowerPC ou ARM ).

Christophe
la source
Je ne sais vraiment pas comment les opérateurs booléens sont implémentés dans les processeurs ces jours-ci, mais il était assez courant d'utiliser un multiplexeur 4 à 1, en alimentant "la table de vérité" comme 4 entrées, puis en utilisant les deux bits pour fonctionner comme sélecteur pour la sortie. Vous donne un seul circuit qui peut être utilisé pour les 16 fonctions booléennes à deux opérandes.
Vatine
2
Le fait que OR, XOR et NOT soient implémentés "nativement" et ne prennent pas plus d'un seul cycle d'horloge ne dit pas s'ils sont construits en utilisant uniquement des circuits NAND ou non. Je soupçonne qu'ils sont construits en utilisant uniquement des NAND ces jours-ci, car les transistors sont vraiment bon marché et très rapides. La méthode 4 en 1 de Vatine est optimisée pour l'utilisation d'un petit nombre de transistors, ce qui est inutile à l'ère du nanomètre.
Martin Maat
RISC a perdu son sens avec le temps. À son apparition, les instructions complexes typiques prenaient plusieurs cycles d'horloge, comme 10 environ. Et il ne s'agissait pas d'OR / AND / NOT, ceux-ci étaient déjà rapides et considérés comme "simples" et essentiels pour tout processeur, de sorte qu'ils ne seraient certainement pas abandonnés par un processeur RISC. Aujourd'hui, les instructions complexes prennent moins d'un cycle d'horloge (en raison du pipelining et du multi-threading / multi-core.
Martin Maat