Pagina 1 di 1

Spiegazione PIO

MessaggioInviato: 25 apr 2017, 11:08
da Fab996
Ci sarebbe qualcuno che possa spiegarmi come funziona una PIO(parallel input-output), in particolare non ho ben capito come si trovano gli indirizzi disponibili...

Re: Spiegazione PIO

MessaggioInviato: 25 apr 2017, 11:20
da Fedhman
Di cosa stiamo parlando? Microcontrollore, FPGA, altro? Quali modelli in particolare?

Re: Spiegazione PIO

MessaggioInviato: 25 apr 2017, 11:24
da Fab996
Fedhman ha scritto:Di cosa stiamo parlando? Microcontrollore, FPGA, altro? Quali modelli in particolare?

Mi sembra la INTEL 8255A, per esempio in questo esercizio.
Si vuole realizzare un piccolo calcolatore embedded a 16 bit dotato di una ROM di 4KB, una RAM di 8KB e un dispositivo di I/O memory mapped a cui interfacciarsi tramite una PIO.Definire gli spazi di indirizzamento dei vari dispositivi a disposizione supponendo di poter utilizzare 16 bit per specificare gli indirizzi.
Non capisco come faccia a calcolare gli indirizzi in questo modo:

ROM: 4K (2^12) indirizzi

n da 0000 0000 0000 0000
n a 0000 1111 1111 1111

RAM: 8K (2^13) indirizzi

n da 1000 0000 0000 0000
n a 1001 1111 1111 1111

PIO: 4 indirizzi

n da 1111 1111 1111 1100
n a 1111 1111 1111 1111

Re: Spiegazione PIO

MessaggioInviato: 25 apr 2017, 12:17
da xyz
Gli indirizzi sono arbitrari l'importante è non sovrapporre gli spazi di indirizzamento, la ROM è messa all'inizio, la RAM al centro, il PIO alla fine.

Re: Spiegazione PIO

MessaggioInviato: 25 apr 2017, 12:28
da Fab996
xyz ha scritto:Gli indirizzi sono arbitrari l'importante è non sovrapporre gli spazzi di indirizzamento, la ROM è messa all'inizio, la RAM al centro, il PIO alla fine.

Però per esempio per la ROM da 4K, so che ho 2^10*2^2=2^12 indirizzi che vanno da 0000 0000 0000 0000 a 0000 1111 1111 1111, ho capito che l'importante è non sovrapporre lo spazio di indirizzamento, però se per esempio avessi messo da 0000 0000 0000 0000 a 1111 1111 1111 1111, andava bene lo stesso? Poi non c'è il rischio che esco dal range di indirizzamento?

Re: Spiegazione PIO

MessaggioInviato: 25 apr 2017, 12:44
da dimaios
Se hai a disposizione 12 bit non puoi indirizzare uno spazio di memoria a 16 bit.

Re: Spiegazione PIO

MessaggioInviato: 25 apr 2017, 12:50
da Fab996
Vero grazie, però per la ROM, non rappresento in questo modo 2^11,invece che 2^12? E poi perché per la RAM, devo mettere un ulteriore bit in prima posizione? Non ho ben capito perché mettendo quel bit gli indirizzi non si sovrappongono

Re: Spiegazione PIO

MessaggioInviato: 25 apr 2017, 13:46
da xyz
Stai mappando la memoria di un calcolatore embedded a 16 bit, quindi il tuo spazio di memoria totale ha il seguente intervallo (io preferisco i numeri esadecimali):

0x0000 a 0xFFFF

I dispositivi da mappare hanno uno spazio di indirizzamento inferiore altrimenti o non sono utilizzabili o al massimo è possibile utilizzarne uno solo (se ha esattamente gli stessi bit del calcolatore embedded). Lo spazio occupato non si deve sovrapporre e non deve superare i confini di indirizzamento.


  • ROM
  • spazio da 4 ki (attento si usa ki minuscolo non K maiscolo)
    12 bit da 0x000 a 0xFFF
  • RAM
  • spazio 8 ki
    13 bit da 0x0000 a 0x1FFF
  • PIO
  • spazio 4
    2 bit da 0x0 a 0x3

Una possibile mappatura:

    0x0000 a 0x0FFF ROM (0x0FFF - 0x0000 = 0x0FFF)
    0x1000 a 0x2FFF RAM (0x2FFF - 0x1000 = 0x1FFF)
    0xFFFC a 0xFFFF PIO (0xFFFF - 0xFFFC = 0x0003)
Se vuoi va bene anche:

    0x1234 a 0x3233 RAM (0x3233 - 0x1234 = 0x1FFF)
    0x4321 a 0x4324 PIO (0x4324 - 0x4321 = 0x0003)
    0x4325 a 0x5324 ROM (0x5324 - 0x4325 = 0x0FFF)

Naturalmente la prima è più facile da mappare, basta imporre i bit che mancano, la seconda è più difficile ma è possibile lo stesso..