Presentation laddar. Vänta.

Presentation laddar. Vänta.

1 2G1518 Datorteknik Föreläsning 5, våren 2007 Bussar In- och utmatning – I/O Pollning Handskakning.

Liknande presentationer


En presentation över ämnet: "1 2G1518 Datorteknik Föreläsning 5, våren 2007 Bussar In- och utmatning – I/O Pollning Handskakning."— Presentationens avskrift:

1 1 2G1518 Datorteknik Föreläsning 5, våren 2007 Bussar In- och utmatning – I/O Pollning Handskakning

2 2 F1F2F3 F4 F5F6F7F8F9F10Ö2Ö1 Ö3 Ö4Ö5 LAB-1 LAB-2Hemlab-1Ö6 Ö7LAB-3 Hemlab-2Ö8Hemlab-3Ö9TentamenÖ10 Assemblerkod 4 stegs pipeline Nios2time Nios2io C-kod Nios2int Cache-minnen CPU-scheduling 2G1518 Datorteknik

3 3 Rubriker ● Bussöverföring – läsning och skrivning ● Adressering – memory-mapped, I/O- mapped ● Parallellport – uppbyggnad och funktion ● Handskakning ● Serieport – funktion, paritetskontroll ● Eko-program, kommunikationsprogram ● Timer

4 4 Att läsa ● Kursboken, avsnitt:  1.4 Maskinvara  2.6 Bussar och enkel I/O-hantering  5.2 Koppling till omvärlden, sida 151–156  9.4 Kommunikation mellan processor och I/O-enheter

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

6 6 Programmerarens datormodell... cell 0 cell 1 cell 2 cell 3 cell 4... r0 r31 r1 program counter register CPU minne

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

8 8 Rubriker ● Bussöverföring – läsning och skrivning ● Adressering – memory-mapped, I/O- mapped ● Parallellport – uppbyggnad och funktion ● Handskakning ● Serieport – funktion, paritetskontroll ● Eko-program, kommunikationsprogram ● Timer

9 9 Bussöverföring MASTER SLAVE BUS

10 10 Exempel: memory read ● Master – till exempel processorn (CPU) ● Slave – till exempel minnet (MEM) ● Master levererar adress (Address) ● Master ger läsbegäran (Read Request) ● Slave levererar data ● Slave levererar kvittens (Acknowledge)

11 11 Exempel: memory read Adress (flera ledningar) Data (flera ledningar) Read Request Acknowledge

12 12 Exempel: memory write ● Master – till exempel processorn (CPU) ● Slave – till exempel minnet (MEM) ● Master levererar adress (Address) och Data ● Master ger skrivbegäran (Write Request) ● Slave levererar kvittens (Acknowledge)

13 13 Exempel: memory write Adress (flera ledningar) Data (flera ledningar) Write Request Acknowledge

14 14 Asynkron buss ”any time” Adress (flera ledningar) Data (flera ledningar) Read Request Acknowledge

15 15 Synkron buss Adress (flera ledningar) Data (flera ledningar) Read Request Acknowledge address memrd data Clock

16 16 Asynkron eller synkron buss? ● Asynkron  klarar enheter med olika hastighet  bra för blandade och långsamma (äldre) system ● Synkron  kan ge högre hastighet  kan överföra adress och data separat, tiden mellan kan utnyttjas till annat  bra för snabba, likadana enheter

17 17 Flera slave-enheter inkopplade på olika adresser MASTER SLAVE ?? Adress-avkodare

18 18 Flera slave-enheter inkopplade på olika adresser MASTER MEM ?? Adress-avkodare

19 19 Flera slave-enheter inkopplade på olika adresser MASTER SLAVEMEM ?? Adress-avkodare

20 20 Flera Master går bra – Arbiter väljer mellan dem Master MEM I/O Adress dittenAdress datten ?? Adress-avkodare Master Arbiter

