Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exo circuit combinatoire

Produits de 2 entiers en utilisant des addiotionneurs 4 bits

27 décembre 2014 à 22:52:45

Bonsoir, 

Quelqu'un pourrai m'aider a résoudre cet exercice svp, perso je ne vois pas trop comment faire ...

J'aurai également besoin d'un coup de main pour cet exo svp car a part faire une table de vérité de 256 supposition je vois pas ... 

Merci

-
Edité par Altaiir95 27 décembre 2014 à 23:34:08

  • Partager sur Facebook
  • Partager sur Twitter
28 décembre 2014 à 12:26:24

C'est juste de la logique ;)

Voici un petit exemple de multiplication : 7*2 = 14

En binaire, cela donne : 00000111 * 00000010 = 00001110

Si tu regardes bien ce qu'est devenu le 7, tu constatera qu'il s'agit d'un simple décalage à gauche avec l'ajout d'un zero sur la droite.

Si l'on multiplie par 4, c'est 2 décalages : 7*4=28 et en binaire : 00000111 * 00000100 = 00011100

Supposons maintenant que tu veux faire x*5, cela revient à faire x*4+x

La multiplication par 4, tu sais faire (c'est un décalage de 2) et le +x, tu sais faire aussi avec un additionneur ;)

Bref, à toi de décomposer en la multiplication en décalages et en une seule addition.

  • Partager sur Facebook
  • Partager sur Twitter
28 décembre 2014 à 13:08:41

Oui je vois ce que tu veux dire, enfaîte la parti ou j'ai du mal c'est comment je pourrai savoir le bit de B est égal a 0 ou a 1 car si il est égal a 0 je ne peu pas ajouter A ... :/

J'ai pensais a utiliser un comparateur mais je n'arrive pas a concrétiser cet idée que je le voudrai :/

  • Partager sur Facebook
  • Partager sur Twitter
28 décembre 2014 à 13:40:38

Tu comptes en faire quoi de ton comparateur ?

Parce que celui-ci va comparer le bit par rapport à quelques chose et te retourner soit 1, soit 0.

Au final, tu n'auras rien changé à ton problème :-°

Il te faut utiliser des MUX (multiplexeur).

Sur un entrée du MUX, tu mets le signal A, sur l'autre entrée, tu mets le signal A+A.

Et tu te sert du bit de poid faible de B comme entrée de sélection du MUX.

  • Partager sur Facebook
  • Partager sur Twitter
28 décembre 2014 à 14:05:32

Et bien pas grand chose x) , je n'ai rien pu en faire ^^ :/

En effet ton idée semble plus simple à realiser, je vais essayer de faire quelques chose. 

Parcontre comment puis je faire A + A decalé d'une position avec un add 4 bits ? dois je utiliser un registre a decalage ou y'a t'il plus simple ? ( je dois avouer que je preferai ne pas avoir a utiliser de registre car je ne les maitrise pas encore tres bien )

Pour le 2eme exo aurai tu une idée de comment faire sans passer par une enorme table de vérité ? 

-
Edité par Altaiir95 28 décembre 2014 à 14:08:19

  • Partager sur Facebook
  • Partager sur Twitter
30 décembre 2014 à 14:53:51

J'ai beau réfléchir je n'ai pas d'idée ... j'ai pensais a mettre le 1er bit de A sur la 2eme entrée de l'add 4 bits sur l'entrée A + A du mux et mettre la premiere entrée de l'add 4 bits a 0 mais je n'ai pas ou mettre le dernier bit ... :/
  • Partager sur Facebook
  • Partager sur Twitter
30 décembre 2014 à 19:11:55

Pour le premier exo, tu peux utiliser des multiplexeurs.

Imaginons un nombre sur 4 bits que l'on nomme A3,A2,A1,A0 et un autre B3,B2,B1,B0.

Si tu envoies A3,A2,A1,A0 et B3,B2,B1,B0 sur ton additionneur, tu auras donc A+B en sortie

Maintenant, si tu envoie A avec un décalage de 1 sur la gauche (A2,A1,A0,0) et B sans décalage, tu auras (A*2)+B en sortie.

Maintenant, à toi de jouer avec tes mux pour envoyer les bon bits au bon endroit.


