Vad kan man göra med Nexys3 och en del om bussar och I/O och cachelabben • • • • - grupper har bildats Grupper ska vara klara på fredag 1600 Då får ni handledare Var snäll mot honom • 2 tim/vecka • Boka tid Den närmaste framtiden Grupp bildad Kravspec klar Ni får handledare Lämna in Hur ska ni bygga den? Designskiss klar Klar 9 8 7 Designskiss börjar Vad ska ni bygga? 10 11 13 14 tid Fö: VHDL1 VHDL2 VHDL3 reserv Proj i schemat : • Arbeta med projektet på egen hand • Besöka handledaren (boka tid) Antag att: Vi har bestämt oss för Game of Life • Kravspecifikationen handlar om 1) och 3) • Designskissen handlar om 2) 3) 2) CPU mem GoL Regler Bildminne VGA UART 1) start VGA USB-sladd (COMx) Ska innehålla: • Dator (egen design) • I/O (UART, joystick, …) • VGA Måste bli • en demonstration 3 Kravspecifikation Designskiss Designskiss Prog + spänningsmatning mha USB Nexys3 ! Expansionskort Basic I/O VGA port I manualen finns siffror för 640*480-bild och 25MHz pixelklocka Komplexitet: • Två räknare + lite avkodning • … • Avancerad grafikmotor D/A-omvandlare VGA Controller Anslut till VGA-kontakt RGB … HSYNC … VSYNC Parallella och seriella bussar Buss = gemensamma ledningar för kommunikation mellan enheter. Endast en överföring åt gången. Enhet 1 Enhet 4 Master/Slave = Master kan starta en överföring Enhet 2 Enhet 5 Enhet 3 Sändare/Mottagare = som det låter Arbitrering = skiljedom, behövs för flera masters On chip -> multiplexer Off chip -> tristate Dum <-> Smart Exempel på enheter: Seriell <-> parallell CPU 1 bit flera bitar Minne I/O – parallellport, UART, … I/O med DMA Några varianter M0 S0 M1 Multimaster-buss, dubbelriktad databuss, tristate, endast ett ”samtal” åt gången (Jfr OR-datorn, mprog styr trafiken på bussen) S1 M2 Korskoppling, crossbar enkelriktade databussar Traffic cop arbiter M1 Punkt till punkt M/S M/S S4 M2 S5 M3 arbiter Enkel, parallell, synkron buss OR-datorn + SRAM tCK Clk Ladda ADR A adr read read ladda D M(A) Vi har sett till att tacc < tCK tacc Ladda DR Med flera minnen: DR M(A) max(tacc ) < tCK Medium, parallell, asynkron buss handskakningssignaler används: stb/ack Busscykler kan ta olika tid Exempel: 68000, alla datorer AS*,DS* 68k DTACK* M Handskakning UART universal asynchronuous receiver/transmitter enkel, seriell, punkt till punkt tx rx CPU2 CPU1 rx tx UART CTRL UART CTRL clk1 gnd • Seriell • Punkt till punkt • Problem 1: UART1 och UART2 har inte samma klocka => synkronisering nödvändig • Problem 2: hur vet CPU2 att ett tecken kommit in? hur vet CPU1 att ett tecken har sänts? => handskakning nödvändig clk2 UART 1 0 start 0 0 0 0 Vår klocka = 100 MHz 1 0 stopp Synkronisering: UART <-> UART bithastighet: 115200 bit/s => 1 bit 8,68 ms 1 bit = 868 CK, 1 tecken = 8680 CK båda sidor har en räknare, som räknare 16 ggr / bit S : skifta ut var på var 16:e räknepuls M: vänta på startbit, starta räknare, skifta in mitt i bitarna Handskakning: UART <-> CPU flaggor (=bitar i kontrollregister) rxfull = tecken har kommit in! 1: när tecknet kommit in 0: när CPU:n läst tecknet txempty = tecken har sänts! 1: när tecknet sänts 0: när CPU:n skrivit tecken 2 sätt att koppla in I/O-kretsar mem_cs IO_cs A OR Avk. ADR read write DR D Memory-mapped I/O • På den yttre databussen • I/O-registren som minnesceller • Vanliga instruktioner (LDA,STA) • Adressavkodning måste fixas mm I/O-mapped I/O • Direkt på interna databussen • I/O-registren som interna register • Speciella instruktioner, • Som kan vänta på att någonting hänt (fördelen med mikroprog. dator) I2C = Inter-integrated-circuit • • • • • • • Seriell buss Philips Konsumentelektronik Kommunikation på kretskort, typ: setup 2 trådar, ganska låg hastighet, billigt finns i PC: läs av CPU temp, fläktvarvtal, minnestyp, … Upp till 127 enheter +V 10 kohm Serial data = SDA Serial clock = SCL Master/ slave Master … Slave I2C – Inter-integrated-circuit master slave slave address I2C CTRL I2C CTRL data register slave address 17 data register slave I2C CTRL slave address 42 data register + 10 kohm SDA SCL SPI fmax = 8/4 MHz SPI fmax = 8/4 MHz Pmod Några Pmods OLED • • • • Monokrom Text / grafik 128*32 Controller SPI JSTK • Two axis joystick • Controller • SPI Några Pmods I2S PS/2 • Bara kontakten • Mus/tangentbord • Stereohögtalare • I2S (seriellt) En Vmod • LCD 480*272 • Resistive touchscreen • Gränsnitt: se datablad! Ethernet PHY ? 100 Mbit/s seriellt txd Ethernet MAC txclk rxd 4 txclk Media Access Control rx = ”bygg ett paket av nibbles” 4 Ethernet PHY Görs på Zedboard, som baseras på kretsen Zynq-7000 och minneschip. Zynq-7000 innehåller • 2 ARM processorer • 1 FPGA 3.Cachelabben A programmable System on a Chip mem Blockschema Minne FPGA Processor Bildskärm Roterad bild 512 kB N-vägs VGA ARM ARM DMA Oroterad bild 2048x2048x2 IC DC IC DC AXI bus L2 Roterad bild 2048x2048x2 Chip scope Bildskärm Tidsdiagram Övrigt • DMA: kopierar roterad bild från minnet till VGA • VGA: Roterad bild visas på en skärm • Chipscope: en logikanalysator i FPGA-n. Spelar in signaler på bussen och visar i ett fönster AXI – Advanced eXtensible Interface avancerad parallell bus • Avancerad buss för ARM-processorer • Pipelinead ”går att skicka en adress innan föregående läsning är klar” • Stöd för läs/skriv-burstar. ”en adress – många data” • Uppdelad i 5 kanaler • Läsadresser (Read Address Channel) • Läsdata och läsbekräftelse (Read Data Channel) • Skrivadresser (Write Address Channel) • Skrivdata (Write Data Channel) • Skrivbekräftelse (Write Response Channel) Master Slave Read Address Channel (ARADDR, ARVALID, ARREADY,…) Read Data Channel (RDATA, RVALID,RREADY,…) Write Address Channel (AWADDR, AWVALID,AWREADY,…) Write Data Channel (WDATA, WVALID, WREADY, …) Write Response Channel (B…) ARADDR[31:0]: Adress vi vill läsa ifrån ARVALID: Master vill börja en lästransaktion ARREADY: Slave är redo för en lästransaktion ARLEN/ARSIZE: Antal ord/storlek ARBURST: Typ av burst-läsning ARID: Master skickar id-nummer Plus några till RDATA[31:0]: Läsdata RVALID: Slave har giltig läsdata RREADY: Master är redo att ta emot denna RRESP: Status (lyckades transaktionen?) RID: Slave returnerar identifikationsnummer RLAST: Markerar sista ordet i transaktionen AWADDR[31:0]: Adress vi vill läsa ifrån AWVALID: Master vill börja en skrivtransaktion AWREADY: Slave är redo för en skrivtransaktion AWLEN/AWSIZE: Antal ord/storlek AWBURST: Typ av burst-läsning AWID: Master skickar id-nummer Plus några till WDATA[31:0]: Skrivdata WREADY: Slave kan ta emot data WVALID: Master har skrivdata WLAST: Markerar sista ordet i transaktionen WID: idnummer Plus några till Labben Labben i korthet: 1. Bestäm associativiteten hos L2-$ genom att ladda ner och köra ett program for(j = 0 ; j < 2; j++) for(i = 0 ; i < nr; i++) c = read_mem32(0x82000000 + i * step); 2. Studera instruktionshämtningen 3. Det visar sig att rotation av en bild går långsamt i vissa vinklar! Kan du med dina kunskaper om L2-$ ändra i programmet så att det går fortare? Förklara vad som egentligen händer! Förberedelseuppgifter Del1 : 1. F1 2. F2 3. Föreslå värden på step och nr i uppgift1 Del2 : I avsnitt 8.2 finns två förberedelseuppgifter (händer). Uppgiften handlar om att rotera en bild med storleken 2048x2048 pixlar, där en pixel är 2B. Det visar att vid rotationsläget 90 grader tar betydligt längre tid. 1. Förklara varför! 2. Enligt uppgift går det bra att rotera en bild med storleken 2050x2050. Hur kan det komma sig? 3. En annan metod är dela in utbilden i rutor. Föreslå och motivera en rutstorlek. (Rutorna behöver inte vara kvadratiska). N-vägs cache, 512 kB Välja byte i ord tag index 4 tag Välja ord i cacheline v cntr cache line 16B 4 tag tag v cntr v cntr cache line 16B 4 tag tag v cntr v cntr cache line 16B 4 tag tag v cntr v cntr cache line B tag v cntr komp komp K komp komp Något om skrivning i CM CPU CM PM write-thru: vid skrivning uppdateras både CM och PM write-back: vid skrivning uppdateras endast CM. Varje cacheline har en dirty bit, som sätts till 1 vid skrivning. Vid överskrivning av en CL med satt dirty bit, måste PM uppdateras. En sak till: Memory Management Unit Virtual address CPU Physical address MMU MMU needed for 1) Address translation virtual -> physical 2) Memory protection (OS protected from user processes, … ) 3) ”each process runs in its own memory” when a process runs page translations are loaded into the MMU MEM 38 Memory Management * The OS administers a list of page translations for each process. * These are kept in memory, page tables * The translations are automatically loaded into the translation buffer when the process runs. Physical address space 1 2 #include<stdio.h> int main() { int *ptr, i; ptr = (int *) malloc(4*2048*sizeof(int)); for (i=0; i<8192; i++) *ptr++ = i; … Virtual address space 1 2 3 4 3 4 free(ptr_one); return 0; } 39 Bus arbitration Endast en master ska få tillgång til bussen Multi-master bus Master 0 Slave 0 Master 1 Slave 1 Master 2 Arbiter Enkel, parallell, asynkron buss Wishbone: gratisbuss för FPGA, ASIC on-chip bus, dubbla databussar adr (32) adr stb stb M we dat_o we S dat_o(32) dat_i ack dat_i (32) ack Bus request cyc cyc arbiter A0 A1 A2 arb. 2 M0 D0 0 stb & ack & 1 A0 adr 2 M1 S0 D D0 D1 ack & A1 0 D1 stb M2 1 ack & & A2 adr[31:0], dat_o[31:0], stb, cyc, we, … dat_i[31:0], ack, … S1 Arbiter Ett enkelt sekvensnät 2 A Wishbone-cykler med arbitrering state cyc0 ack0 cyc1 ack1 cyc2 ack2 0 0 0 0 1 1 1 2 2 2 2 2 2 DMA=direct memory access Minne IC Pipelinen DC Delar av minnet måste vara non-cacheable FIFO ctrl Arb.
© Copyright 2024