21 21 Bussledningar ● Adressledningar: 8–64 stycken  för att kunna peka ut varje byte ● Dataledningar: 8–128 bitar ● Kontrolledningar för styrning  Read, Write (eller RD/WR och Strobe)  Acknowledge (eller motsatsen, Hold)  Bus Request, Bus Grant – för Arbiter  IRQ – Interrupt ReQuest ● Övrigt: Vcc, GND, Clock, Reset,...

22 22 Bussledningar (forts.) ● Långsam Slave behöver extra tid vid läsning/skrivning ● Långsam Slave fördröjer ACK (eller aktiverar HOLD) ● Tidsövervakning, Time-Out, om Acknowledge aldrig kommer ● Bus Error – ingen ACK kom innan Time-Out

23 23 Bussledningar (forts.) ● Varje Slave måste ha adressavkodare med olika adresser så att bara en enhet svarar på varje request ● Läsning/skrivning av oanvänd adress medför Time-Out (och Bus Error) eftersom ingen enhet aktiverar Acknowledge

24 24 Bus Error: extra signal på bussen MASTER SLAVE BUS Time-Out Bus Error

25 25 Rubriker ● Bussöverföring – läsning och skrivning ● Adressering – memory-mapped, I/O-mapped ● Parallellport – uppbyggnad och funktion ● Handskakning ● Serieport – funktion, paritetskontroll ● Eko-program, kommunikationsprogram ● Timer

26 26 Inkoppling av in- och utenheter ● Antingen memory-mapped...  in- och utenheter kopplas in på samma sätt som minne  LOAD och STORE för läsning och skrivning ●...eller I/O-mapped  in- och utenheter kopplas in med speciella, extra bussledningar  Nya instruktioner IN och OUT för läsning och skrivning

27 27 Inkoppling av in- och utenheter ● Memory-mapped ● Minne och I/O måste ha olika adresser ● Minne och I/O har samma kontrollsignaler ● Load, Store för I/O ● I/O-mapped ● Minne och I/O kan ha samma adresser ● Minne och I/O har olika kontrollsignaler ● Speciella in- och ut- instruktioner:  IN R1,117  OUT R2,118

28 28 Rubriker ● Bussöverföring – läsning och skrivning ● Adressering – memory-mapped, I/O- mapped ● Parallellport – uppbyggnad och funktion ● Handskakning ● Serieport – funktion, paritetskontroll ● Eko-program, kommunikationsprogram ● Timer

29 29 Parallellport ● Brukar ha 8, 16, eller 32 bitar (anslutningar) ● Signalriktning: in eller ut kan vara inställbar för varje bit ● Inport består normalt av grindar ● Utport består normalt av register ● Handskakningssignaler kan finnas

30 30 Parallell IN-port & RD IN-PORT IN-DATA RD Adress Data Kontroll CPU-BUSS IN 0 IN n DnDn D0D0 IN 1 D1D1 grindar &&

31 31 IN-port ● Läsning öppnar grindarna ● Det värde som finns på inporten just då hämtas in till programmet  som resultat av LOAD- eller IN-instruktion ● Lämpligt för tryckknappar (till exempel)

32 32 IN-porten kopplad till annan dator ● IN-porten på min dator kan kopplas till UT-porten på en annan dator ● Filöverföring?

33 33 Exempel ● Texten "SOPPA" ska överföras ● Mottagaren ser värdet extra länge ● Mottagaren kan inte veta om det är ett eller två "P" ● Resultat: "SOPA" S O P P A

34 34 IN-port med handskakning ● Extra signaler, förutom data ● Till datorn: skrivsignal för inporten (WRITE) ● Från datorn: "Har ännu inte läst indata" = Input Buffer Full, IBF

35 35 IN-port med handskakning RD IN-PORT IBFWRIN-DATA RD IBF Adress Data Control CPU-BUSS IN 0 IN n DnDn D0D0 IN 1 D1D1 Q Q’ set clear IBF WR RD vippa grindar &&&......

