Architecture des systèmes informatiques 1 partie. Portes logiques

Éléments logiques


Bonjour, je commence une série d'articles sur l'écriture d'une machine virtuelle dans la langue Golang. J'ai choisi cette langue car elle est facile à lire et possède les fonctions nécessaires dans la bibliothèque standard qui seront utiles à l'avenir.

Cet article ne contient absolument aucune nouvelle information pour ceux qui peuvent compiler des tables de vérité pour des portes logiques simples. Si vous savez comment, ne perdez pas de temps et passez à la deuxième partie.

Une porte logique est un appareil avec une ou plusieurs entrées et une ou plusieurs sorties. Dans cette partie, nous ne considérerons que les plus simples d'entre eux. Pour la modélisation des portes, nous n'utiliserons que les signaux 0 et 1, sans utiliser les caractéristiques d'entrée et de sortie des portes réelles.

Puisque nous travaillerons avec Golang, chaque élément peut être représenté comme une fonction.
Dans Go, la fonction ressemble à ceci:

func (   )    {     //     return    } 

Tampon


Il s'agit de l'élément le plus simple ayant une entrée et une sortie. En pratique, il est utilisé pour amplifier un signal ou créer un retard, parfois il peut être remplacé par un conducteur.

unBUF a
00
11

dans le cas du tampon, notre fonction ressemblera à ceci:

 func Buf(v bool) bool {    return v } 

Onduleur


Le même tampon, seule la sortie inverse le signal.

unPAS un
01
10

dans le cas d'un onduleur, la fonction ressemblera à ceci:

 func Inv(v bool) bool {    return !v } 

OU


Cet élément a besoin d'au moins un signal égal à 1 pour obtenir 1 en sortie.

unba OU b
000
011
101
111

 func Or(v, s bool) bool {    return v || s } 

Et


Il renvoie toujours 1, lorsque 1 est fourni à toutes ses entrées, dans tous les autres cas, il renvoie 0.

unba ET b
000
010
100
111

 func And(v, s bool) bool {    return v && s } 

OU exclusif


Pour obtenir 1 à la sortie, il est nécessaire d'appliquer différents signaux (0 et 1) ou (1 et 0) à l'entrée. Cette opération est utile car elle vous permet d'échanger deux variables sans utiliser de mémoire supplémentaire.

unba xor b
000
011
101
110

 func Xor(v, s bool) bool { //  (v ^ s)    ,   bool     ,       return (v || s) && !(v && s) } 

Ou pas


Il fonctionne comme un élément OR, seul un onduleur est connecté à sa sortie, à partir duquel nous obtenons un signal.

unba ni b
001
010
100
110

 func Nor(v, s bool) bool {    return !(v || s) } 

ET NON


L'élément fonctionne exactement de la même manière que l'élément And, seul le signal est inversé à la sortie.

unbun nand b
001
011
101
110

 func Nand(v, s bool) bool {    return !(v && s) } 

OU exclusif avec inversion


L'élément fonctionne de la même manière que l'élément OR, seul le signal est inversé en sortie.

unba XNOR b
001
010
100
111

 func Xnor(v, s bool) bool { //       return !((v || s) && !(v && s)) } 

Maintenant que les fonctions sont écrites, vous pouvez les assembler dans le package Gate, sur la base duquel nous allons implémenter des choses plus complexes. Notre hiérarchie de packages sera similaire à une véritable hiérarchie d'abstraction informatique. Le code source peut être trouvé ici .

Source: https://habr.com/ru/post/fr476100/


All Articles