[GAL22V10] besoin d'aide pour écrire le fichier

Cet espace concerne les composants électroniques, les techniques de réalisation, le soudage, la mesure et ses divers instruments, les programmateurs ou encore votre laboratoire. Recueille également les éventuelles ventes, achat, dons ou recherches.

Modérateurs : Papy.G, fneck, Carl

Répondre
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

[GAL22V10] besoin d'aide pour écrire le fichier

Message par hlide »

Bon, j'ai un petit soucis pour comprendre comment définir trois "latches". J'essaye d'écrire un module qui gère le bank-switching entre une RAM et divers autres choses dans le cadre d'un projet sur le MZ-700 (Z80). Je pensais donc utiliser un GAL22V10 pour permettre de gérer l'accès ou pas à une SRAM sans passer par la carte-mère (je"'bypasse" l'accès à la DRAM en ne communiquant pas le signal /MREQ à la carte-mère et donc au décodeur d'adresse d'origine via le socle CPU).

Concrètement, je cherche a faire un PCB qui contiendra un Z80, un GAL22V10 et une SRAM de 64 Ko. Tout accès hors RAM sera bien redirigé vers la carte-mère. Par contre, tout accès à la RAM se fera directement entre le Z80 et la SRAM grâce à ce GAL qui déposera également un /MREQ en état haut sur le bus. Je ne sais pas si c'est correct de faire ainsi - n'hésitez pas à m'expliquer comment mieux faire.

Je me suis basé sur ce lien pour commencer à écrire le source du GAL. Après je me suis basé sur le fichier sm700.pdf, page 11 pour retrouver les entrées sorties nécessaires. Je tente également d'intégrer le décodage d'adresse de la RAM pour obtenir un /SRAMCS et quelques autres CHIP enables qui pourraient être utiles à d'autres modules dans l'avenir.

Voici donc ce que j'ai écris pour le moment :

Code : Tout sélectionner

Name     MZ700_MMAP ;
PartNo   0 ;
Date     07/21/2019 ;
Revision 01 ;
Designer Christophe Avoinne ;
Company  ;
Assembly ;
Location ;
Device   g22v10 ;

/*
BANK-SWITCHING Module:
 
 /IORQ | /WR | A7-A4 | A3-A0 | /INH1 | /INH2 | /INH3 |
   L   |  L  |   E   |   0   |    L  |   -   |   -   |
   L   |  L  |   E   |   1   |    -  |   L   |   -   |
   L   |  L  |   E   |   2   |    H  |   -   |   -   |
   L   |  L  |   E   |   3   |    -  |   H   |   -   |
   L   |  L  |   E   |   4   |    H  |   H   |   H   |
   L   |  L  |   E   |   5   |    -  |   -   |   L   |
   L   |  L  |   E   |   6   |    -  |   -   |   H   |
   L   |  L  |   E   |   7   |    -  |   -   |   -   |
   L   |  H  |  ~E   |   *   |    -  |   -   |   -   |
   H   |  *  |   *   |   *   |    -  |   -   |   -   |
	
 When /RESET is asserted, /INH1, /INH2 and /INH3 shall be high.

   Legend:
   . *: any value, not used
   . -: unchanged value
   . ~E: different from $E
   . /INH1: L to access RAM in range $0000-0FFF else H
   . /INH2: L to access RAM in range $D000-FFFF else H
   . /INH3: L to access external mapping in range $D000-FFFF else H
   
   Notes:
   . /INH1 means inhibit access to MONITOR ROM 
   . /INH2 means inhibit access to I/O MEMORY and EXTERNAL ROM
   . /INH3 means inhibit access to I/O MEMORY and MONITOR/EXTERNAL ROM
   
RAM access module:

 /MREQ | A15-A12 | INH1 | INH2 | INH3 | /RAMCS
   L   |    0    |   L  |   *  |   *  |    L
   L   |   1-C   |   *  |   *  |   *  |    L
   L   |    D    |   *  |   L  |   H  |    L
   L   |    E    |   *  |   L  |   H  |    L
   L   |    F    |   *  |   L  |   H  |    L
   H   |    *    |   *  |   *  |   *  |    H

EXT access module (extended area, usually QD and FD ROMs):

 /MREQ | A15-A12 | INH2 | INH3 | /EXT1CS | /EXT2CS
   L   |    E    |   *  |   L  |    H    |    L
   L   |    E    |   H  |   H  |    L    |    H
   L   |    F    |   *  |   L  |    H    |    L
   L   |    F    |   H  |   H  |    L    |    H
   H   |    *    |   *  |   *  |    H    |    H

                  ____________
  /IORQ --- I [ 1]            [24] Vcc
  /MREQ --- I [ 2]            [23] O --- /XMREQ (goes to CPU socket)
     A0 --- I [ 3]            [22] O --- /SRAMCS
     A1 --- I [ 4]            [21] O --- /EXT1CS ($E000-FFFF when /INH3 = H)
     A2 --- I [ 5]            [20] O --- /EXT2CS ($E000-FFFF when /INH3 = L)
     A3 --- I [ 6]            [19] Q --- /INH1
     A4 --- I [ 7]  GAL20V10  [18] Q --- /INH2
     A5 --- I [ 8]            [17] Q --- /INH3
     A6 --- I [ 9]            [16] I --- A12
     A7 --- I [10]            [15] I --- A13
    /WR --- I [11]            [14] I --- A14
          GND [12]____________[13] I --- A15

*/