36 36 Handskakning ● IBF = Input Buffer Full ● Puls på WR ettställer IBF-vippan ● Utanför datorn finns något (någon?) som ger en puls på WR när det finns nya data ● När datorn läser inporten nollställs IBF-vippan av läs-signalen RD

37 37 Parallell UT-port UT-PORT UT-DATA WR Adress Data Control CPU-BUSS Q Q’ D clk Q Q’ D Q D clk DnDn D0D0 D1D1 UT 0 UT n UT 1 WR Q Q’ set clear OBE RD WR register (vippor) clk

38 38 UT-port ● UT-porten innehåller vippor (till exempel 8, 16, 32 stycken) som tillsammans blir ett UT-register ● Datorn skriver till UT-registret ● Utanför datorn kan senaste värdet avläsas ● Lämpligt för lysdioder, motorer (till exempel)

39 39 UT-port med handskakning ● Extra signaler ● Till datorn: lässignal för utdata, READ ● Från datorn: "Finns ännu inga nya utdata" = Output Buffer Empty, OBE

40 40 UT-port med handskakning UT-PORT OBERDUT-DATA WR OBE Adress Data Control CPU-BUSS Q Q’ D clk Q Q’ D Q D clk DnDn D0D0 D1D1 UT 0 UT n UT 1 WR Q Q’ set clear OBE RD WR register (vippor) vippa clk

41 41 Parallellport Handskakningssignaler ● IBF = Input Buffer Full ● OBF = Output Buffer Empty ● IBF och OBE är tillgängliga för program ● IBF och OBE är tillgängliga för hårdvaran

42 42 Handskakningssignaler (forts.) ● IBF = Input Buffer Full ● Aktiv signal IBF (full inport)  begäran om åtgärd, från omvärlden till program  "Hallå där, nu finns nya indata" ● Samma signal IBF (full inport)  varning till omvärlden, från datorn  "Stopp, datorn har ännu inte läst senaste indata"

43 43 Handskakningssignaler (forts.) ● OBE = Output Buffer Empty ● Aktiv signal OBE (tom utport)  begäran om åtgärd, från omvärlden till program  "Hallå där, leverera nya utdata" ● Samma signal OBE (tom utport)  varning till omvärlden, från datorn  "Stopp, datorn har ännu inte levererat nya utdata"

44 44 Handskakningssignaler: IBF ● IBF – Input Buffer Full ● IBF ettställs normalt av hårdvaran när omgivningen levererar nya data till inporten ● IBF nollställs (kvitteras) av program ● Två konstruktionstyper: nollställning kan ske  vid läsning av inport (implicit bieffekt), eller  med egen instruktion (explicit)

45 45 Handskakningssignaler: OBE ● OBE – Output Buffer Empty ● OBF ettställs normalt av hårdvaran när omgivningen har tagit hand om utdata ● OBE nollställs (kvitteras) av program ● Två konstruktionstyper: nollställning kan ske  vid skrivning av utport (implicit bieffekt), eller  med egen instruktion (explicit)

46 46 0x840 0x844 0x848 0x84C SW7 SW6 SW5 SW4 SW5 SW4 SW6SW GLOBAL RESET Delar av Nios2-kortet Nios2 button_pio Memory-mapped

47 47 0x850 0x854 0x858 0x85C SW5 SW4 SW6SW GLOBAL RESET Delar av Nios2-kortet Nios2 dip_pio Memory-mapped

48 48 0x810 0x814 0x818 0x81C D3 D4 D5 D6 SW5 SW4 SW6SW GLOBAL RESET Delar av Nios2-kortet D6 D5 D4 D3 Nios2 led_pio Memory-mapped

49 49 Minnesliknande beteende ● Så här ska minne fungera: ● Ett värde som skrivs till en viss adress kan sedan läsas från samma adress ● Skrivning till en adress påverkar inte innehållet på andra adresser ● Läsning från en adress påverkar inte innehållet på någon adress

