Presentation laddar. Vänta.

Presentation laddar. Vänta.

2G1518 Datorteknik Föreläsning 5 Bussar In- och utmatning (Input/Output, I/O) Programstyrd pollning hösten 2005 för D3 och CLMDA m fl.

Liknande presentationer


En presentation över ämnet: "2G1518 Datorteknik Föreläsning 5 Bussar In- och utmatning (Input/Output, I/O) Programstyrd pollning hösten 2005 för D3 och CLMDA m fl."— Presentationens avskrift:

1 2G1518 Datorteknik Föreläsning 5 Bussar In- och utmatning (Input/Output, I/O) Programstyrd pollning hösten 2005 för D3 och CLMDA m fl

2 3 övningsgrupper denna vecka ● onsdag 5 oktober kl 10–12 – L42, L43, L44 (Drottning Kristinas väg 30) ● torsdag 6 oktober kl 10–12 – Q21, Q22, Q23

3 Föreläsning 5 Innehåll, rubriker ● Bussöverföring (Bus Data Transfer) ● Read/Write ● I/O-enheter, adressering ● Parallellport, funktion, pollning ● Serieport, funktion, pollning ● Timer, funktion, pollning ● Eko-program, Kommunikations-program ● Paritetskontroll

4 Litteraturhänvisningar Kursbokens avsnitt  1.4 Maskinvara  2.6 Bussar och enkel I/O-hantering  5.2 Koppling till omvärlden, sid  9.4 Kommunikation mellan processor...

5 Programexekvering i två steg EXECUTE FETCH (update PC) (decode)

6 Viktiga delar i en dator CPU MEM BUS I/O program data

7 Bus Data Transfer viktiga aspekter MASTER SLAVE BUS

8 Bus Data Transfer Memory Read ● Master - till exempel CPU ● Slave - till exempel Memory ● Master levererar adress (t. ex. PC-value) ● Master ger läsbegäran (Read Request) ● Slave levererar data (t. ex. en instruktion) ● Slave levererar kvittens (Acknowledgement) ● Används vid Fetch Instruction och LOAD

9 Bus Data Transfer Memory Read Address Read Vad händer om (Rd) Ack uteblir ? 12 Data (Rd) Ack 34

10 Bus Data Transfer Memory Write ● Master - till exempel CPU ● Slave - till exempel minne ● Master levererar adress ● Master levererar data ● Master ger skrivbegäran (Write Request) ● Slave levererar kvittens (Acknowledgement) ● Används vid STORE

11 Bus Data Transfer Memory Write Address Write Vad händer om (Wr) Ack uteblir ? 2 Data (Wr) Ack

12 Bus Data Transfer Asynchronous Memory Read Address Read Data (Rd) Ack Slave kvitterar (med ACK) först när Slave levererar data

13 Bus Data Transfer Synchronous Memory Read Address Read Data (Rd) Ack clock address memrd data

14 Asynkron / synkron buss ● Asynkron – klarar enheter med olika hastigheter – bra för långsamma och blandade enheter (I/O) ● Synkron – kan ge högre hastighet – kan överföra adress och data separat, och utnyttja tiden mellan dem till annat (split-transaction bus) – bra för snabba, likadana enheter (minne)

15 Flera SLAVE fungerar bra - på olika adresser ! MASTER BUS SLAVE ?? Adress-avkodare

16 Flera minnen - på olika adresser ! CPU MEM BUS MEM Adress dittenAdress datten ?? Adress-avkodare

17 Flera Slave - på olika adresser ! CPU MEM BUS I/O Adress dittenAdress datten ?? Adress-avkodare

18 Flera Master fungerar - en Arbiter behövs för att välja mellan dem Master MEM BUS I/O Adress dittenAdress datten ?? Adress-avkodare Master Arbiter

