Pagination d'une EEPROM avec une GAL V16 / V20 ...

C'est le lieu des discussions diverses et variées, mais toujours en rapport avec le thème général du forum et dans l'esprit de celui-ci.

Modérateurs : Carl, Papy.G, fneck

Avatar du membre
6502man
Messages : 8929
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par 6502man » 07 juin 2017 12:17

Je cherche un tuto sur le net pour programmer une GAL V16 / V 20 / ... dans le but de faire de la pagination d'une EEPROM ????

j'ai pas réussi à trouver quelque chose de clair sur ce sujet :roll:

Si c'est faisable bien entendu .


J'ai commencé sous WinCulp la déclaration des Pins pour un g20v8 :

Mon but est d'avoir en sortie P0-P3 la valeur de D0-D3 lors d'une écriture à l'adresse 8000h.
Je peux faire une équation pour chaque sortie du type :
IF ( !WR & A15 & !A14 & !A13 & !A12 ) THEN P0 = D0
Mais est ce que le GAL va maintenir l'état de P0-P3 en permanence pour que la pagination reste active tant que l'on écrive pas une nouvelle valeur ?
Ou faut il déclarer les sorties d'une certaine manières ???

Code : Tout sélectionner

/* *************** INPUT PINS *********************/
PIN 1    =     A15;    
PIN 2    =     A14;                   
PIN 3    =     A13;                   
PIN 4    =     A12;                    
PIN 5    =     WR;                    
PIN 6    =     D0;                   
PIN 7    =     D1;                    
PIN 8    =     D2;                   
PIN 9    =     D3;                   
FIELD ADDRESS = [A15..A12];                  

/* *************** OUTPUT PINS *********************/
PIN  17   =   P0;                      
PIN  14   =   P1;                       
PIN  15   =   P2;                      
PIN  16   =   P3;                     
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Avatar du membre
Totor le Butor
Messages : 1373
Enregistré le : 07 sept. 2011 16:14
Localisation : Paris

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par Totor le Butor » 07 juin 2017 18:12

En regardant le datasheet du g20v8 on voit qu'il y a 3 modes (registered, complex et simple). Le mode Registered comporte une bascule D qui sert de mémoire à la pin de sortie.
Quand l'horloge est au niveau 1 la sortie de la bascule recopie l'entrée.
Quand l'horloge est au niveau 0 la sortie de la bascule reste dans l'état antérieur et ne recopie plus son entrée.

Que veux tu faire exactement, car là je comprends que lorsque tu écris à une adresse entre 8000 et 8FFF les bits D0-D3 sont transmis à un autre circuit, tu n'as pas besoin d'un GAL pour ça, que se passe t-il quand tu n'écris plus, veux tu toujours transmettre D0-D3 à un autre circuit ?
Sur quelle condition reviens-tu dans l'état antérieur (ne plus transmettre D0-D3) ?
Born to bricole
[Rch] Vieux composants électroniques et circuits intégrés toute époque et vieilles cartes .

Avatar du membre
6502man
Messages : 8929
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par 6502man » 07 juin 2017 18:29

Oui une bascule D serait exactement ce qui me faut :=)

En circuit logique classique 74LS il m'en faudrait au moins 2 ou 3, c'est pour ça que j'avais pensé à une GAL, et en même temps j'explore quelque chose de nouveaux :wink:

En faite c'est pour paginer sur une EEPROM sur différentes banques de 8Ko !

En schéma ca donnerait ça :

Code : Tout sélectionner

BUS ORDI    GAL/bascule D   EEPROM
A15              1                   
A14              0
A13              0
A12              0
RW               0

D0               x   ====>  A13    
D1               x   ====>  A14
D2               x   ====>  A15
D3               x   ====>  A16
Si on écrit en $8000 on pagine sur l'EEPROM en modifiant la valeur des bits A13,A14,A15,A16 !

Je sais pas si je me suis bien expliqué :roll:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Avatar du membre
Papy.G
Modérateur
Messages : 1726
Enregistré le : 10 juin 2014 13:40
Localisation : Nantes/La Roche sur Yon

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par Papy.G » 07 juin 2017 23:23