Pour le deuxième exo, je ne sais pas si ma solution est vraiment autorisée ^^

Personnellement, j'aurais fait une addition en complément à deux (ce qui revient à faire une soustraction) et j'aurais regardé le 5ème bits (ce qui correspond au bit de signe) qui te donne directement le résultat (0 signifie que A>=B et 1 signifie que A<B).

Mais bon, si tu n'as jamais entendu parlé de bit de signe et de représentation en complément à 2, ton correcteur aura du mal à croire que tu as trouvée la solution tout seul.

-
Edité par lorrio 30 décembre 2014 à 19:16:19

  • Partager sur Facebook
  • Partager sur Twitter
30 décembre 2014 à 19:56:59

Merci, je n'avais pas du tout fait attention au fait que A double quand on le décale .. c'est beaucoup plus simple ainsi ^^

Pour la 2eme solution je peu l'utiliser, on a déjà vu le complément a 2, c'est en effet une excellente idée ! 

  • Partager sur Facebook
  • Partager sur Twitter
30 décembre 2014 à 22:15:53

Le chiffre A qui double quand on décale, c'est l'objet de mon premier message ;)

lorrio a écrit:

C'est juste de la logique ;)

Voici un petit exemple de multiplication : 7*2 = 14

En binaire, cela donne : 00000111 * 00000010 = 00001110

Si tu regardes bien ce qu'est devenu le 7, tu constatera qu'il s'agit d'un simple décalage à gauche avec l'ajout d'un zero sur la droite.

Si l'on multiplie par 4, c'est 2 décalages : 7*4=28 et en binaire : 00000111 * 00000100 = 00011100

Supposons maintenant que tu veux faire x*5, cela revient à faire x*4+x

La multiplication par 4, tu sais faire (c'est un décalage de 2) et le +x, tu sais faire aussi avec un additionneur ;)

Bref, à toi de décomposer en la multiplication en décalages et en une seule addition.




-
Edité par lorrio 30 décembre 2014 à 22:16:47

  • Partager sur Facebook
  • Partager sur Twitter
31 décembre 2014 à 14:26:41

En effet ^^  

mais je dois avouer que j'ai du mal a concrétiser la chose, je me retrouve a chaque fois avec 5 bits :'(

  • Partager sur Facebook
  • Partager sur Twitter
31 décembre 2014 à 16:42:27

Voici ce que j'ai fait pour le 2eme, qu'en pense tu ? je ne suis pas très sur concernant les sortie de mon comparateur ( je ne sais pas celui ci peut afficher autre chose que 0 et 1 enfaîte, est ce que je peu lui mettre ce que je veux en sortie ? ) 

Pour le 1er malheureusement toujours bloqué :/ 

Bon réveillons et bonne nouvelle année ^^ :) 

  • Partager sur Facebook
  • Partager sur Twitter
31 décembre 2014 à 17:41:44

Je ne t'es absolument pas parlé de comparateur.

J'ai dis que je prendrais un additionneur en complément à 2 et que j'utiliserais la sortie du 5ème bit (donc la sortie R et non S3) comme entrée de sélection d'un multiplexeur.

Vu que ton exercice te demande de donner en sortie le plus grand chiffre entre A et B, il te faut forcément 4 multiplexeurs 2vers1 afin d'avoir 4 bits en sorties.

J'ai quand même un doute : depuis le temps que j'en parle, sais tu ce qu'est un multiplexeur ou n'en as tu jamais entendu parlé ?


Pour ton premier exercice, je t'ai quand même bien mis sur la route en te disant :

- que les multiplication par 2 sont des décalages

- qu'il faut décomposer ta multiplication (encore un exemple : x*7 revient à faire x*4+x*2+x, sachant que *4 est un décalage de 2 et que *2 est un décalage de 1)

- d'utiliser des multiplexeurs pour envoyer les bon bits au bon endroit sur tes additionneurs (en clair, les multiplexeurs servent à faire la multiplication)

Difficile de t'en dire plus sans te donner la solution finale...

Maintenant, c'est à toi de réfléchir comment organiser tout ça ;)

Bon réveillons et bonne nouvelle année à toi aussi.

-
Edité par lorrio 31 décembre 2014 à 17:46:31

  • Partager sur Facebook
  • Partager sur Twitter
31 décembre 2014 à 19:25:08

Oui ! je l'ai refais avec des Mux : 

Sinon pourrai tu me dire si dans les sortie d'un comparateur on peu avoir autre chose que 0 et 1 ? et peu ont avoir plus de 3 sortie ? 

Je vais essayer de revoir pour l'exo de la Multiplication, j'ai du oublier quelques chose ...  enfaîte mon principal blem est que je ne sais pas comment gérer le decalage avec un add 4 bits ...  supposons que je decale A j'aurai donc 0 A0 A1 A2 mais il manquera A3 ... je ne vois pas comment faire a ce niveau

-
Edité par Altaiir95 31 décembre 2014 à 20:05:08

  • Partager sur Facebook
  • Partager sur Twitter
1 janvier 2015 à 4:55:21

Ah, voila, c'est quand même mieux avec des mux !

Essayes de tester ton système dans différents cas possible histoire d'être sûre qu'il fonctionne ;)