19 Bussledningar Adressledningar 8-64 stycken, för att kunna peka ut varje byte Dataledningar, minst 8 bitar, upp till 128 bitar eller mer Kontrolledningar Read + Write, eller RD/WR och Data Strobe Ack, gemensam för läs och skriv Bus Request, Bus Grant – vid flera Masters IRQ - Interrupt ReQuest Övrigt Jord (Gnd), spänningsmatning (Vcc), clock, reset, m fl

20 Bussledningar (forts.) ● Långsam Slave kan bromsa läsning/skrivning ● fördröj Acknowledge, eller ● inför speciell Hold-signal ● Tidövervakning, Time-Out ● om Acknowledge aldrig kommer ● Bus Error – ingen Acknowledge kom

21 Bussledningar (forts.) ● Om det finns mer än en Master så behövs en Bus Arbiter (fördelare) ● Varje Slave måste ha adressavkodare så att max. en enhet svarar på Request ● Läsning/skrivning till oanvänd adress medför... – Time-out eftersom ingen enhet svarar med Acknowledgement

22 Bus Data Transfer Bus Error MASTER SLAVE (svarar ej) BUS Time-Out BusErrror X Adress-avkodare

23 Två sätt att ansluta I/O  Memory Mapped  Memory och I/O har olika adresser  Samma kontroll-signaler för minne och I/O  Vanliga Load och Store används för I/O, inga specialinstruktioner behövs  I/O Mapped  Memory och I/O kan ha samma adresser  Olika kontroll-signaler för minne och I/O  Speciella instruktioner används för I/O IN R1,117 OUT R2,118

24 Parallell-port ● Parallellport brukar ha en multipel av 8 signaler/anslutningar ● Signalriktning kan vara programmerbar separat för varje signal/pinne ● Inport består normalt av grindar – läsning ger värdet just då ● Utport består normalt av register – skrivning sätter nytt värde, gäller till nästa skrivning ● Handskakningssignaler kan finnas

25 IN-port & IN-PORT IN-DATA RD + adress- avkodning Adress Data Control CPU-BUSS IN 0 IN n DnDn D0D0 IN 1 D1D1 grindar & & RD + adressavkodning

26 IN-port IN-PORT IBFWR + adressavkodningIN-DATA IBF Adress Data Control CPU-BUSS IN 0 IN n DnDn D0D0 IN 1 D1D1 Q Q’ set clear IBF WR RD vippa grindar & & & RD + adress- avkodning RD + adressavkodning

27 UT-port UT-PORT OBERD + adressavkodningUT-DATA OBE Adress Data Control CPU-BUSS Q Q’ D cl Q Q’ D cl Q Q’ D cl DnDn D0D0 D1D1 UT 0 UT n UT 1 Q Q’ set clear OBE RD WR register (vippor) vippa WR + adress- avkodning WR + adressavkodning

28 Nios2 button_pio Memory Mapped Addresses 0x840 0x844 0x848 0x84C SW7 SW6 SW5 SW4 SW5 SW4 SW6SW GLOBAL RESET Delar av Lab-kortet D6 D5 D4 D3

29 D6 D5 D4 D3 Nios2 dip_pio Memory Mapped Addresses 0x850 0x854 0x858 0x85C SW5 SW4 SW6SW GLOBAL RESET Delar av Lab-kortet

30 Nios2 led_pio Memory Mapped Addresses 0x810 0x814 0x818 0x81C D3 D4 D5 D6 SW5 SW4 SW6SW GLOBAL RESET Delar av Lab-kortet D6 D5 D4 D3

31 Parallell-port Handskakningssignaler  IBF - Input Buffer Full  OBE - Outport Buffer Empty  IBF och OBE är tillgängliga för program  IBF och OBE är tillgängliga för hårdvara

32 Parallell-port (forts.) Handskakningssignaler  IBF - Input Buffer Full  OBE - Outport Buffer Empty  Aktiv signal IBF (full inport) begäran om åtgärd, från omvärlden till CPU/program betyder: “hallå där, nu finns nya indata”  Aktiv signal OBE (tom utport) begäran om åtgärd, från omvärlden till CPU/program betyder: “hallå där, leverera nya utdata” (Klarsignal = Readysignal)

