Transcript PFC 7
Introducció als sistemes
digitals reconfigurables amb la
targeta DE2 d’Altera
Autor: Roser Ortiz Ramos
Director: Francesc Josep Sànchez i Robert
Índex
Introducció
Programació i eines
Aplicacions sobre la FPGA
Rellotge Digital
Aplicacions sobre NIOS II
Rellotge digital
Comparativa
2
Introducció
Altera
+
FPGA
DE2
‘Development
and education
Board’
3
Programació i
eines (I)
Programació de la FPGA:
Web Edition o Licence Edition?
Última versió v9.0
Llicència 1800 €
Linux, només acceptat per
llicència
IP Altera: OpenCore
4
Programació i
eines (II)
Llenguatges de programació:
Verilog
VHDL
Quin
escollim?
VHDL
Llibreries
Declaració
I/O
Programa
principal
5
Programació i
eines (III)
Creació del µcontrolador :
Hardware
Programa visual
Creació automàtica de fitxers:
VHDL o Verilog
Arxiu .ptf
6
Programació i
eines (VI)
Programació del µcontrolador:
Software
Càrrega de l’arxiu .ptf
Programació en C o Assemblador
Compilació i càrrega a la placa del programa
principal
Possibilitat de Debugg
7
Aplicacions sobre
la FPGA (I)
Aplicació senzilla:
Assignació entrada sortida
Creació d’un nou projecte
Simulació:
LEDR
sw0
sw1
sw2
Funcional : Ideal
Timming : Incorporem retards
Assignació de Pins:
sw17
GND
Manual
Arxiu: DE2_pinassignments.csv
8
Aplicacions sobre
la FPGA (II)
Simulació: Arxiu de formes d’ona
Funcional
Timming
9
Aplicacions sobre
la FPGA (III)
Assignació de PINS
Manual: DE2 Reference Manual +
assigmant editor
Arxiu:
DE2_pinassignments.csv
10
Aplicacions sobre
la FPGA (IV)
Càrrega del Programa a la
FPGA: USB_Blaster
11
Aplicacions sobre
la FPGA (V)
Projectes que podem realitzar:
MUX
5-1:
PROCESS (S)
BEGIN
CASE S IS
WHEN
WHEN
WHEN
WHEN
WHEN
END CASE;
END PROCESS
"000"
"001"
"010"
"011"
OTHERS
=>
=>
=>
=>
=>
M<=U;
M<=V;
M<=W;
M<=X;
M<=Y;
12
Aplicacions sobre
la FPGA (VI)
Descodificador 7 Segments: sentencies booleanes
(if, else)
Traducció bit a bit
13
Aplicacions sobre
la FPGA (V)
Dos projectes en un: PORT MAP
Incorporar els .vhd al nou projecte
Crear una nova entity
Declarar senyals
Fer assignació de ports per component
14
Rellotge Digital (I)
CLOCK_50
clk1
CE
SM
FSM
GO
GOM
GOH
CE
Rellotge_digital
SM
SH
U_S
D_S
D_H
SH
U_M
CE
SM
SH
CLOCK
CLOCK
D_M
clk2
U_H
Divfreq
Descodificador
7 segments
(del H0 al H5)
HEX0
HEX2
HEX4
HEX1
HEX3
HEX5
Entrades:
Clock_50 (f = 50MHz)
CE: Posa en marxa el rellotge
Sortides:
HEX0 al HEX5: 6
Displays 7-Segments
SM: Puja minuts
SH: Puja hores
15
Rellotge Digital
(II)
Comptador: del ‘0’ al ‘9’
PRESENT_STATE
4
U
TC2
Comp. 3 bits
SW0
TC
U
Reset
CL
CLK
PRESENT_STATE
TC1
TC
FUTURE_STATE
FUTURE_STATE
FSM:
Finite State Machine
RESET
STATE_REGISTER
CE
CLK
PRESENT_STATE
16
Rellotge digital
(III)
Comptador d’hores, minuts i segons
TC_D
RESET
CLOCK
TC_S
TC_D
TC_D
D
D
CE
TC_H
D
CE
U
CE
TC_M
CE
U
CE_H
CE_M
U
D_S
D_M
D_H
U_S
U_M
U_H
Divisor de freqüència: de 50MHz a 1 Hz
divisor_freq2
divisor_freq
clk
clkout1
clkout2
17
Rellotge Digital
(IV)
Descodificador 7 Segments: ‘1’= segment off,‘0’= segment on
18
Rellotge Digital
(V)
Posem hora
SH
SM
TC_D
RESET
CLOCK
TC_S
TC_D
CE
TC_D
D
D
CE
TC_M
CE
U
CE_M
GO_M
TC_H
D
CE
U
U
CE_H
GO_H
D_S
D_M
D_H
U_S
U_M
U_H
CE=SH=SM=’0'
CE=SH=SM=’0'
CE=’0',
SH=’1',SM= X
SH=’1';
CE=SM=0
FSM, si CE està on no
podem canviar l’hora
CE=’1',
SH=X, SM=X
Espera
(000)
CE=SH=SM=’0'
CE=’0',
SH=’1',SM= X
Puja_hora
(010)
Rellotge
(100)
CE=’1'
CE=’1'
CE=’0',
SH=’0',SM= ‘1’
CE=’0',
SH=’1',SM= X
CE=’1',
SH=X, SM=X
Puja_min
(001)
CE=’0'
SH=’0', SM=’1'
CE=’0'
SH=’0', SM=’1'
19
Aplicacions
sobre NIOS II (I)
LEDG
sw0
sw1
Creació del Hardware: SOPC
Builder
Creació d’arxius .vhd i .ptf
sw2
sw7
GND
20
Aplicacions sobre
NIOS II (II)
Programació en C:
Interrupcions:
Bits d’activació:
generals i particulars
de cada dispositiu
Dispositius que les
generen: 32 possibles
interrupcions
void interrupt_handler (void);
21
Aplicacions sobre
NIOS II (III)
Interrupcions del Timer
Timer programable
void
timer_isr(void)
Interrupcions dels botons
void
pushbutton_isr(void)
22
Aplicacions sobre
NIOS II (IV)
Programa principal: void main ();
int main(void)
{
volatile int * switches = (int *) SWITCHES_BASE_ADDRESS;
volatile int * pushbuttons= (int *)
PUSHBUTTONS_BASE_ADDRESS;
int * red_leds = (int *) LEDR_BASE_ADDRESS;
*(pushbuttons+2)=0x8; //Enable KEY3 to enable interrupts
__builtin_wrctl(3, 2);//Write 2 into ienable register
__builtin_wrctl(0, 1);//Write 1 into status register
while(1);
return 0;
}
23
Aplicacions sobre
NIOS II (V)
Càrrega de l’arxiu .c a la placa:
Altera Monitor program
24
Rellotge Digital
(I)
Hardware: Basic
Computer d’Altera
Timer: 125 ms
Adreces de
memòria
Interrupcions
25
Rellotge Digital
(II)
Software: Funcions del nostre Rellotge:
Estat del
SW0
Activació
interrupcions
Salta
interrupció
Crida a la
funció que
toca
Interrupcions
Timer
Botons
Rellotge: Comptatge de segons amb el Timer
Visualització: Descodificador 7-segments
Posem en hora: Activació de interrupcions al void main() 26
Rellotge Digital
(III)
Funcions relacionades amb les interrupcions:
void interrupt_handler(void): Verifica qui
ha generat la interrupció i crida a la funció que
correspongui executar.
void timer_isr(void): Crida a la funció
suma_segons en el cas que ho necessiti.
void pushbutton_isr(void): Decideix quin
botó ha provocat la interrupció.
27
Rellotge Digital
(IV)
Funcions relacionades amb el funcionament del rellotge
void suma_segons(void): ens genera els valors
d’hores, minuts i segons.
char torna_unitats(int valor): Torna el valor
d’unitat del int passat per després descodificar-ho.
char torna_decenes(int valor): Torna el valor
de la desena del int passat.
char descodifica_bcd_7segments (int
index): Torna el valor en 7 segments del int passat.
void dona_7segments(void): Codifica a 7
Segments tot el rellotge.
28
Rellotge Digital
(V)
Possem hora:
void suma_hora(void): Augmenta el valor de les
hores quan es genera la interrupció adequada.
void suma_minut(void): Augmenta el valor dels
minuts.
Programa principal:
Verifica si el SW0 està on.
Si està on activa el Timer i les seves
interrupcions.
Si no, les desactiva i activa les dels botons.
29
Rellotge Digital
(VI)
Càrrega a la DE2
isr_linkage.c
Fitxer amb el programa principal
30
Comparativa
VHDL
NIOS II, C
Podem escollir: Verilog o
VHDL
Només necessitem un
programa funcionant
Tenim que saber I/O per
dispositiu
Creem i programem els
dispositius: fitxers .vhd
Podem escollir: C o
Assemblador
Necessitem dos
programes instal·lats
Tenim que saber els
dispositius a utilitzar
Només programem els
dispositius: funcions en C
Divisor de freqüències
Descodificador:
sentencies booleanes
encadenades
El Timer ens dona la
freqüència que volem
Descodificador: vector de
caràcters
31
Preguntes?
32