/* ***************** INPUT PINS **********************************************/
PIN  1   = IORQ    ; /* Z80 /IORQ                                            */ 
PIN  2   = MREQ    ; /* Z80 /MREQ                                            */          
PIN  3   = A0      ; /* Z80 A0                                               */              
PIN  4   = A1      ; /* Z80 A1                                               */              
PIN  5   = A2      ; /* Z80 A2                                               */              
PIN  6   = A3      ; /* Z80 A3                                               */
PIN  7   = A4      ; /* Z80 A4                                               */
PIN  8   = A5      ; /* Z80 A5                                               */
PIN  9   = A6      ; /* Z80 A6                                               */
PIN 10   = A7      ; /* Z80 A7                                               */
PIN 11   = WR      ; /* Z80 /WR                                              */
PIN 13   = A15     ; /* Z80 A15                                              */
PIN 14   = A14     ; /* Z80 A14                                              */
PIN 15   = A13     ; /* Z80 A13                                              */
PIN 16   = A12     ; /* Z80 A12                                              */

/* ***************** OUTPUT PINS *********************************************/
PIN 17   = INH3    ; /* /INH3 lock/unlock access to $D000-FFFF               */  
PIN 18   = INH2    ; /* /INH2 access range $D000-FFFF as SRAM if low         */  
PIN 19   = INH1    ; /* /INH1 access range $0000-0FFF as SRAM if low         */  
PIN 20   = !EXT1CS ; /* External extension area /CS when /INH3 is high       */ 
PIN 21   = !EXT2CS ; /* Internal extension area /CS when /INH3 is low        */ 
PIN 22   = !SRAMCS ; /* 64k static RAM /CS                                   */ 
PIN 23   = !XMREQ  ; /* socket /MREQ asserted if SRAM access is inhibited    */ 

/* Je veux que INH3 ne soit mis à H que si A7..0 = $E4 ou $E6,
   ne soit mis à L que si A7..0 = $E5
   sinon il reste inchangé. J'ai mis le clock du latch sur /IORQ mais je ne sais
   sur quel front il s'active ce latch. */
INH3   = (!IORQ&!WR& ??? )#INH3;

INH2   = (!IORQ&!WR& ??? )#INH2;

INH1   = (!IORQ&!WR& ??? )#INH1;

EXT1CS = !MREQ&INH2&INH3;

EXT2CS = !MREQ&INH2&!INH3;

SRAMCS = !MREQ&((!A15&!A14&!A13&!A12&!INH1)#( ??? )#( ??? )); /* casse-tête... */

XMREQ  = SRAMCS&EXT2CS;
j'ai du mal à comprendre comment mettre H ou L une sortie... avec ces ! ...
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [GAL22V10] besoin d'aide pour écrire le fichier

Message par 6502man »

Pour ma part j'avais galéré comme un fou avec les GALs pour faire la même chose (décodage d'adresse et bank swithing) j'ai du coup abandonné les GALs et je suis passé au CPLD qui est beaucoup plus pratique, et ca fonctionne très bien à condition de bien programmer le CPLD !
Du coup c'est quand même un peu surpuissant pour ne faire que ca mais tellement pratique :wink:

Sinon un truc que m'a appris Irios utiliser une E/EPROM pour paginer sur une SRAM ca fonctionne bien aussi :D
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [GAL22V10] besoin d'aide pour écrire le fichier

Message par hlide »

Oui, c'est une vraie galère !
cropped-sharp-boat-1.png
cropped-sharp-boat-1.png (28.72 Kio) Consulté 5606 fois
Concrètement, j'ai pu vérifier avec WinCUPL que les GAL ou PAL ne géraient pas des "latches" dont j'ai absolument besoin pour imiter le "GATE ARRAY".

Du coup, je vais plutôt voir avec le PSOC 5LP qui accepte le 5V, a un ARM bien plus véloce en bonus, mais surtout a aussi un PL (qu'ils appellent Logic Glue je crois) qui pourrait permettre de faire ce dont j'ai besoin voire plus.

Le CPLD est une autre voie mais qui me fait un peu peur car ça semble être encore la galère pour trouver un en 5 V et le programmer avec un outil standard, etc.

Donc pour le moment, je me suis acheté le kit PSOC 5LP à 10 $.
MFG_CY8CKIT-059.png
MFG_CY8CKIT-059.png (225.83 Kio) Consulté 5604 fois
J'ai peut-être vu un peu juste avec les broches disponibles (15 pour le bus d'adresse, 8 pour le bus de données, au moins 8 pour le bus de contrôle et il me faudra bien quelques broches supplémentaires pour le chip select de la SRAM, le /MREQ passé ou pas via le socle Z80, etc.) mais je verrais ça après que avoir valider le projet ROM/DISK.

Néanmoins, je serais intéressé à connaître les détails de ce qui faut pour bien démarrer avec un CPLD.
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [GAL22V10] besoin d'aide pour écrire le fichier

Message par 6502man »

Pour ma part j'utilise les EPM-7xxxS (le S est très important) d'Altera avec le soft Quartus c'est très simple à programmer.

Avantages:
- Pas cher
- Facilement trouvable sur Ebay, Amazon, Aliexpress, ... des milliers d'offres surtout des chinois
- Travaille en TTL (5V) I/O
- Simple à programmer
- Propose plusieurs versions de package avec un nombre de macrocells et de pins plus ou moins importante selon les besoins
- Logiciel tournant très bien sous Windows 10
- IDE intégrant une version schématic et VHDL
- MODELSIM logiciel de simulation très pratique pour vérifier ce que l'on à programmé
- Logiciel de programmation intégré dans l'IDE


Inconvénients:
- Composant obsolète
- Nécessite d'utiliser une version antérieur de Quartus ( toujours dispo chez Altera )



Ce qu'il faut pour programmer le CPLD :
- 1 EPM7xxxS (par exemple le 7032S (32 macrocells, 36 pins I/O) 10 euros pour 10 pièces.
- Quartus 13.0SP1 13.0 SP1
- USB Blaster ce modèle
- Une "plaque" pour pouvoir programmer l'EPM J'en avais fait une comme ca pour les EPM7128S en PLCC84, j'ai aussi fait pour les package en PLCC 44 et 68.

Pour plus d'infos sur les EPM7xxxS

Si ca t'intéresse je peux t"envoyer une plaque avec un EPM ;)
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Patrick
Messages : 2019
Inscription : 16 mai 2009 09:30
Localisation : Clermont-Ferrand

Re: [GAL22V10] besoin d'aide pour écrire le fichier

Message par Patrick »

Salut Philippe,
Merci pour ces informations. Il ne manque plus qu'un tutoriel :D
Patrick
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [GAL22V10] besoin d'aide pour écrire le fichier

Message par hlide »

Merci Phillippe, ta réponse m'a fait plaisir :).

Oui je serais intéressé ne serait-ce que pour m'y familiariser dans un premier temps.
Fred_72
Messages : 1131
Inscription : 22 mai 2019 13:10
Localisation : Sarthe

Re: [GAL22V10] besoin d'aide pour écrire le fichier

Message par Fred_72 »

Si je ne dis pas de bêtise, il me semble que les gals peuvent fonctionner en latch mais il faut utiliser les entrées spécifiques CLK et OE communes à tous les LEs (éléments logiques) et l'écriture en cupl fait appel aux suffixes (.OE, .CK). Donc dans ton cas ça n'ira pas.

J'utilise également les CPLD altera de la gamme 7000S. Ils sont très bien pour nous mais deviennent difficiles à trouver (attention aux composants HS que l'on trouve partout sur internet). Il y a aussi les XC9536XL de xilinks qui sont en 3.3V mais 5V tolérant (plus facile à trouver).
Perso, je trouve l'ide d'altera plus simple à prendre en mains que l'ide de xilinks donc je privilégie les epm lorsque c'est possible.
Dernière chose, ce sont des composants en boitier plcc donc une pince d'extraction est indispensable.
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [GAL22V10] besoin d'aide pour écrire le fichier