33 Parallell-port (forts.) Handskakningssignaler  IBF - Input Buffer Full  IBF ettställs normalt då omgivningen levererar nya data till inporten  IBF nollställs/kvitteras av program, t.ex. vid läsning av inport (implicit sidoeffekt) eller med egen instruktion (explicit)

34 Parallell-port (forts.) Handskakningssignaler  OBE, Output Buffer Empty  OBE ettställs normalt då omgivningen har tagit hand om utdata  OBE nollställs/kvitteras av program, t.ex. vid skrivning av utport (implicit sidoeffekt) eller med egen instruktion (explicit)

35 Minnesliknande beteende vid läsning och skrivning 1. Ett värde som skrivs till en viss adress kan sedan läsas från samma adress 2. Skrivning till en adress påverkar ej innehåll på andra adresser 3. Läsning från en adress påverkar ej innehåll på någon adress  Annat beteende vid minnesreferenser kallas för "icke minnesliknade"  I/O-enheter bryter oftast mot (1), ibland mot (2), men ska helst inte bryta mot (3)

36 Handskakning med IBF/OBE Flödes-schema, invänta ready (blockerande I/O) INHOPP UTHOPP IBF=1? Nollställ IBF LÄS INDATA LÄS IBF JA NEJ INHOPP UTHOPP OBE=1? Nollställ OBE SKRIV UTDATA LÄS OBE JA NEJ Wait for READY Action & Acknowledge !

37 Handskakning med IBF/OBE Flödes-schema, direkt retur (icke blockerande I/O) INHOPP UTHOPP IBF=1? Nollställ IBF PAR:= INDATA LÄS IBF JA NEJ PAR:= -1INHOPP UTHOPP OBE=1? Nollställ OBE och PAR SKRIV UTDATA LÄS OBE JA NEJ PAR:= -1

38 getdata från inport – subrutin med pollning av statusbit (blockerande I/O) #int returvärde = getdata(void) defineindata 0x... definestatus 0x... defineibfmask 0x... getdata:loadreg1 <-- status andireg1, reg1,ibfmask beqreg1, zero, getdata loadreturvärde <-- indata return

39 putdata till utport – rutin med pollning av statusbit (blockerande I/O) #void putdata(parameter) defineutdata 0x... definestatus 0x... defineobemask 0x... putdata:loadreg1 <-- status andireg1, reg1, obemask beqreg1, zero, putdata storeutdata <-- parameter return

40 Serie-port ● Används för seriell kommunikation ● Vanligt är asynkron kommunikation, ett tecken kan komma när som helst ● Synkron kommunikation finns även, det kommer alltid en ström av bitar

41 Serieport Parallella data in Parallella data ut skiftregister Seriell kabel skiftregister SändareMottagare

42 Serie-port Asynkron kommunikation  Varje tecken (bokstav) sänds för sig  Ett tecken kodas ofta med 7 bitars ASCII  Dessutom tillkommer 1 startbit 1 paritetsbit (opt) udda eller jämn paritet 1 eller 2 stoppbitar

43 Serie-port Asynkron kommunikation 0x x xxxxxP1 1 7-bitars ASCII 1 startbit (0) 1 Paritetsbit (P) Stoppbit(ar) (1) Synkroniseringsflank Avkänningstidpunkter

44 Synkronisering ● Bit-synkronisering mottagare måste polla mitt i prick ● Byte-synkronisering När börjar nytt tecken (SYN) ● Block-synkronisering När börjar ett nytt block/paket (SOH...)

45 Serie-port Asynkron kommunikation ● Bithastighet (kallas felaktigt för baudrate) ● Teckenlängd (5, 6, 7, 8, …) ● Paritet On/Off, Even/Odd ● Antal Stoppbitar (1, 1½, 2) (antal perioder mellan sända tecken) (baudrate = signaleringshastighet)

