Den närmaste framtiden

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.