J'ai réfléchi à un truc lors de mes errements autour du Minitel, pour garder quatre broches de pagination, avec un 373 et un 241 ou 244, je ne sais plus.
Il doit y avoir un composant tout fait qui garde l'état, et le restitue selon que tu active une broche, je vais donc profiter de cette question que tu poses, et surtout des réponses que vont apporter nos contributeurs les plus chevronnés en électronique. :mrgreen:
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.

Avatar du membre
Silou78
Messages : 167
Enregistré le : 11 févr. 2017 14:54
Localisation : Yvelines (78)

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par Silou78 » 08 juin 2017 02:15

Je pense effectivement qu'avec des bascules D, on doit pouvoir y arriver par exemple en s'inspirant du schéma d'un TO8 où on sélectionne deux pages EEPROM (et même la sélection des 2 EPROMs Basic par le même principe).

Voici un schéma* que je viens de dessiner :
PaginationEEPROM-Forum.png
PaginationEEPROM-Forum.png (57.97 Kio) Vu 1133 fois
*je ne garantis pas le bon fonctionnement, il faudrait faire une vérification de schéma pour s'assurer que je n'ai pas fait d'erreur :wink:

Pour sélectionner la Page n (de 0 à 15 soit de $0 à $F en hexa), il suffit d'écrire à l'adresse $8XXn (peu importe ce que l'on y écrit).

Ou bien, comme tu le souhaitais, connecter D0 à D3 (au lieu de A0 à A3) sur les entrées éponymes du 74LS173 pour sélectionner la Page n (de 0 à 15 soit de $0 à $F en hexa) en écrivant la donnée $n à l'adresse $8XXX.
Sylvain
Les + malins et les + chanceux sont au sommet, les autres grenouillent.
La vie est un éternel combat contre soi-même.

Avatar du membre
6502man
Messages : 8929
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par 6502man » 09 juin 2017 17:26

Merci pour vos suggestion, je recherchais à utiliser une GAL pour minimiser le nombre de composants à utiliser sur la carte :roll:
Mais j'ai du mal à comprendre comment "coder" cette GAL sous WinCulp pour l'utiliser en bascule D, le peu que j'ai trouvé sur le net j'ai pas tout compris :oops:

Et j'ai finalement besoin de 5 bits pour paginer 32 banks :roll:
Dommage car le 74LS173 aurait était idéal avec ces Enables :wink:

Sinon peut être avec un 74LS377 ou ou 74LS273 pour avoir suffisamment d'entrées/sorties disponibles pour paginer, mais il va me falloir rajouter d'autres composants pour activer que l'adresse 8000h, surtout qu'il n'y a pas autant d'Enables disponibles sur ces 74LS :roll:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Avatar du membre
Silou78
Messages : 167
Enregistré le : 11 févr. 2017 14:54
Localisation : Yvelines (78)

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par Silou78 » 10 juin 2017 00:30

Ah oui, si tu veux activer le paging uniquement via l'adresse 8000h, il te faudra d'autres composants... remarque avec une GAL aussi, car pas assez de pins I/O pour les 16 lignes d'adresses + les autres entrées/sorties nécessaires. :(
Sylvain
Les + malins et les + chanceux sont au sommet, les autres grenouillent.
La vie est un éternel combat contre soi-même.

Avatar du membre
Papy.G
Modérateur
Messages : 1726
Enregistré le : 10 juin 2014 13:40
Localisation : Nantes/La Roche sur Yon

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par Papy.G » 10 juin 2017 08:13

8000h seulement, ou 8000h à FFFFh?
Pour le décodage d'adresse, tu peux t'en sortir avec des démultiplexeurs et des cellules logiques à entrée multiples, mais, effectivement, tu vas te retrouver vite avec une usine à gaz, si l'encombrement est une contrainte. :?

Il existe des composants, (je viens juste de le découvrir :oops: ) proposant une sorte de "ULA" ou "glue chip" personnalisables, incluant de la Rom, de la SRam, des périphériques série, et des portes programmables pour le bank switching en interne et vers des broches extérieures. :o
Exemple: WSI 312 :wink:
Genre de composant qui peut permettre de faire un réplica de huit bit avec très peu de composants, sans toutefois recourir à de l'émulation, en y adjoignant le vrai processeur de la machine. 8)
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.

Daniel
Messages : 10261
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par Daniel » 10 juin 2017 09:09

Si on ne craint pas l'anachronisme, on peut aussi mettre un Arduino. Evidemment c'est surpuissant pour contrôler les 4 ou 5 bits d'adresses de l'EPROM, mais ça coûte moins cher que toutes les autres solutions, et surtout c'est très facile à programmer.
Daniel
L'obstacle augmente mon ardeur.

Avatar du membre
6502man
Messages : 8929
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par 6502man » 10 juin 2017 17:38

En fait, j'ai choisi de limiter la plage à 8000h-8FFFh pour ne pas utiliser les 16 bits d'adresses :wink:

A15 à A12 et WR pour ne pas paginer lors d'une lecture :wink:

Je vais éviter les microcontrôleurs c'est un peu surdimensionné pour juste faire une pagination :roll:

les GAL étaient la meilleurs solutions mais faut-il encore arriver à coder la logique d'une bascule D , là est mon problème pour l'instant :oops:

Existe il des GAL d'autres fabricants que Lattice qui soient programmables avec un soft gratuit ???

J'ai bien trouvé PEEL 22CV10A mais le soft est introuvable et après faut pouvoir programmer ce composant :roll:

Après on a les CPLD Altera MAX pas très chers mais c'est aussi surdimensionné à mon avis :roll:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Avatar du membre
Silou78
Messages : 167
Enregistré le : 11 févr. 2017 14:54
Localisation : Yvelines (78)

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par Silou78 » 10 juin 2017 20:56

Dans la doc de WinCupl, il est indiqué qu'il faut utiliser l'extension .D pour utiliser une bascule sur une variable de sortie.
C'est sur que ça manque d'exemples sur le Net pour arriver à se faire une idée précise du code à écrire.

Chez Atmel il y a aussi un équivalent : ATF22V10B (eBay)

Edit: Un ATF16V8B (eBay) devrait même suffire :
PaginationEPROM-Forum.png
PaginationEPROM-Forum.png (64.77 Kio) Vu 1033 fois
Reste plus qu'à écrire le script CUPL... :)

Edit 2: Voici le script :

Code : Tout sélectionner

Name     EEPROM-Paging ;
PartNo   00 ;
Date     11/06/2017 ;
Revision 01 ;
Designer Silou78 ;
Company  Futura ;
Assembly None ;
Location None ;
Device   g16v8a ;

/* *************** INPUT PINS ***********************************************/
PIN 1        = cpu_clk            ; /* CPU Clock                            */ 
PIN [2..6]   = [d0..4]            ; /* CPU Data Bus                         */ 
PIN 7        = !memrw             ; /* Memory Read/Write (write active low) */ 
PIN 8        = a15                ; /* CPU Address Bus                      */ 
PIN 9        = reset              ; /* System Reset                         */ 
PIN 11       = !oe                ; /* Output Enable (active low)           */ 

/* *************** OUTPUT PINS **********************************************/
PIN [12..16] = [ra15..19]         ; /* ROM Address Bus                      */ 
PIN 17       = !rom_ce            ; /* ROM Chip Enable (active low)         */ 
PIN 18       = !rom_oe            ; /* ROM Output Enable (active low)       */ 
PIN 19       = select_page        ; /* ROM Page Selection Mode              */

/* **** Declarations and Intermediate Variable Definitions ******************/
select_rom = a15 & !memrw ;

/* **** Logic Equations *****************************************************/ 
select_page = a15 & memrw ;

/* Principe de la bascule D pour memoriser le numero de page ROM :          */
/* Quand la selection de page n'est pas activee (select_page = niveau bas), */
/* alors la sortie [ra15..19] conserve son etat precedent (num. page ROM).  */
ra15.D = d0 & select_page # ra15 & !select_page ;
ra16.D = d1 & select_page # ra16 & !select_page ;
ra17.D = d2 & select_page # ra17 & !select_page ;
ra18.D = d3 & select_page # ra18 & !select_page ;
ra19.D = d4 & select_page # ra19 & !select_page ;

rom_ce = a15 ;
rom_oe = select_rom ;
Et le résultat de la simulation :
PaginationEPROM-ResSimu.png
PaginationEPROM-ResSimu.png (19.05 Kio) Vu 1033 fois
Ca semble pas mal fonctionner du tout ! :wink:

Après il faudra voir sur quelle machine tu veux implémenter ça, par rapport aux signaux (actif haut, bas ?) comme par exemple le Read/Write ?
Le Chip Select des ROM d'origine ont-elles un câblage spécifique par rapport au RESET (qu'il faudrait reproduire dans la GAL - actuellement l'entrée RST n'est pas utilisée) ?
La rapidité de commutation de l'Output Enable (OE) de la ROM via la GAL est-elle suffisante afin d'éviter de se retrouver avec 2 composants (ROM et CPU par exemple) qui écrivent sur le bus de données en même temps ?
Sylvain
Les + malins et les + chanceux sont au sommet, les autres grenouillent.
La vie est un éternel combat contre soi-même.