46 getchar från serieport rutin med pollning av statusbit ;int returvärde = getchar(void) defineindata0x... definestatus0x... defineibfmask0x... getchar:loadtmpreg <-- status anditmpreg, tmpreg, ibfmask beqtmpreg, zero, getchar loadreturvärde <-- indata return

47 putchar till serieport rutin med pollning av statusbit #void putchar(parameter) defineutdata0x... definestatus0x... defineobemask0x... putchar:loadtmpreg <-- status anditmpreg, tmpreg, obemask beqtmpreg, zero, putchar storeutdata <-- parameter return

48 Nios uart_0 Memory Mapped Addresses 0x860 0x864 0x868 uart_00x860-86F uart_1 0x880-88F uart_0 STATUS RxRdy (IBF) TxRdy (OBE) RxDATA (RD) TxDATA (WR)

49 #int returvärde = getchar(void).equindata,0x860;0x880.equutdata,0x864;0x884.equstatus,0x868;0x888.equibfmask,0x80;0x80 getchar: MOVIAr8, indata LDWr9, 8(r8)# status = indata + 8 ANDIr9, r9, ibfmask BEQ r9, r0, getchar LDWr4, 0(r8) RET getchar från serieport, Nios2-kod (blocking)

50 putchar från serieport, Nios2-kod (blocking) #void putchar(parameter).equindata,0x860;0x880.equutdata,0x864;0x884.equstatus,0x868;0x888.equobemask,0x40;0x40 putchar: MOVIAr8, indata LDWr9, 8(r8)# status = indata + 8 ANDIr9, r9, obemask BEQ r9, r0, putchar STWr4, 4(r8)# utdata = indata + 4 RET

51 Laboration 2 EKO-program ● Skriv ett progam som ekar tecken från tangentbord till terminalfönster start:callinitserie# VID BEHOV main:callgetchar movr2, r4 callputchar brmain

52 Flödesschema för EKO-program START getcharputcharinit

53 Flödesschema för korsvis kommunikation START getcharx? sendchar NEJ JA reccharx? putchar JA NEJ ● nytt tecken från tangentbord? – om ja: sänd ut tecknet på länken ● nytt tecken från länken? – om ja: skriv tecknet till skärmen

54 EKO-program med korsvis kommunikation start:callinitserie# initera serieportar vid behov gettst:callgetcharx# tecken läst från tangentbord? bltr2, r0, rectst# om inte: hopp till rectst movr4, r2# annars: sänd callsendchar# ett tecken rectst:callreccharx# tecken mottaget från kommunikationslänk? bltr2, r0, gettst# om inte: hopp till gettst movr4, r2# annars: skriv till skärm call putchar# ett tecken brgettst# och loopa

55 Korsvis kommunikation med paritetskontroll START getcharx? parmake NEJ JA ● nytt tecken från tangentbord? – om ja: beräkna checksumma simulera slumpmässiga fel sänd ut tecknet på länken ● nytt tecken från länken? – om ja: kolla checksumma skriv tecknet till skärmen sendchar errmake reccharx? partest NEJ JA putchar

56 Korsvis kommunikation med paritetskontroll start:callinitserie# initera serieportar vid behov gettst:callgetcharx# tecken läst från tangentbord? bltr2, r0, rectst# om inte: hopp till rectst movr4, r2# annars: beräkna checksumma callparmake movr4, r2# och simulera slumpmässiga fel callerrmake movr4, r2 callsendchar# sänd sedan ett tecken rectst:callreccharx# tecken mottaget från kommunikationslänk? bltr2, r0, gettst# om inte: hopp till gettst movr4, r2# annars: kontrollera checksumma callpartest movr4, r2 call putchar# skriv slutligen ett tecken till skärmen brgettst# och loopa

57 Hardware Timer ● Används för exaktare tidmätning ● alt1: Counter räknar upp från 0 till value ● alt2: Counter räknar ner från value till 0 ● när Counter räknat klart kallas det Time-Out ● Vid Time-Out ettställs en vippa vars värde finns tillgängligt för program och elektriskt ● Vippan kan nollställas (hur?)