Pour moi, un comparateur sert à comparer 2 nombre du genre A est-il plus grand que B ?

Donc il te renvoie forcément 0 ou 1 pour dire :

- 0: non, A n'est pas plus grand que B

ou

- 1: oui, A est plus grand que B

Ton comparateur a 3 sorties car il s'agit d'un triple comparateur qui te renvoie 3 réponses :

- A est-il plus grand que B ?

- A est-il égal à B ?

- A est-il plus petit que B ?

Donc il va te renvoyer 3 bits : un pour chaque question.


Il te manque A3, et alors ? Il disparait, un point c'est tout puisque tu es sur 4 bits.

Prenons un exemple simple : multiplions 5 par 4.

Cela donne 20 et donc 10100 en binaire.

Sauf que 10100 est un chiffre sur 5 bits qu'il est impossible de faire tenir sur 4 bits.

Tu as donc un overflow puisque ton câblage sur 4 bits ne permet de ne garder que la partie verte de : 10100


On peut aussi pousser le vis à l’extrême en demandant de multiplier 15 par 15.

SI l'on regarde bien : 15 tient sur 4 bits puisque cela donne 1111 en binaire.

Sauf que 15*15 = 255 = 11100001 en binaire, largement en dehors des capacités d'une représentation sur 4 bits.

Au final, multiplier 15 par 15 sur 4 bits donne 0001 en binaire soit le chiffre 1 en décimal.

-
Edité par lorrio 1 janvier 2015 à 4:59:45

  • Partager sur Facebook
  • Partager sur Twitter
1 janvier 2015 à 13:46:26

Dacc merci je vois un peu plus clair, est ce que en gros l'idée serai de faire quelques chose comme ça ? ( c'est juste un brouillant, pour l'appliquer il faudrait plusieurs mux 8 vers 1 ) 

  • Partager sur Facebook
  • Partager sur Twitter
1 janvier 2015 à 14:32:49

Au lieu de bidouiller des bouts de dessins qui font on ne sait quoi, il faut essayer d'avoir une approche un peu structurée

 max(A,B) = si A > B  alors A sinon B

  • Le si alors sinon c'est un multiplexeur dont le bit de commande est piloté par la condition
  • comparer, c'est étudier la différence, et plus précisément son signe.

 Une approche pour la comparaison est d'ajouter A au complément de B +1, ce qui prend une rangée d'inverseurs, d'additionneurs (dont celui de droite prend 1 comme retenue entrante) et d'éliminer toutes les portes dont les sorties ne nous intéressent pas, c'est à dire tout sauf la retenue sortante de gauche. Il ne devrait pas rester grand chose.

-
Edité par michelbillaud 1 janvier 2015 à 14:36:11

  • Partager sur Facebook
  • Partager sur Twitter
1 janvier 2015 à 14:57:18

Plusieurs mux 8vers1 en 4bits ? Cela me semble un montage bien complexe.

Mais pourquoi pas ;)

Essayes de tester ton montage dans différents cas, tu verras bien si ça marche.


Par contre, en y réfléchissant encore un peu plus, je viens de voir que l'on peut faire ça sans mux.