Avatar du membre
6502man
Messages : 8929
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par 6502man » 11 juin 2017 11:36

Ouah :shock:

Super tu à tout compris du premier coup :D

Merci pour ton aide :D

C'est pour une obscure machine japonaise la Pyuuta :lol:

Je cherche à créer une cartouche il y a très peu d'info sur le net mais ce que j'ai pu trouvé :
CartPinout.png
CartPinout.png (2.6 Kio) Vu 1022 fois
Il n'y a pas de Reset et le CPUClock est sur la même pin que Write :roll:
Peut être le GromClock ? ...

Je vais regarder ca à tranquillement ....

Je pensais qu'il fallait utiliser la" machine à état" sous winculp pour utiliser la bascule D, donc j'était parti dans une mauvaise direction :?

J'avais déduit d'après ce pinout et une vrai cartouche :
EEPROM 8K.png
EEPROM 8K.png (8.76 Kio) Vu 1021 fois
CartEEE.jpg
CartEEE.jpg (107.21 Kio) Vu 1021 fois
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Avatar du membre
6502man
Messages : 8929
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par 6502man » 11 juin 2017 16:00

Je viens de modifier le code Culp pour utiliser un G22V10 avec plus d'I/O pour gérer A15-A12 :

Ca fonctionne très bien dans le simulateur, mais ca me parait trop simple :roll:
On verra bien lorsque je pourrais faire un test ...