Message par hlide »

Ce que j'appelle le latch, c'est le suffixes .L et .LE qui font exactement ce que j'attendais mais quand je les utilise en précisant le modèle (genre GAL22v10), WinCUPL me dit que ce n'est pas possible.
Fred_72
Messages : 1131
Inscription : 22 mai 2019 13:10
Localisation : Sarthe

Re: [GAL22V10] besoin d'aide pour écrire le fichier

Message par Fred_72 »

oui c'est kif kif, ça revient à un registre ou une bascule D si tu préfères. Wincupl l'autorise tant qu'il ne connaît pas le composant car il peut programmer des petits CPLD (atf1504 ou atf750 par exemple). Mais sur les gals, il y a peu de LEs (ici 10) et leurs modes de fonctionnement sont très restreints et tributaire du composant.
Pour les PAL, c'est la lettre qui précise le mode 16L8=8 sorties combinatoires, 16R8=8 sorties de type registres.
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [GAL22V10] besoin d'aide pour écrire le fichier

Message par 6502man »

Je ne retrouve pas le sujet qu'il me semble avoir fait, sur ce que j'avais fait pour SC-3000 avec le CPLD :roll:

Je vais refaire un sujet dans la catégorie adéquate ....

Pour un Tuto je suis loin d'être un expert mais je peut toujours créer un sujet how to use CPLD [EPM7xxxS] si ca peux aider du monde ?
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [GAL22V10] besoin d'aide pour écrire le fichier

Message par hlide »

@Fred_72
oui c'est ça, un registre et j'en avais besoin de trois. Le truc c'est que j'avais besoin de gérer trois cas : mettre à 0 sous certaines conditions, à 1 sous d'autres conditions ou inchangé pour le reste des conditions. Et le tout pour trois registres. Je crois que cela dépassait les capacités du GAL. A côté de ça, je pensais gérer le décodage d'adresse pour la SRAM sur le même composant.

J'avais songé à utiliser un ATF2500C mais je ne suis pas certain de pouvoir faire mieux - je ne maîtrise pas assez bien les subtilités de WinCUPL avec tous ses suffixes.

@6502man
Un tuto sur du EPM7xxxS serait une bonne idée. Je ne me suis jamais lancé dans l'aventure car je n'ai jamais trouvé un tuto simple qui réponde à toutes les questions (5 V, comment souder, comment programmer, quel outils). Tu as déjà répondu à certaines de mes questions, il me resterait donc un exemple à décortiquer.
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [GAL22V10] besoin d'aide pour écrire le fichier

Message par hlide »

Donc j'ai commencé à faire du VHDL pour de l'EPM7xxxS. Je cherche maintenant à utiliser ModelSim ALTERA pour tester le bon comportement mais je n'arrive pas à comprendre comment l'utiliser. @Fred_72, @6502man ?
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [GAL22V10] besoin d'aide pour écrire le fichier

Message par 6502man »

J'avais fait ce document pour une personne si ca peut aider d'autres personnes ;)


How To Simulate With ModelSim Altera

Ca date de 2017 déjà :roll:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [GAL22V10] besoin d'aide pour écrire le fichier

Message par hlide »

Ah donc il suffit de faire un pas puis on force à nouveau les valeurs - moi qui m'embêtait à faire des "wave" sur plusieurs périodes... pour le reste, j'avais retrouvé le truc. Merci @6502man !
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [GAL22V10] besoin d'aide pour écrire le fichier

Message par 6502man »

Oui c'est la manière pas à pas :wink:
la plus simple pour commencer après c'est très puissant tu peux aussi gérer les timings
et plus mais c'est plus compliqué à mettre en oeuvre.
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Répondre