On doit pouvoir faire cette multiplication avec seulement 3 additionneurs 4bits ainsi que 10 porte logique ET ;)

  • Partager sur Facebook
  • Partager sur Twitter
1 janvier 2015 à 16:37:12

Mmmm d'acc je vais essayer de penser a cette solution, dans les adds 4 bits, dans un tu met A + 0, un autre A+ A decalé de 1 et le dernier A + A decalé de 2 ?
  • Partager sur Facebook
  • Partager sur Twitter
1 janvier 2015 à 17:26:21

Décomposes ta multiplication, je te dis ça depuis le début.

Dans le pire cas, il te faut faire x*15, ce qui revient à faire x*8 + x*4 + x*2 + x

Tu remarqueras que dans x*8 + x*4 + x*2 + x, il n'y a que 3 additions donc c'est possible de câbler ça en 3 additionneurs

  • Partager sur Facebook
  • Partager sur Twitter
2 janvier 2015 à 14:32:33

Mmmm je vais essayer d'y réfléchir mais pour le moment je ne vois pas trop comment faire :s
  • Partager sur Facebook
  • Partager sur Twitter
2 janvier 2015 à 14:45:58

Eh bien réfléchie s'y, je ne vais pas te donner la solution à copier/coller, ce serait trop simple ;)
  • Partager sur Facebook
  • Partager sur Twitter
2 janvier 2015 à 18:05:53

Commence par poser une multiplication,, sur le papier

      1 0 1 1
  x     1 1 0
     ----------
      0 0 0 0        a
    1 0 1 1          b
  1 0 1 1            c
----------------
    ?

Questions :

- comment obtient on les lignes a, b et c

- comment faire le résultat ?

  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2015 à 0:13:05

C'est bien ce que je dis :)

Trois additionneurs, quelques décalages et des portes ET pour faire les zéros.

  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2015 à 1:12:25

On obtient a b et c en faisant la multiplication de chaque bit de B avec a ... , pour le résultat on l'obtient par addition. Est ce que j'ai le droit de faire par exemple A0 ET logique B0 sur une même entré d'un add 4 bits ?
  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2015 à 10:03:21

  • Tu obtiens a (...) en faisant la multiplication de chaque bit de B avec a ? Tu es sûr ?  Faudrait faire un effort pour être un minimum rigoureux dans ce que tu écris, et ce que tu imagines, sinon tu t'en sortira pas....
  • Tu crois que tu iras en enfer si tu le fais et que tu n'avais pas le droit ?  Ca déplaira à une divinité supérieure ? C'est quoi le sens de ta question "j'ai le droit" ?
  • avec les vrais circuits, il y a des contraintes du genre "avec cette techno la même sortie ne peut pas être reliée à plus de N entrées parce que sinon ça pompe trop de courant". de De 2 à 10 pour du TTL, et jusqua plusieurs milliers pour du CMOS. Mais tu n'en es pas là. http://fr.wikipedia.org/wiki/Sortance

EDIT:

 @lorio : peut etre qu'il en faut moins que 3. On a trois nombres de 4 bits décalés à additionner

          a3 a2 a1 a0
+      b3 b2 b1 b0
+   c3 c2 c1 c0
----------------------
 r6 r5 r4 r3 r2 r1 r0  

Le résultat tient sur 7 bits parce qu'au maximum, il vaut 7 x 15 = 105 qui est plus petit que 128.

- pour trouver r0, y a pas besoin de circuit additionneur

- ensuite, si on a un premier additionneur 4 bits, autant bien l'employer en remplissant toutes ses entrées. On peut donc d'abord additionner  b3a3a2a1 et c2b2b1b0 , ce qui nous donne un résultat intermédiaire y4y3y2y1y0 à qui il faudra encore ajouter les bits c3 c1 et c0 qui n'ont pas encore été pris en compte. Mais pour ça, un seul additionneur 4 bits, ça suffit.

          a3 a2 a1 
+      b3 b2 b1 b0
+      c2 
----------------------
    y4 y3 y3 y1 y0    

    y4 y3 y3 y1 y0    
    c3    c1 c0
---------------------
 r6 r5 r4 r3 r2 r1 

 Donc en tout, deux addtionneurs 4 bits.

