[74LS612] MMU 8-bit -> 12-bit, un EPM peut émuler ça ?
Modérateurs : Papy.G, fneck, Carl
[74LS612] MMU 8-bit -> 12-bit, un EPM peut émuler ça ?
Alors j'ai quelques puces intitulées 74LS612. Cette puce m'intéressait car elle permet la pagination dans un espace logique 16-bit via 16 pages.
Le truc, c'est qu'elle embarque 16 registres de 12-bit pour contenir l'adresse de base de chaque page.
Pour le coup, je me dis que l'EPM est mal équipé pour l'émuler. @Fred_72, @6502man ?
Pour la petite histoire, j'étais intéressé à l'utiliser avec un OUT (BC),A où :
- A les 8 bits de poids faible de l'adresse de base,
- B les 4 bits de poids fort de l'adresse de base et les 4 bits de sélection du registre de page où écrire l'adresse de base,
- C le port du PMM.
Je pourrais non seulement étendre la quantité physique de mémoire et placer des blocs stratégiques à des adresses logiques, mais je pourrais aussi découper en fonction des "devices". En effet, si je prends les 3 bits de poids fort de l'adresse de base pour les communiquer à un démultiplexeur qui donnera alors jusqu'à huit "devices" : ROM, RAM, registres de périphériques.
Par exemple, ça donnerait une adresse de base - ou plutôt une adresse physique de page - qui serait :
- A'[11..0] : identique à A[11..0] - offset dans la page de 4 Ko,
- A'[16..12] : adresse physique de cette page de 4 Ko,
- A'[19..17] : /CS0 .. /CS7 - le "device" sélectionné pour cette page de 4 Ko.
Tout ça étant conditionné bien sûr sur le temps de la propagation totale.
Le truc, c'est qu'elle embarque 16 registres de 12-bit pour contenir l'adresse de base de chaque page.
Pour le coup, je me dis que l'EPM est mal équipé pour l'émuler. @Fred_72, @6502man ?
Pour la petite histoire, j'étais intéressé à l'utiliser avec un OUT (BC),A où :
- A les 8 bits de poids faible de l'adresse de base,
- B les 4 bits de poids fort de l'adresse de base et les 4 bits de sélection du registre de page où écrire l'adresse de base,
- C le port du PMM.
Je pourrais non seulement étendre la quantité physique de mémoire et placer des blocs stratégiques à des adresses logiques, mais je pourrais aussi découper en fonction des "devices". En effet, si je prends les 3 bits de poids fort de l'adresse de base pour les communiquer à un démultiplexeur qui donnera alors jusqu'à huit "devices" : ROM, RAM, registres de périphériques.
Par exemple, ça donnerait une adresse de base - ou plutôt une adresse physique de page - qui serait :
- A'[11..0] : identique à A[11..0] - offset dans la page de 4 Ko,
- A'[16..12] : adresse physique de cette page de 4 Ko,
- A'[19..17] : /CS0 .. /CS7 - le "device" sélectionné pour cette page de 4 Ko.
Tout ça étant conditionné bien sûr sur le temps de la propagation totale.
Re: [74LS612] MMU 8-bit -> 12-bit, un EPM peut émuler ça ?
Alors le 74LS612 n'est pas émulé dans Quartus, mais pour paginer il y à plusieurs autres façon de procéder.
Je suis très loin d'être un expert mais j'ai fait quelques montage en paginant sur 512K de ROM et 512K de RAM, et ca fonctionne très bien
avec un EPM7128 et un schéma classique à base de 74LS373 ce qui donne jusqu'à 256 pages réparti comme tu veux
Pour le temps de propagation avec les CPLD c'est très simple les délais ne ce cumule pas que tu ai 10 portes logiques enchainées ou 1 le délai seras le même.
Pourquoi tu pagine pas sur A19-A12, en tout cas c'est ce qui me vient à l'esprit en lisant ton énoncé ???Par exemple, ça donnerait une adresse de base - ou plutôt une adresse physique de page - qui serait :
- A'[11..0] : identique à A[11..0] - offset dans la page de 4 Ko,
- A'[16..12] : adresse physique de cette page de 4 Ko,
- A'[19..17] : /CS0 .. /CS7 - le "device" sélectionné pour cette page de 4 Ko.
Je suis très loin d'être un expert mais j'ai fait quelques montage en paginant sur 512K de ROM et 512K de RAM, et ca fonctionne très bien
avec un EPM7128 et un schéma classique à base de 74LS373 ce qui donne jusqu'à 256 pages réparti comme tu veux
Pour le temps de propagation avec les CPLD c'est très simple les délais ne ce cumule pas que tu ai 10 portes logiques enchainées ou 1 le délai seras le même.
Re: [74LS612] MMU 8-bit -> 12-bit, un EPM peut émuler ça ?
Mais c'est le cas A[19..12] va être paginé, mais les trois bits de poids fort de la page serve à indiquer quel device et non une adresse physique (l'adresse que tu passes à une SRAM, une FLASH, etc.). Je regarde pour le 74LS373.
Re: [74LS612] MMU 8-bit -> 12-bit, un EPM peut émuler ça ?
J'ai peut-être cafouillé dans le nombre de bit d'adresse final...
Supposons qu'une page fasse 4Ko. J'ai 16 registres de page : j'ai bien une adresse logique sur 16-bit (4-bit d'index du registre de page + 12 bits d'offset de la page). Un registre de page va contenir 12 bits d'adresse de base. Donc au total ça fait 24-bit d'adresse (12 bits donnés par le registre de page + 12 bits d'offset de la page), soit 16 Mo adressable par le PMM. 16 Mo, c'est plutôt énorme. Je décide donc que, sur les 12-bit donnés par le registre de page, de réserver les 3 premiers bits de poids fort pour indiquer le chip select (soit 8 en tous) et l'adresse de base est réduite de 16 Mo à 2 Mo.
Imagine que tu es un backplane avec 8 slots. Tu as un /CS associé à chaque slot de 0 à 7. Le PMM te permet de transformer une adresse 16-bit en une adresse 21-bit et le chip select qui va avec. Dans chaque slot, le périphérique pourra s'activer avec le chip select concerné et utiliser les 21 bit d'adresse en plus des données à sa guise (SRAM, FLASH ou registres de contrôle). C'est très flexible. Le programme choisi de mapper l'accès à l'endroit où il veut dans son espace logique limité à 64Ko.
Au niveau des registres de page : ça revient à avoir une file de 16 registres contenant 12 bits à écrire via un OUT (BC),A et à lire quand un /MREQ est actif avec un /RD ou /WR actif également. En somme une "SRAM" de 24 octets.
Supposons qu'une page fasse 4Ko. J'ai 16 registres de page : j'ai bien une adresse logique sur 16-bit (4-bit d'index du registre de page + 12 bits d'offset de la page). Un registre de page va contenir 12 bits d'adresse de base. Donc au total ça fait 24-bit d'adresse (12 bits donnés par le registre de page + 12 bits d'offset de la page), soit 16 Mo adressable par le PMM. 16 Mo, c'est plutôt énorme. Je décide donc que, sur les 12-bit donnés par le registre de page, de réserver les 3 premiers bits de poids fort pour indiquer le chip select (soit 8 en tous) et l'adresse de base est réduite de 16 Mo à 2 Mo.
Imagine que tu es un backplane avec 8 slots. Tu as un /CS associé à chaque slot de 0 à 7. Le PMM te permet de transformer une adresse 16-bit en une adresse 21-bit et le chip select qui va avec. Dans chaque slot, le périphérique pourra s'activer avec le chip select concerné et utiliser les 21 bit d'adresse en plus des données à sa guise (SRAM, FLASH ou registres de contrôle). C'est très flexible. Le programme choisi de mapper l'accès à l'endroit où il veut dans son espace logique limité à 64Ko.
Au niveau des registres de page : ça revient à avoir une file de 16 registres contenant 12 bits à écrire via un OUT (BC),A et à lire quand un /MREQ est actif avec un /RD ou /WR actif également. En somme une "SRAM" de 24 octets.
Re: [74LS612] MMU 8-bit -> 12-bit, un EPM peut émuler ça ?
Malgré tout ça me parait réalisable avec un EPM en utilisant un schéma à plusieurs 74 tu peux y arriver .
Re: [74LS612] MMU 8-bit -> 12-bit, un EPM peut émuler ça ?
Je n'avais pas vu ce post. Donc j'apporte une réponse tardive:
Pour émuler ton circuit (74ls612) il faut beaucoup de registres: au moins 16*12 + les buffer d'I/O donc ça ne tient pas dans un EPM "classique". Il faut se tourner vers des versions plus récentes en 3.3V (par exemple un MAX II (EPM 240, 570...)).
Pour émuler ton circuit (74ls612) il faut beaucoup de registres: au moins 16*12 + les buffer d'I/O donc ça ne tient pas dans un EPM "classique". Il faut se tourner vers des versions plus récentes en 3.3V (par exemple un MAX II (EPM 240, 570...)).
Re: [74LS612] MMU 8-bit -> 12-bit, un EPM peut émuler ça ?
Si j'ai bien compris la problématique de Hlide:
Il faut paginer sur les adresses A[16..12] et A[19..17] puisque les adresse A[0..11] sont directement connectés aux ROM, RAM ...
Ce qui ce résume à avoir une bascule 5 bits A[16..12] d'un côté (pagination)
et un décodage d'adresses 3 bits A[19..17] de l'autre (activation par /CS)
Ca peut être fait sans utiliser un 74LS612 mais en combinant soir d'autres portes (FLIP-FLOP, ... ) soit directement en VHDL.
Un exemple qui n'utilise que très peut de macrocells <50 :
Extrait d'un de mes montages et tu voit que tu peu avoir 8 bits disponibles par bascules
et tu peut utiliser un décodeur pour activé les 8 périphériques
La dans l'exemple il y à 2 décodeurs spécifiques mais ont peut en avoir 1 par périphérique ou mettre un 1 parmi 8 ....
Et je pense que cela peut tenir dans un EPM7128 (je met pas en doute Fred mais au vue de la problématique d'autres solution
sont envisageable je pense).
EDIT: rectification et compléments.
Il faut paginer sur les adresses A[16..12] et A[19..17] puisque les adresse A[0..11] sont directement connectés aux ROM, RAM ...
Ce qui ce résume à avoir une bascule 5 bits A[16..12] d'un côté (pagination)
et un décodage d'adresses 3 bits A[19..17] de l'autre (activation par /CS)
Ca peut être fait sans utiliser un 74LS612 mais en combinant soir d'autres portes (FLIP-FLOP, ... ) soit directement en VHDL.
Un exemple qui n'utilise que très peut de macrocells <50 :
Extrait d'un de mes montages et tu voit que tu peu avoir 8 bits disponibles par bascules
et tu peut utiliser un décodeur pour activé les 8 périphériques
La dans l'exemple il y à 2 décodeurs spécifiques mais ont peut en avoir 1 par périphérique ou mettre un 1 parmi 8 ....
Et je pense que cela peut tenir dans un EPM7128 (je met pas en doute Fred mais au vue de la problématique d'autres solution
sont envisageable je pense).
EDIT: rectification et compléments.
Re: [74LS612] MMU 8-bit -> 12-bit, un EPM peut émuler ça ?
Tu n'as pas pris en compte ma correction du dernier post.
En entrée, du 16-bit :
- A[11..0] n'est pas considéré pas la pagination, donc pass-thru en sortie.
- A[15..12] décrit les 16 registres découpant l'espace 16-bit en 16 pages de 4 Ko : une valeur 0 donnera le registre 0, 15 le registre 15. Chaque registre donne 12-bit de valeur. Du coup, $0000-$0FFF -> registre 0, ..., $F000-$FFFF -> registre 15.
En sortie :
- A[11..0] est lu directement par le périphérique qui sera activé par la pagination pour une lecture/écriture d'un octet (instruction LD).
- A'[20..12] les 9 bits de valeur faible du registre sélectionné par A[15..12] pour compléter le bus d'adresse A avec A'[20..12].
- A'[23..21] les 3 bits de valeur restant du registre sélectionné par A[15..12] pour activer le chip select /XCSn parmi les 8.
Note: on retrouve avec 9 + 3 = 12 bits du registre de pagination
Donc le bus visible par un périphérique (RAM, ROM ou Contrôleur avec registre, i.e, du port I/O mappé en mémoire) se fera avec :
- Control bus : /MREQ + /RD ou /WR ou /M1 + /XCSi où i dépend du périphérique sélectionné par le registre de pagination
- Address bus : A[11..0] + A'[16..12] (soit 21-bit, i.e, jusqu'à 2 Mo adressable pour le périphérique sélectionné)
Donc ce n'est pas 8-bit par registre mais bien 12-bit.
Le bus d'adresse par la carte-mère :
[CPU] === A[15..0] ===> [CPLD] ===> A[11..0] + A'[16..12] + XA[23..16] où A' dénote une substitution d'une partie du bus d'adresse par ceux produit par le CPLD et XA les bits d'adresse au-delà des 16-bit habituels.
En entrée, du 16-bit :
- A[11..0] n'est pas considéré pas la pagination, donc pass-thru en sortie.
- A[15..12] décrit les 16 registres découpant l'espace 16-bit en 16 pages de 4 Ko : une valeur 0 donnera le registre 0, 15 le registre 15. Chaque registre donne 12-bit de valeur. Du coup, $0000-$0FFF -> registre 0, ..., $F000-$FFFF -> registre 15.
En sortie :
- A[11..0] est lu directement par le périphérique qui sera activé par la pagination pour une lecture/écriture d'un octet (instruction LD).
- A'[20..12] les 9 bits de valeur faible du registre sélectionné par A[15..12] pour compléter le bus d'adresse A avec A'[20..12].
- A'[23..21] les 3 bits de valeur restant du registre sélectionné par A[15..12] pour activer le chip select /XCSn parmi les 8.
Note: on retrouve avec 9 + 3 = 12 bits du registre de pagination
Donc le bus visible par un périphérique (RAM, ROM ou Contrôleur avec registre, i.e, du port I/O mappé en mémoire) se fera avec :
- Control bus : /MREQ + /RD ou /WR ou /M1 + /XCSi où i dépend du périphérique sélectionné par le registre de pagination
- Address bus : A[11..0] + A'[16..12] (soit 21-bit, i.e, jusqu'à 2 Mo adressable pour le périphérique sélectionné)
Donc ce n'est pas 8-bit par registre mais bien 12-bit.
Le bus d'adresse par la carte-mère :
[CPU] === A[15..0] ===> [CPLD] ===> A[11..0] + A'[16..12] + XA[23..16] où A' dénote une substitution d'une partie du bus d'adresse par ceux produit par le CPLD et XA les bits d'adresse au-delà des 16-bit habituels.
Re: [74LS612] MMU 8-bit -> 12-bit, un EPM peut émuler ça ?
Le mieux est de te faire un petit schéma et tu verras ce que tu peut obtenir ou non avec un CPLD
Re: [74LS612] MMU 8-bit -> 12-bit, un EPM peut émuler ça ?
Oui j'imagine qu'il faudra que je le fasse soit en VHDL (Quartus EPMxxxx), soit en schéma (mais euh jamais utilisé pour un CPLD) pour me rendre compte que Fred_74 a sûrement raison.
Re: [74LS612] MMU 8-bit -> 12-bit, un EPM peut émuler ça ?
Ça fait un moment mais oui @Fred_72 a raison car on parle bien d'un système de pagination et non de banque qui en demande trop pour les EPM que j'envisageais (ça passait tout juste avec un 160) donc j'ai laissé tomber. Ou alors je me dirige vers un système de banque comme tu me le proposais @6502man.