50 50 Icke minnesliknande beteende ● Så här kan in- och utenheter fungera: ● Ett värde som skrivs till en viss adress går inte att få tillbaka vid läsning från samma adress ● Skrivning till en adress kan påverka innehållet på flera andra adresser ● Läsning från en adress kan påverka innehållet på en eller flera adresser

51 51 Program för handskakning Invänta READY (blockerande I/O) PÅHOPP AVHOPP 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 !

52 52 Program för handskakning Direkt retur (icke-blockerande I/O) PÅHOPP AVHOPP IBF==1? Nollställ IBF RETVAL= DATAIN LÄS IBF JA NEJ RETVAL=–1 PÅHOPP AVHOPP OBE==1? Nollställ OBE SKRIV DATAUT Nollställ RETVAL LÄS OBE JA NEJ RETVAL= –1

53 31 januari 20072G1518, föreäsning 5, vht2006 (D2)53 getdata från Inport rutin med pollning av statusbit (blockerande I/O) #int in_data(reg) definedatain 0x... definestatus 0x... defineibfmask 0x... in_data:loadreg1 <-- status andireg1 <-- ibfmask beqin_data loadreg <-- datain return

54 31 januari 20072G1518, föreäsning 5, vht2006 (D2)54 #put_data(data) definedataut 0x... definestatus 0x... defineobemask 0x... put_data:loadreg1 <-- status andireg1 <-- obemask beqput_data storedataut <-- data return putdata till Utport rutin med pollning av statusbit (blockerande I/O)

55 55 Rubriker ● Bussöverföring – läsning och skrivning ● Adressering – memory-mapped, I/O- mapped ● Parallellport – uppbyggnad och funktion ● Handskakning ● Serieport – funktion, paritetskontroll ● Eko-program, kommunikationsprogram ● Timer

56 56 Serieport ● Bit för bit i stället för flera bitar samtidigt ● Asynkron kommunikation vanligt  en byte kan komma när som helst  överföringslinjen är i vila mellan två data-bytes ● Synkron kommunikation – mera speciellt  det kommer alltid en ström av bitar  utfyllnadskoder sänds mellan två data-bytes

57 57 Seriell kommunikation skiftregister parallella data in parallella data ut skiftregister seriell kabel Sändare Mottagare

58 58 Synkron seriell kommunikation ● Klocksignalen överförs på en extrasladd ● Synkroniseringskoder skickas då och då så att skiftregistren börjar på samma bit seriell kabel clock klocksignal

59 59 Asynkron seriell kommunikation ● Varje byte (tecken, bokstav) sänds för sig ● Ett tecken kodas ofta med ISO men på labbarna använder vi 7-bits ASCII ● Dessutom tillkommer  1 startbit (alltid 0:a)  1 paritetsbit (tillval) – udda eller jämn paritet  1, 1½ eller 2 stoppbitar (alltid 1:or)

60 60 Asyknron seriell kommunikation 0x x xxxxxP1 1 7-bitars ASCII en startbit (0) en Paritetsbit (P) Stoppbit(ar) (1:or) Synkroniseringsflank – övergång från 1:a till 0:a Avkänningstidpunkter

61 61 Serieport med asynkron kommunikation ● Bithastighet – antal bitar per sekund  kallas felaktigt för baud-rate ● Teckenlängd – behöver inte vara 1 byte  kan vara 5, 6, 7 eller 8 bitar ● Paritetsbit (räknas inte in i teckenlängden)  av/på, jämn eller udda – enkel felkontroll ● Antal stoppbitar – minst en  flera stoppbitar ger längre vila mellan två bytes

