PORT d'ENTREES/SORTIES

Schéma logique

Chronogrames
Script de simulation
/*initialisation*/
logic_init 0
open 'write_data'
open 'read_data'
open '*reset'
open 'write_crx'
open 'write_crx'
open 'port'
open 'd'
s 200
deposit '*reset',1      /*on enleve le reset*/
s 200
/*test du port en entree port <=01010101*/
deposit 'port',$x55
s 200
deposit 'read_data',1   
s 200
deposit 'read_data',0
s 200
/*test du port en sortie : d <= 01010101*/
deposit 'd',$x55        
s 200
deposit 'write_data',1  /* DDRA <= FF : tout en sortie!*/
s 200
deposit 'write_data',0
s 200
deposit 'write_crx',1   /* CRA2 <= 1 : ORA selectionne */
s 200
deposit 'write_crx',0
s 200
deposit 'write_data',1  /* ORA <= 1*/
s 200
deposit 'write_data',0
s 200

LIGNE DE CONTROLE CX1 : Schéma Logique

LIGNE DE CONTROLE CX1 : Chronogrammes

LIGNE DE CONTROLE CX1 : Script de simulation


/*initialisation*/
logic_init 0
/* entrees */
open 'Cx1'
open 'd<0>'
open 'd<1>'
open 'd<7>'
open 'read_data'
open 'write_crx'
open 'read_crx'
open '*reset'
/* sorties */
open '*IRQx'
open 'o_crx7'
s 200

deposit '*reset',1      /*on enleve le reset*/
s 200

/* premier test : crx1 = 0, crx0 = 0 */
deposit 'd',0
s 200
deposit 'write_crx',1
s 200
deposit 'write_crx',0
s 200
deposit 'CX1',1
s 200
/* CX1 :front descendant ,pas d'IT*/
deposit 'CX1',0
s 200
deposit 'read_crx',1    /* petit test de lecture */
s 200
deposit 'read_crx',0
s 200
/* en principe, remontee de o_crx7 */
deposit 'read_data',1   
s 200
deposit 'read_data',0
s 200

/* deuxieme test : crx1 = 0, crx0 = 1 */
deposit 'd',1
s 200
deposit 'write_crx',1
s 200
deposit 'write_crx',0
s 200
deposit 'CX1',1
s 200
deposit 'CX1',0         /* CX1 :front descendant */
s 200
deposit 'read_crx',1    /* petit test de lecture */
s 200
deposit 'read_crx',0
s 200
/* en principe, remontee de o_crx7 */
deposit 'read_data',1   
s 200
deposit 'read_data',0
s 200
deposit 'read_crx',1    /* petit test de lecture */
s 500
deposit 'read_crx',0
s 200

/* troisieme test : crx1 = 1, crx0 = 0 */
deposit 'd',2
s 200
deposit 'write_crx',1
s 200
deposit 'write_crx',0
s 200
/* CX1 :front montant ,pas d'IT*/
deposit 'CX1',1         
s 200
deposit 'CX1',0
s 200
deposit 'read_crx',1    /* petit test de lecture */
s 200
deposit 'read_crx',0
s 200
/* en principe, remontee de o_crx7 */
deposit 'read_data',1  
s 200
deposit 'read_data',0
s 200

/* quatrieme test : crx1 = 1, crx0 = 1 */
deposit 'd',3
s 200
deposit 'write_crx',1
s 200
deposit 'write_crx',0
s 200
deposit 'CX1',1         /* CX1 :front montant */
s 200
deposit 'CX1',0
s 200
deposit 'read_crx',1    /* petit test de lecture */
s 200
deposit 'read_crx',0
s 200
/* en principe, remontee de o_crx7 */
deposit 'read_data',1   
s 200
deposit 'read_data',0
s 200

MULTIPLEXEUR 1x2

DEMULTIPLEXEUR 2x1

DECODEUR D'ADDRESSE


Le décodeur d'adresse permet d'addresser les registres internes du PIA comme des zones mémoires.
On a donc dans le partitionnage de la mémoire une plage réservée aux périphériques (dont le PIA).
Pour selectionner le bon boitier (Mémoire ou périphérique) on calcule à partir de la table de partition l'expression du chip select en font des bits du bus d'adresse (ie: CSpia= /a21 . a20 . /a19 . /a18 )

P.I.A.