Décodage d'adresses... je m'y intéresse enfin !
Modérateurs : Papy.G, fneck, Carl
Re: Décodage d'adresses... je m'y intéresse enfin !
Ouais, pas faux !
- Totor le Butor
- Messages : 2237
- Inscription : 07 sept. 2011 16:14
- Localisation : Paris - Mezels
Re: Décodage d'adresses... je m'y intéresse enfin !
Dans n'importe quel schéma de carte à microprocesseur on sélectionne d'abord un circuit complexe par sa patte /CS puis on y lit ou écrit par la patte /R ou /WE. Parfois, une 3eme patte /OE permet d'isoler le circuit du bus de données.
Dans des cas simples comme le tien on peut raccorder ensemble les pattes de sélection de boitier et d'action à réaliser ou en valider une en permanence, de préférence le /CS puisque le /OE suffit à isoler complètement le boitier du bus. Le seul inconvénient est la consommation plus élevée du boitier.
Pour le découplage, il faut mettre un condo de 0,1 à 1µF max au plus près du circuit, l'important c'est qu'il puisse réagir vite aux pics de consommation du boitier.
Dans des cas simples comme le tien on peut raccorder ensemble les pattes de sélection de boitier et d'action à réaliser ou en valider une en permanence, de préférence le /CS puisque le /OE suffit à isoler complètement le boitier du bus. Le seul inconvénient est la consommation plus élevée du boitier.
Pour le découplage, il faut mettre un condo de 0,1 à 1µF max au plus près du circuit, l'important c'est qu'il puisse réagir vite aux pics de consommation du boitier.
Born to bricole
[Rch] Vieux composants électroniques et circuits intégrés toute époque et vieilles cartes .
[Rch] Vieux composants électroniques et circuits intégrés toute époque et vieilles cartes .
Re: Décodage d'adresses... je m'y intéresse enfin !
Merci pour vos conseils.
Voici ce que ça donne:
Notez les deux /CE à la masse et les signaux /CE1 et /CE2 sur chaque /OE.
Capas de découplage sur chaque CI, et deux résistances de tirage.
Voici ce que ça donne:
Notez les deux /CE à la masse et les signaux /CE1 et /CE2 sur chaque /OE.
Capas de découplage sur chaque CI, et deux résistances de tirage.
Re: Décodage d'adresses... je m'y intéresse enfin !
Merci Falkor pour ton travail.
Cela permet de mettre en lumière les pièges et les astuces de ce genre de circuits.
Totor, nous prenons note.
Cela permet de mettre en lumière les pièges et les astuces de ce genre de circuits.
Totor, nous prenons note.
Re: Décodage d'adresses... je m'y intéresse enfin !
Surtout merci pour vos conseils qui me permettent de progresser...
Le routage se passe bien, je pense que le brochage du nez de carte de la VCS à été pensé pour faciliter le tracé... C'est tout droit, rien ne se croise !
Le routage se passe bien, je pense que le brochage du nez de carte de la VCS à été pensé pour faciliter le tracé... C'est tout droit, rien ne se croise !
Re: Décodage d'adresses... je m'y intéresse enfin !
C'est encore moi... N'ayant pas encore pu reprendre le boulot, je continue de faire de la théorie dans du décodage d'adresses. Je tente cette fois ci de faire un peu plus compliqué.
Je souhaite créer une petite carte me permettant de caler 8k de ROM pour le VIC-20, et je souhaite utiliser encore ici des 2716 de 2k.
Je commence par la memory map, qui se présente ainsi (source) :
Les plages disponibles sont découpées (entre autres) en banques de 8k, chacune ayant son signal d'activation (dispo sur le "expansion port") : /BLK1, 2,3 et 5. (autres signaux existants pour la RAM)
Quelques recherches m'ont indiqué que la banque 5 ($A000 à $BFFF) est "auto-bootable" au lancement de la machine, et est donc très utilisée dans les cartouches de jeux et programmes. Une autre banque utilisable est la 3, mais non auto-bootable. J'ajouterai éventuellement un cavalier pour choisir laquelle, si je souhaite avoir un ensemble bootable ou non.
J'ai donc refait un tableau (j'imagine qu'avec l'expérience on peut faire ça de tête) qui résume le tout. J'ai divisé la plage $A000 à $BFFF en 4 morceaux de 2k, ce qui donne:
-1ere ROM : $A000 à $A7FF
-2eme : $A800 - $AFFF
-3eme : $B000 - $B7FF
-4eme : $B800 - $BFFF
A gauche de mon tableau se trouve les mêmes infos représentées en binaire (qui me parle mieux ). Se pose maintenant la question du décodage. Comme suggéré plus haut, le 74LS138 semble être un bon choix pour faire le boulot.
Voici sa table de vérité :
En bleu les lignes où le circuit est actif, càd quand les entrées de validation E1 à E3 sont à respectivement 0, 0 et 1.
Si je reviens sur mon tableau, et si j'observe les bits d'adresse A13 à A11, j'en déduit que pour mes quatre plages j'ai :
J'en conclue que, si je relie A13 à l'entrée A0 du décodeur, A12 sur A1 et A11 sur A2, la table de vérité m'apprends que :
-ROM 1 est activée par O1 (H L L)
-ROM 2 est activée par O5 (H L H)
-ROM 3 est activée par O3 (H H L)
-ROM 4 est activée par O7 (H H H)
L’ordre des sorties n'est pas croissant mais en regardant la table de vérité du décodeur ça semble normal. J'ai donc juste à relayer les sorties correspondantes aux /CE de mes circuits.
J'en arrive à mes questions :
-mon analyse est-elle jusque ici bonne
-le bus d'adresse dispo sur le port d'extension ne va que jusqu'à A13, je n'ai donc pas de bits A15 et A14 à disposition. Comment alors prendre en compte la banque active ? Je pensais prendre /BLK5, l'inverser, et caler ce signal sur "E3" du décodeur, avec /E1 et /E2 à LOW. Mais ça m'oblige à ajouter un inverseur. Possibilité de faire plus simple ? J'ai pensé caler /BLK5 sur le A0 du décodeur (au lieu de A13), ce qui pourrait m'activer d'autres sorties... C'est peut-être le plus simple ? Pas d'inversion à prévoir... (Sorties respectivement 0, 4, 2 et 6). J'imagine qu'il y a plein de solutions qui peuvent marcher.
Merci pour votre aide.
Je souhaite créer une petite carte me permettant de caler 8k de ROM pour le VIC-20, et je souhaite utiliser encore ici des 2716 de 2k.
Je commence par la memory map, qui se présente ainsi (source) :
Les plages disponibles sont découpées (entre autres) en banques de 8k, chacune ayant son signal d'activation (dispo sur le "expansion port") : /BLK1, 2,3 et 5. (autres signaux existants pour la RAM)
Quelques recherches m'ont indiqué que la banque 5 ($A000 à $BFFF) est "auto-bootable" au lancement de la machine, et est donc très utilisée dans les cartouches de jeux et programmes. Une autre banque utilisable est la 3, mais non auto-bootable. J'ajouterai éventuellement un cavalier pour choisir laquelle, si je souhaite avoir un ensemble bootable ou non.
J'ai donc refait un tableau (j'imagine qu'avec l'expérience on peut faire ça de tête) qui résume le tout. J'ai divisé la plage $A000 à $BFFF en 4 morceaux de 2k, ce qui donne:
-1ere ROM : $A000 à $A7FF
-2eme : $A800 - $AFFF
-3eme : $B000 - $B7FF
-4eme : $B800 - $BFFF
A gauche de mon tableau se trouve les mêmes infos représentées en binaire (qui me parle mieux ). Se pose maintenant la question du décodage. Comme suggéré plus haut, le 74LS138 semble être un bon choix pour faire le boulot.
Voici sa table de vérité :
En bleu les lignes où le circuit est actif, càd quand les entrées de validation E1 à E3 sont à respectivement 0, 0 et 1.
Si je reviens sur mon tableau, et si j'observe les bits d'adresse A13 à A11, j'en déduit que pour mes quatre plages j'ai :
Code : Tout sélectionner
A13 A12 A11
ROM 1 1 0 0
ROM 2 1 0 1
ROM 3 1 1 0
ROM 3 1 1 1
-ROM 1 est activée par O1 (H L L)
-ROM 2 est activée par O5 (H L H)
-ROM 3 est activée par O3 (H H L)
-ROM 4 est activée par O7 (H H H)
L’ordre des sorties n'est pas croissant mais en regardant la table de vérité du décodeur ça semble normal. J'ai donc juste à relayer les sorties correspondantes aux /CE de mes circuits.
J'en arrive à mes questions :
-mon analyse est-elle jusque ici bonne
-le bus d'adresse dispo sur le port d'extension ne va que jusqu'à A13, je n'ai donc pas de bits A15 et A14 à disposition. Comment alors prendre en compte la banque active ? Je pensais prendre /BLK5, l'inverser, et caler ce signal sur "E3" du décodeur, avec /E1 et /E2 à LOW. Mais ça m'oblige à ajouter un inverseur. Possibilité de faire plus simple ? J'ai pensé caler /BLK5 sur le A0 du décodeur (au lieu de A13), ce qui pourrait m'activer d'autres sorties... C'est peut-être le plus simple ? Pas d'inversion à prévoir... (Sorties respectivement 0, 4, 2 et 6). J'imagine qu'il y a plein de solutions qui peuvent marcher.
Merci pour votre aide.
Re: Décodage d'adresses... je m'y intéresse enfin !
Si tu associes A11 à A0, A12 à A1 et A13 à A2, ça donnera respectivement /O4 (HLL - ROM1), /O5 (HLH - ROM2), /O6 (HHL -ROM3) et /O7 (HHH - ROM4) - en correspondance directe avec ta plage - sans devoir recourir à cette table de vérité pour éviter la gymnastique mentale entre les /Ox. Après si le choix est dicté par le placement des broches, on peut combiner comme tu l'as fait.
Pour les entrées /E1, /E2 et E3 je ne vois pas à quoi tu les connectes. Aux autres Ax ? si ça avait été un Z80, j'aurais connecté /MREQ à /E1, A14 à /E2 et A15 à E3. Pour le 6502, je te renvois à ce lien car je n'avoue pas trop bien comprendre comment fonctionne l'accès mémoire avec ses signaux.
EDIT: ok, c'est /BLK5 . Donc le connecter à la fois sur /E1 et /E2. +5 V sur E3.
Pour les entrées /E1, /E2 et E3 je ne vois pas à quoi tu les connectes. Aux autres Ax ? si ça avait été un Z80, j'aurais connecté /MREQ à /E1, A14 à /E2 et A15 à E3. Pour le 6502, je te renvois à ce lien car je n'avoue pas trop bien comprendre comment fonctionne l'accès mémoire avec ses signaux.
EDIT: ok, c'est /BLK5 . Donc le connecter à la fois sur /E1 et /E2. +5 V sur E3.
Re: Décodage d'adresses... je m'y intéresse enfin !
Ok merci. L'ordre des sorties du 138 m'importe peu, je n'ai pas de contraintes à ce niveau là.
Je suis en train de dessiner le schéma, ça sera plus parlant que mes tableaux.
Je suis en train de dessiner le schéma, ça sera plus parlant que mes tableaux.
Re: Décodage d'adresses... je m'y intéresse enfin !
Ok voici la synthèse :
-Je suis resté sur ma config d'origine sur les sorties du décodeur (sorties 1, 3, 5 et 7)
-/E1 et /E2 sont reliés à !BLK5 (ou !BLK3, avec cavalier) et E3 au 5v
-/OE de mes ROMS à la masse
Je cale une résistance de tirage haut sur le /CE de mes ROMS ?
-Je suis resté sur ma config d'origine sur les sorties du décodeur (sorties 1, 3, 5 et 7)
-/E1 et /E2 sont reliés à !BLK5 (ou !BLK3, avec cavalier) et E3 au 5v
-/OE de mes ROMS à la masse
Je cale une résistance de tirage haut sur le /CE de mes ROMS ?
Re: Décodage d'adresses... je m'y intéresse enfin !
je ne pense pas que ce soit nécessaire vu que leur état est haut par défaut (ils ne sont à l'état bas que si G1 = 1, G2A = 0 et G2B = 0)
Re: Décodage d'adresses... je m'y intéresse enfin !
Ok.
Le reste de mon analyse te semble bon sinon ?
J'ai tenté de chercher des outils de simulation de ce genre de circuits pour faire mes vérifs, mais rien trouvé en gratuit.... (Proteus semble bien mais bon)
Le reste de mon analyse te semble bon sinon ?
J'ai tenté de chercher des outils de simulation de ce genre de circuits pour faire mes vérifs, mais rien trouvé en gratuit.... (Proteus semble bien mais bon)
Re: Décodage d'adresses... je m'y intéresse enfin !
Essaye donc celui-là : https://github.com/hneemann/Digital. Je ne l'ai pas entièrement testé toutefois. On peut le télécharger d'ici.
Je te dirais que ça me semble bien. Après je ne suis pas un électronicien à la base. Je suppose que si personne d'autre se manifeste, c'est qu'il ne doit pas y avoir de soucis.
Je te dirais que ça me semble bien. Après je ne suis pas un électronicien à la base. Je suppose que si personne d'autre se manifeste, c'est qu'il ne doit pas y avoir de soucis.
Re: Décodage d'adresses... je m'y intéresse enfin !
Merci à vous pour les conseils, j'attaque le routage.
Tant que j'y suis, comment aborder le cas des circuits à interfacer ne comportant qu'un seul octet de "mémoire" ? Je pense par exemple au SN76489 dont on parle dans un autre post.
Le décodage consiste ici à faire en sorte que le circuit réagisse à une seule adresse. Quelles sont concrètement les solutions pour faire réagir un circuit à une seule combinaison d'adresse ? Je pensais à un 74LS30 (8-INPUT NAND GATE) qui possède 12 entrées, qu'on peut associer à des portes NON pour se créer la combinaison d'adresses souhaitée. Mais dans le cas d'un bus d'adresse plus large, il existe peut-être des solutions plus simples ?
Tant que j'y suis, comment aborder le cas des circuits à interfacer ne comportant qu'un seul octet de "mémoire" ? Je pense par exemple au SN76489 dont on parle dans un autre post.
Le décodage consiste ici à faire en sorte que le circuit réagisse à une seule adresse. Quelles sont concrètement les solutions pour faire réagir un circuit à une seule combinaison d'adresse ? Je pensais à un 74LS30 (8-INPUT NAND GATE) qui possède 12 entrées, qu'on peut associer à des portes NON pour se créer la combinaison d'adresses souhaitée. Mais dans le cas d'un bus d'adresse plus large, il existe peut-être des solutions plus simples ?
Re: Décodage d'adresses... je m'y intéresse enfin !
Le 74LS30 ne possède pas 12 entrées, seulement 8.
Après il y a le 74LS133 avec 13 entrées, comme dans le synthétiseur Nathan pour Thomson .
Parfois les constructeurs utilisaient des GAL, comme dans l'extension nanoréseau Léanord, par exemple.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: Décodage d'adresses... je m'y intéresse enfin !
Oups oui pardon, j'ai lu le symbole un peu trop rapidement :
Du coup deux circuits permettraient associés à une porte ET d'isoler l'adresse souhaitée. Ou bien utiliser un 13 entrées quitte a réserver un emplacement mémoire plus grand...
Du coup deux circuits permettraient associés à une porte ET d'isoler l'adresse souhaitée. Ou bien utiliser un 13 entrées quitte a réserver un emplacement mémoire plus grand...