62 62 Paritetskontroll ● Jämn paritet = jämnt antal ettor i ordet/byten ● Udda paritet = udda antal ettor i ordet/byten ● Feldetektering  upptäcker om 1 bit ändrat värde ● Sändaren kompletterar data med extra bit, värdet sätts så att pariteten blir rätt ● Mottagaren kontrollerar att pariteten är rätt

63 31 januari 20072G1518, föreäsning 5, vht2006 (D2)63 in_char från serieport rutin med pollning av statusbit #int in_char(void) definedata... definestatus... defineibfmask... in_char:loadtmpreg <-- status anditmpreg <-- ibfmask beqin_char loadoutreg <-- data return

64 31 januari 20072G1518, föreäsning 5, vht2006 (D2)64 putchar till serieport rutin med pollning av statusbit #out_char(data in inreg) definedataout... definestatus... defineobemask... out_char:loadtmpreg <-- status anditmpreg <-- obemask beqout_char storedataout <-- inreg return

65 65 Nios2 uart_0 Memory-mapped 0x860 0x864 0x868 uart_00x860-86F uart_1 0x880-88F uart_0 STATUS RxRdy (IBF) TxRdy (OBE) RxDATA (RD) TxDATA (WR)

66 31 januari 20072G1518, föreäsning 5, vht2006 (D2)66 getchar från Serieport syntetisk Nios-2-kod (blocking) #int returvärde = in_char(void).equdatain, 0x860# 0x880.equdataut, 0x864# 0x884.equstatus, 0x868# 0x888.equibfmask, 0x80# 0x80 = 0b in_char: MOVIAr8, datain LDWr9, 8(r8)# status=datain+8 ANDIr9, r9, ibfmask BEQ r9, r0, in_char LDWr2, 0(r8) RET

67 31 januari 20072G1518, föreäsning 5, vht2006 (D2)67 #void out_char(parameter).equdatain, 0x860# 0x880.equdataut, 0x864# 0x884.equstatus, 0x868# 0x888.equobemask, 0x40# 0x40=0b out_char: MOVIAr8, datain LDWr9, 8(r8)#status=datain+8 ANDIr9, r9, obemask BEQ r9, r0, out_char STWr4, 4(r8)# dataut=datain+4 RET out_char från Serieport syntetisk Nios-2-kod (blocking)

68 68 Rubriker ● Bussöverföring – läsning och skrivning ● Adressering – memory-mapped, I/O- mapped ● Parallellport – uppbyggnad och funktion ● Handskakning ● Serieport – funktion, paritetskontroll ● Eko-program, kommunikationsprogram ● Timer

69 69 Laboration 2: eko-program ● Skriv ett program som ekar tillbaka bytes från tangentbordet till hyperterminalfönstret ● main:callinitserie# vid behov ● loop:callin_char# läs en byte movr4,r2# kopiera callout_char# sänd tillbaka ● br loop# loopa

70 70 Flödesschema för eko-program START in_charout_char initserie

71 71 Flödesschema för korsvis kommunikation START in_charx? send_char NEJ JA rec_charx? out_char 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

72 72 Program för korsvis kommunikation ● start:callinitserie# initera serieportar vid behov ● gettst:callin_charx# tecken från tangentbord ? bltr2, r0, rectst# om inte: hopp till rectst ● send:movr4, r2 ● callsend_char# sänd ett tecken ● rectst:callrec_charx# tecken mottaget ? bltr2, r0, gettst# om inte: hopp till gettst ● put:movr4, r2 ● call out_char# och skriv ut mottaget tecken ● brgettst# loopa

73 73 Korsvis kommunikation med paritetskontroll START get_charx? 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 send_char errmake rec_charx? partest NEJ JA put_char

74 74 Korsvis kommunikation med paritetskontroll ● start:callinitserie# initera serieportar vid behov ● gettst:callget_charx# 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 ● callsend_char# sänd sedan ett tecken ● rectst:callrec_charx# tecken mottaget från kommunikationslänk? bltr2, r0, gettst# om inte: hopp till gettst ● movr4, r2# annars: kontrollera checksumma callpartst movr4, r2 ● call put_char# skriv slutligen ett tecken till skärmen ● brgettst# och loopa