-
Edité par michelbillaud 3 janvier 2015 à 11:01:01

  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2015 à 12:07:11

Sauf que la consigne, c'est de multiplier deux nombres 4 bits, ce qui donne :

.               x3 x2 x1 x0
              * y3 y2 y1 y0
 ---------------------------
                a3 a2 a1 a0
 +           b3 b2 b1 b0
 +        c3 c2 c1 c0
 +     d3 d2 d1 d0
 ---------------------------
    z7 z6 z5 z4 z3 z2 z1 z0

Avec a0 = x0*y0 et comme on est en binaire, la multiplication de 2 bits se fait avec une porte logique ET.

Vu que l'on veut un résultat sur 4 bits, on peut tronquer le tout :

.               x3 x2 x1 x0
              * y3 y2 y1 y0
 ---------------------------
                a3 a2 a1 a0
 +              b2 b1 b0
 +              c1 c0
 +              d0
 ---------------------------
                z3 z2 z1 z0

 Au final, j'ai bien :

-10 portes ET pour faire les 10 multiplications donnant a0, a1, a2, a3, b0, b1, b2, c0, c1 et d0

- 3 additionneurs 4 bits pour faire : a3 a2 a1 a0 + b2 b1 b0 0 + c1 c0 0 0 + d0 0 0 0



  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2015 à 13:52:25

lorrio a écrit:

Sauf que la consigne, c'est de multiplier deux nombres 4 bits, ce qui donne :

Sauf que non.

Relis bien ce qui est écrit :

  • A sur 4 bits,
  • B sur 3.
  • rien ne dit qu'on veut seulement 4 bits de résultat.


A part ça, ma solution c'est 12 portes et et deux additionneurs 4 bits.

-
Edité par michelbillaud 3 janvier 2015 à 13:53:57

  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2015 à 14:02:05

Enfaite si je demande si j'ai le droit de mettre une porte logique ET entre 2 bits A et B sur une même entrée c'est parce que je ne suis pas sur que ce soit accepté ^^

Mais si c'est le cas et que c'est bien permis alors je dois avouer que l'exercice devient asser simple ... parcontre n'y a t'il pas besoin d’indiquer l’état des bits de B ou autre via une table de vérité ou quelques chose comme ça ?  

  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2015 à 14:10:49

michelbillaud a écrit:

Relis bien ce qui est écrit :

  • A sur 4 bits,
  • B sur 3.
  • rien ne dit qu'on veut seulement 4 bits de résultat.


A part ça, ma solution c'est 12 portes et et deux additionneurs 4 bits.

Ooooops, pardon, j'ai lu trop vite, autant pour moi !

Dans ce cas, c'est encore plus simple puisque le pire cas est x*4 + x*2 + x

Cela donne bien 2 additionneurs, je suis d'accord avec toi ;)

C'est vrai que si le résultat n'est pas sur 4 bits, il faut 12 portes logiques ET avec un résultat sur 7 bits :

.               x3 x2 x1 x0
              *    y2 y1 y0
 ---------------------------
                a3 a2 a1 a0
 +           b3 b2 b1 b0
 +        c3 c2 c1 c0
 ---------------------------
       z6 z5 z4 z3 z2 z1 z0

Si le résultat est sur 4 bits, 9 portes ET suffisent :

.               x3 x2 x1 x0
              *    y2 y1 y0
 ---------------------------
                a3 a2 a1 a0
 +              b2 b1 b0
 +              c1 c0
 ---------------------------
                z3 z2 z1 z0

Altaiir95 a écrit:

Enfaite si je demande si j'ai le droit de mettre une porte logique ET entre 2 bits A et B sur une même entrée c'est parce que je ne suis pas sur que ce soit accepté ^^

Et pourquoi n'aurais tu pas le droit ?

  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2015 à 14:14:48

Si A et B c'est la même entrée, pourquoi mettre un et ?

Y a juste un truc gravement interdit, c'est de brancher deux sorties ensemble.  Encore que non, c'est pas vraiment interdit, si les circuits t'appartiennent, qui sommes-nous pour t'interdire de les cramer ?

-
Edité par michelbillaud 3 janvier 2015 à 14:16:39

  • Partager sur Facebook
  • Partager sur Twitter