58 Counter som räknar Flödesschema för väntan entry return TimeOut=1? Read TimeOut YES NO Clear TimeOut Wait for Time-Out Action & Acknowledgement !

59 Flödesschema DELAY med PROGRAM-LOOP N := startN := N - 1 N = 0 ? IN-hopp UT-hopp JA NEJ K := millisek K := K - 1 K = 0 ? IN-hopp UT-hopp JA NEJ Byt ut program-loop mot timer-loop Program-loop 1 millisekund Laboration 1 IN-parameter i r4

60 Flödesschema DELAY med TIMER K := K - 1 K = 0 ? IN-hopp UT-hopp JA NEJ entry return TimeOut=1? Clear TimeOut Read TimeOut YES NO Timer-loop 1 millisekund K := millisek Laboration 2 IN-parameter i r4

61 Timer med Counter som räknar ner  Counter laddas med period  Counter minskas med ett vid klockflank  Counter=0 medför ettställ Time-Out  Counter laddas om vid Time-Out  period kan väljas med program

62 Timer Statusvippa Time-Out Statusvippa som kallas Time-Out ● ettställs vid Time-Out kan pollas av program ● ska nollställas av program tillgänglig som elektrisk signal

63 Timer Statusvippa Run  Statusvippa som kallas Run ettställs av program nollställs av program kan pollas av program tillgänglig som elektrisk signal ?

64 Nios Timer Hårdvaru-figur counter clock period copy write from program run start time-out Q Q’ D cl set clear stop zero snap-shot read from program copy load Q Q’ D cl from program read from program

65 Nios Timer Memory Mapped Addresses 0x820 0x824 0x828 0x82C 0x830 0x834 0x838 0x83C

66 0x820 status 0x824 control 0x828 periodl 0x82C periodh 0x830 snapl 0x834 snaph Nios Timer Status / Control etc run TO Time-Out ITO cont start stop 15 0

67 Nios Timer Hokus Pokus  TO - Time Out, bit 0 på adress 0x820  run, bit 1 på adress 0x820  Clear Time Out, Write anything to 0x820  Continous Counting, ”set” bit 1 at 0x824  Start run,”set” bit 2 at 0x824  Stop Counting, ”set” bit 3 at 0x824  WR to snapshot, copy Counter to SnapShot (ej komplett information)

68 Serieport Parallella data in Parallella data ut skiftregister Seriell kabel skiftregister SändareMottagare

69 Paritet i ett n-bitars ord jämn eller udda paritet ● Jämn paritet = jämnt antal ettor i ordet ● Udda paritet = udda antal ettor i ordet ● Feldetektering Detekterar alla ”udda-bits-fel” dvs om ett udda antal bitar har växlat värde ● Felkorrigering, hur då ??? ● Omsändning !!!

70 Paritetskontroll vid kommunikation ● 1-bits checksumma för varje 7-bits tecken ● Sändaren – kompletterar med en extra bit – bitens värde sätts så att det blir rätt paritet i det ord som sänds ● Mottagaren – kontrollerar att det är rätt paritet i det mottagna ordet

71 Kartbild av minnet ● AdressMEM / IO ● 0 - 7FFboot_monitor_rom ● Fled_pio ● Ftimer_0 ● Fbutton_pio ● Fdip-pio ● Fuart_0 (”main”) ● Fuart_1_debug ● FFFFsram, 256 kByte

72 Macro för en ny syntetisk instruktion.macroLOAD reg, addr MOVIA\reg, \addr LDW\reg, [\reg].endm Effekten av detta är att man kan använda en ny instruktion, LOAD %L0, 0x470 för att kopiera 32 bitar till %L0 från minnet på adress 0x470


Ladda ner ppt "2G1518 Datorteknik Föreläsning 5 Bussar In- och utmatning (Input/Output, I/O) Programstyrd pollning hösten 2005 för D3 och CLMDA m fl."

Liknande presentationer


Google-annonser