75 75 Rubriker ● Bussöverföring – läsning och skrivning ● Adressering – memory-mapped, I/O- mapped ● Parallellport – uppbyggnad och funktion ● Handskakning ● Serieport – funktion, paritetskontroll ● Eko-program, kommunikationsprogram ● Timer

76 76 Timer ● Används för exaktare tidmätning ● Har en räknare (counter), stegar 1 steg varje klockcykel  kan stega från 0 upp till inställt värde  eller stega från inställt värde ner till 0 ● När räknaren har tickat klart: Time-Out  precis som en äggklocka

77 77 Timer: Time-Out ● Vid Time-Out ettställs en vippa ● Värdet i vippan är tillgängligt för program ● Värdet i vippan är tillgängligt elektriskt ● Innan nästa tidmätning ska vippan återställas  HUR?

78 78 Flödesschema för subrutin som väntar på Time-Out entry return TimeOut==1? Read TimeOut YES NO Clear TimeOut Wait for READY Action & Acknowledge !

79 79 Flödesschema DELAY med program-loop N = start N = N - 1 N == 0 ? IN-hopp UT-hopp JA NEJ K = msekK = K - 1K == 0 ? IN-hopp UT-hopp JA NEJ Byt ut program-loop mot timer-loop Program-loop 1 millisekund Laboration 1 IN-parameter i r4

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

81 81 Timer – räknare som räknar ned ● Räknaren laddas med önskad periodtid  tiden väljs med program ● Räknarinnehållet minskas med 1 varje klockcykel ● När räknaren kommit ner till noll så ettställs Time-Out ● Räknaren kan laddas om av hårdvaran (med samma värde igen) vid Time-Out

82 82 Timer – statusvippa Time-Out ● Time-Out kan läsas med program ● Time-Out finns också tillgänglig som elektrisk signal ● ettställs vid Time-Out ● ska nollställas av program

83 83 Timer – statusvippa Run ● Run ettställs av program  annars startar inte timern ● Kan nollställas av program

84 84 Timer – skiss på hårdvaran counter clock period copy write (by program) run start time-out Q Q’ D cl set clear stop zero snap-shot read (by program) copy load Q Q’ D cl from program read from program

85 85 Nios2 Timer Memory-mapped 0x820 0x824 0x828 0x82C 0x830 0x834 0x838 0x83C

86 86 Timerns register är halvbreda ● Alla Timer-register kan läsas och skrivas med LDW (Load Word, 32 bitar) ● Bara de 16 bitarna till höger används

87 87 Nios2 Timer 0x820 status 0x824 control 0x828 periodl 0x82C periodh 0x830 snapl 0x834 snaph run TO Time-Out ITO cont start stop 15 0

88 88 Nios2 Timer ● Time-Out = TO, bit 0 på adress 0x820 ● Run = bit 1 på adress 0x820 ● Återställning av Time-Out: skriv valfritt värde till 0x820  värdet ignoreras, men bussöverföringen (skrivning till 0x820) gör att Timern återställer Time-Out ● Start = kör igång, ettställ bit 2 på adress 0x824 ● Stop = stoppa, ettställ bit 3 på adress 0x824

89 89 Minneskarta Nios2 Alla adresser är hexadecimala ● 0 - 7FFboot_monitor_rom ● Fled_pio ● Ftimer_0 ● Fbutton_pio ● Fdip-pio ● Fuart_0 (”hyperterminal) ● Fuart_1 (”annat labkort”) ● FFFFsram, 256 kByte


Ladda ner ppt "1 2G1518 Datorteknik Föreläsning 5, våren 2007 Bussar In- och utmatning – I/O Pollning Handskakning."

Liknande presentationer


Google-annonser