mais il va me falloir analyser les signaux Clock pour savoir celui qui peut être utilisé avec le GAL .....

Code : Tout sélectionner

Name     EEPROM-Paging ;
PartNo   00 ;
Date     11/06/2017 ;
Revision 02 ;
Designer Silou78 & 6502man ;
Company  Futura ;
Assembly None ;
Location None ;
Device   g22v10 ;

/* *************** INPUT PINS ***********************************************/
PIN 1        = cpu_clk            ; /* CPU Clock                            */ 
PIN [2..6]   = [d0..4]            ; /* CPU Data Bus                         */ 
PIN 7        = !memrw             ; /* Memory Read/Write (write active low) */ 
PIN 8        = A15                ; /* CPU Address Bus                      */ 
PIN 9        = A14                ;
PIN 10       = A13                ;
PIN 11       = A12                ;
PIN 13       = !oe                ; /* Output Enable (active low)           */ 

/* *************** OUTPUT PINS **********************************************/
PIN [14..18] = [ra15..19]         ; /* ROM Address Bus                      */ 
PIN 19       = !rom_Ce            ; /* ROM Chip Enable (active low)         */ 
PIN 20       = !rom_Oe            ; /* ROM Output Enable (active low)       */ 
PIN 21       = select_page        ; /* ROM Page Selection Mode              */

/* **** Declarations and Intermediate Variable Definitions ******************/
select_rom = A15 & !A14 & !A13 & !A12 & !memrw ;

/* **** Logic Equations *****************************************************/ 
select_page = A15 & !A14 & !A13 & !A12  & memrw ;

/* Principe de la bascule D pour memoriser le numero de page ROM :          */
/* Quand la selection de page n'est pas activee (select_page = niveau bas), */
/* alors la sortie [ra15..19] conserve son etat precedent (num. page ROM).  */
ra15.D = d0 & select_page # ra15 & !select_page ;
ra16.D = d1 & select_page # ra16 & !select_page ;
ra17.D = d2 & select_page # ra17 & !select_page ;
ra18.D = d3 & select_page # ra18 & !select_page ;
ra19.D = d4 & select_page # ra19 & !select_page ;

rom_Ce = A15 ;
rom_Oe = select_rom ;
J'ai enfin fini de rassembler tous les DUMPS des jeux existants sur cette machine (27) et évidement les derniers sont plus gros que ceux que j'avais pu trouver jusqu’à maintenant donc je vais prévoir une pagination de 32 pages de 32Ko ...
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Avatar du membre
Silou78
Messages : 167
Enregistré le : 11 févr. 2017 14:54
Localisation : Yvelines (78)

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par Silou78 » 11 juin 2017 23:35

C'est curieux cette cartouche : A2 semble non-connectée et pas de A1 et A0.
Comment se fait l'adressage sur cette machine ? Où est mappée l'espace ROM cartouche dans l'espace d'adressage global de la machine ?
Les pins /WE/CPUCLK et GROMCLK ne semble par raccordées et je ne vois pas bien à quoi ça peut servir pour une ROM (pour d'autres types de cartouche, cartouche de programmation de PROM ?)
Le /CS RROM1 qui semble également non-connecté pourrait servir à des cartouches avec 2 PROMs.

Dans ton script Cupl, je ne comprends pas pourquoi tu as rajouté A14 A13 A12.
Si tu adresses la PROM par page de 32K, la discrimination sur A15 uniquement est nécessaire et suffisant (espace mémoire 8000h à FFFFh).
Sinon en occupant l'espace mémoire uniquement de 8000h à 8FFFh, cela fait qu'une page de 4K. Et dans ce cas il faudrait utiliser les 3 dernières sorties du g22v10 pour sortir du [ra12..14] alimentées (via bascules D/mémoire du GAL) par les 3 derniers bits de poids fort du bus de données => 256 pages de 4K (au lieu de 32 pages de 32K).
Soit je m'égare, soit je passe à côté de quelque chose... m'enfin vu l'heure il faut que j'aille dormir :mrgreen:
a+
Sylvain
Sylvain
Les + malins et les + chanceux sont au sommet, les autres grenouillent.
La vie est un éternel combat contre soi-même.

Avatar du membre
6502man
Messages : 8929
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par 6502man » 12 juin 2017 22:56

Oui l'ordre des adresses est curieuse, mais je vais tester prochainement ça pour vérifier comme je dois connecter tous ça ...

Concernant A15-A12 ce n'est pas pour adresser l'EEPROM mais uniquement pour servir de mécanisme de pagination et donc restreinte la plage à 8000h - 8FFFh pour éviter d'écrire où il ne faut pas :wink:

En fait je veux créer 32 pages qui seront vues par le système (1 à la fois) comme une seule cartouche, je veux donc translater les plages d'adresses physiques de l'EEPROM vers la plage d'adresse logique vue par le système (par bank de 32ko) :roll:
je sais pas si j'ai été clair :?

Code : Tout sélectionner

      Physique                  Logique
       EEPROM                   CARTOUCHE
!-----------------------!    !---------------!
!BANK1 (0000h  -  7FFFh)!    ! 4000h - BFFFh !
!BANK2 (8000h  -  FFFFh)!    ! 4000h - BFFFh !
!BANk3 (10000h - 17FFFh)!    ! 4000h - BFFFh !
......
......
......

L'organisation de l'espace cartouche d'après ce que j'ai compris de l'émulateur :
- cartouche 8ko = 8000h - 9FFFh
- cartouche 16Ko = 8000h - BFFFh
- cartouche 32Ko = 4000h - BFFFh

Donc pour pouvoir lire toutes les cartouches en faisant simple j'ai choisi des plages de 32Ko, il est certain que l'on perd pas mal de place puisque 80% des 27 jeux font seulement 8Ko, après on peut regrouper 4 jeux en jouant sur la pagination et en rajoutant D5 ...
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Répondre