Fondamenti di Elettronica Digitale€¦ · Elettronica Digitale. Design Abstraction Levels n+ n+ S...

Post on 31-Oct-2020

8 views 1 download

Transcript of Fondamenti di Elettronica Digitale€¦ · Elettronica Digitale. Design Abstraction Levels n+ n+ S...

Fondamenti di

Elettronica

Digitale

Design Abstraction Levels

n+n+

S

GD

+

DEVICE

CIRCUIT

GATE

MODULE

SYSTEM

Informazione analogica

La voce umana e la trasmissione

dei segnali di radio e televisione

sono comunicazioni di tipo

ANALOGICO

ovvero le grandezze fisiche sono

funzioni continue del tempo

V(t)

t

Informazione digitale

La trasmissione dei segnali nei computer ed in

generale nei circuiti elettronici avviene in modo

DIGITALE

Il bit (binary unit) è l ’ unità di misura

fondamentale dell'informazione.

Lo stato "zero" e "uno" può essere

realizzato con la presenza o l'assenza di

tensione elettrica in un circuito

Da Analogico a Digitale

V(t)

t

soglia

V(t)

t

soglia

1

0

1

0

V(t)

t

soglia

I segnali elettrici continui

(analogici) vengono

convertiti in segnali digitali.

I segnali elettrici continui

(analogici) vengono

convertiti in segnali digitali.

8

Sensibilità al rumore

V(t)

t

1

0

V(t)

t

soglia

1

0

V(t)

t

V(t)

t

minore sensibilità al rumore minore sensibilità al rumore

La rappresentazione delle informazioni

• Tutte le informazioni sono rappresentate in forma

binaria o digitale utilizzando due soli simboli: 0 ed 1

• Con una cifra binaria si possono quindi

rappresentare soltanto due informazioni: ovvero

presenza o assenza di segnale elettrico

IL BIT

• Unità fisica di informazione che vale 0 oppure 1.

– Il nome proviene da Binary Digit

• Si utilizzano i multipli del bit:– Kilo Kb ~ un migliaio (1024)

– Mega Mb ~ un milione (1024x1024)

– Giga Gb ~ un miliardo (1Mbx1024)

– Tera Tb ~ mille miliardi (1Gbx1024)

Codifica binaria

• Per poter rappresentare un numero maggiore diinformazioni è necessario utilizzare sequenze di bit.

– Utilizzando due bit si possono rappresentare quattro informazioni diverse:

00 01 10 11

Il processo che fa corrispondere ad una informazione una configurazione di bit prende il

nome di codifica dell’informazione.

Sequenze di bit

Numero di bit nella

sequenza

Informazioni

rappresentabili

2 4

3 8

4 16

5 32

6 64

7 128

8 256

I caratteri utilizzati nella

comunicazione scritta

• 52 lettere alfabetiche maiuscole e minuscole

• 10 cifre (0, 1, 2, …, 9)

• Segni di punteggiatura (, . ; : ! ” ? ’ ^ \ …)

• Segni matematici (+, -, , ±, {, [, >, …)

• Caratteri nazionali (à, è, ì, ò, ù, ç, ñ, ö, ...)

• Altri segni grafici (©, , , @, €, …)

• In totale 220 caratteri circa.

Si pone quindi la necessità di codificare in numeri binari almeno 220 caratteri.

La sequenza di bit necessaria a rappresentare 220 simboli deve essere

composta da 8 bit e prende il nome di CODICE.

• 0110000 0

• 0110001 1

• 0110010 2

• 0110011 3

• 1100001 a

• 1100010 b

• 1100011 c

• 1000001 A

• 1000010 B

• 1000011 C

• 1000100 D

• ……

Codice ASCII: American Standard Code

for Information Interchange (7 bit)

High-ASCII estensione ad 8 bit

IL SISTEMA DI NUMERAZIONE BINARIO

1 2 3 6

È un numero composto da quattro cifre (digit)

Sistema decimale

1 2 3 6 =

1 0 0 0 +

2 0 0 +

3 0 +

6

11000 + 2100 + 310 + 61

1 2 3 6

103102

101100

peso delle cifre

La base è 10 perché nel sistema decimale ci sono 10 simboli

Con un numero decimale ad n cifre è possibile rappresentare 10n quantità

diverse (zero incluso)

1 0 1 0

è ancora un numero composto da quattro cifre (binary digit = BIT)

Nel sistema di numerazione binario abbiamo solo

due simboli: 0 , 1

1 0 1 0

2322

2120

1 0 1 0

2322

2120

18 + 04 + 12 + 01 = 10 (in decimale)

Con un numero binario ad n cifre è possibile rappresentare 2n quantità diverse

(zero incluso)

CONVERSIONE DA BINARIO A DECIMALE

CONVERSIONE DA DECIMALE A BINARIO

3 2 5Es.

Si deve procedere per passi successivi

3 2 5 : 2 = 1 6 2 resto 1

1 6 2 : 2 = 8 1 resto 0

CONVERSIONE DA DECIMALE A BINARIO

3 2 5 : 2 = 1 6 2 resto 1

1 6 2 : 2 = 8 1 resto 0

8 1 : 2 = 4 0 resto 1

4 0 : 2 = 2 0 resto 0

2 0 : 2 = 1 0 resto 0

1 0 : 2 = 5 resto 0

5 : 2 = 2 resto 1

2 : 2 = 1 resto 0

1 : 2 = 0 resto 1

1 0 1 0 0 0 1 0 1

Il sistema binario

Conversione da decimale a

binario

• Metodo delle divisioni

successive:

• (121)10 = (1111001)2

• Si considerano i resti della

divisione per 2 dal basso

verso l’alto a gruppo di 4

121 1

60 0

30 0

15 1

7 1

3 1

1 1

0

Il sistema binario

Conversione da binario a decimale

Ogni bit viene moltiplicato per il peso (2 elevato alla

posizione) e la somma dei prodotti è il numero decimale

corrispondente (64+32+16+8+1=121)

Bit 1 1 1 1 0 0 1

Posizione 6 5 4 3 2 1 0

Peso 64 32 16 8 4 2 1

Prodotto 64 32 16 8 0 0 1

Il sistema binario

1 0 1 0 1

Posizione: 4 3 2 1 0

1× 2 4 + 0× 2 3 + 1× 2 2 + 0× 2 1 + 1× 2 0 =

16 + 0 + 4 + 0 + 1 = 21

Bit meno significativo

(LSB)

Bit più significativo

(MSB)

Il sistema binario

• Con n bit si possono

scrivere i numeri

interi compresi fra 0 e

2n - 1

Bit Intervallo

1 Da 0 a 1

2 Da 0 a 3

3 Da 0 a 7

4 Da 0 a 15

5 Da 0 a 31

6 Da 0 a 63

7 Da 0 a 127

8 Da 0 a 255

9 Da 0 a 511

10 Da 0 a 1023

Il sistema binario

bin dec

00 0

01 1

10 2

11 3

Codifica a 2 bit (4 configurazioni) Codifica a 3 bit (8 configurazioni)

bin dec

000 0001 1010 2011 3100 4101 5110 6111 7

SOMMA DI NUMERI BINARI

0 +

0 =

0

1 +

0 =

1

0 +

1 =

1

1 +

1 =

1 0

1 +

1 +

1 =

1 1

riporto

1 0 0 1 1 1 0 +

1 1 1 0 0 1 1 =

1 1 0 0 0 0 0 1

SOMMA DI NUMERI BINARI

Riporto 1 1 1 1 1

Addendo

(60)0 0 1 1 1 1 0 0 +

Addendo

(110)0 1 1 0 1 1 1 0 =

Somma

(170)1 0 1 0 1 0 1 0

PRODOTTO DI NUMERI BINARI

0 x

0 =

0

1 x

0 =

0

0 x

1 =

0

1 x

1 =

1

Porte Logiche fondamentali ed universali

OPERATORI BINARI (o LOGICI, o BOOLEANI)

SOMMA

PRODOTTO

NEGAZIONE

32

Algebra booleana: logica binaria (a due stati)

A è una variabile booleana: A=1 oppure A=0

Funzioni logiche elementari per l’algebra

Booleana: OR, AND, NOT

Logica positiva: livello di tensione + elevato

corrisponde all’1 logico;

livello di tensione + basso

corrisponde allo 0 logico;

Logica negativa: livello di tensione + elevato

corrisponde allo 0 logico;

livello di tensione + basso

corrisponde all’1 logico.

Ingresso

A

Ingresso

B

Uscita

Y

0 0 0

0 1 1

1 0 1

1 1 1

A

B

La porta OR

Y A B

Tabella di verità

Corrisponde all’operatore SOMMA

Ingresso

A

Ingresso

B

Uscita

Y

0 0 0

0 1 0

1 0 0

1 1 1

A

B

Corrisponde all’operatore PRODOTTO

Y A B

La porta AND

A

Corrisponde all’operatore NEGAZIONE

Ingresso

A

Uscita

Y

0 1

1 0

Y A

La porta NOT

PROPRIETA’ FONDAMENTALI

A+0=A

A+1=1

A+A=A

A+A=1

A 0=0

A 1=A

A A=A

A A=0

A + A=1

A A=0

A=A

NOT AND OR

è una espressione logica (o Booleana) il cui

valore è funzione dei valori assunti dalla variabili

A, B, C

)( CBAY

A

B

C

Y

NOT

NOT

AND ( )

OR (+)

)( CBAY

Dal circuito alla tabella di verità

Leggi di De Morgan

a) prima legge di De Morgan

(X+Y) = X·Y

b) seconda legge di De Morgan

(X·Y) = X + Y

Ne consegue che una qualsiasi funzione logica può essere

implementata utilizzando:

o sole porte logiche OR e NOT

o sole porte logiche AND e NOT

La scelta ottimale dipende dalla tecnologia con cui vengono

integrate le porte logiche elementari

Teoremi dell’algebra di Boole (1)

1:

0)

:

)

0:

1)

11:

00)

XXDuale

XXd

XXXDuale

XXXc

XXDuale

XXb

XDuale

Xa

Teoremi dell’algebra di Boole (2)

ZYXZXYXDuale

vadistributiproprZYXZXYXh

ZYXZYXDuale

DeMorganteoremaZYXZYXg

ZYXZYXZYXDuale

assocproprZYXZYXZYXf

XYYXDuale

acommutativproprXYYXe

)()(:

_._)()

......:

__......)

)()(:

._._)()()

:

_._)

Teoremi dell’algebra di Boole (3)

)()()()(:

)

)(:

)

)()(:

_._)

)(:

'__)

YZXZYXZXZDuale

YZXZYXZXZl

YXYXXDuale

YXYXXk

XYXYXDuale

direttafusioneteorXYXYXj

XYXXDuale

inclusionedellteoremaXYXXi

Teoremi dell’algebra di Boole (4)

YXZXZXYXDuale

YXZXZXYXn

ZXYXZYZXYXDuale

ZXYXZYZXYXm

)()(:

)()()

)()()()()(:

)

Una qualsiasi funzione logica binaria

di cui sia nota la Tabella della verità, può essere espressa da:

a) somma di prodotti delle variabili binarie di ingresso

b) prodotto di somme delle variabili binarie di ingresso

,....),,( CBAFF

Tali espressioni costituiscono le cosidette

Forme canoniche della funzione

Forme canoniche

Esempio 1: esprimere come somma di prodotti fondamentali

la funzione logica

a tre variabili binarie

definita dalla

Tabella della Verità:

CBACBACBACBAF ········

A

B

F

C

0

0

0

0

0

0

1

1

0

1

1

0

1

0

1

0

0

1

0

1

1

0

0

1

1

1

1

0

1

1

0

1

Si considerino le sole combinazioni delle variabili binarie di ingresso corrispondenti

ad una uscita F di valore 1, e per queste sole si scrivano i prodotti delle variabili

(se 1) o dei loro negati (se 0).

Forma canonica della funzione logica definita dalla tabella della verità.

a) somma di prodotti

Esempio 2: esprimere come prodotto di somme fondamentali

la funzione logica

a tre variabili binarie

definita dalla

Tabella della Verità:

A

B

F

C

0

0

0

0

0

0

1

1

0

1

1

0

1

0

0

0

0

1

1

1

1

0

1

1

1

1

1

0

1

1

0

1

Si considerino le sole combinazioni delle variabili binarie di ingresso

corrispondenti ad una uscita F di valore 0, e per queste sole si

scrivano le somme delle variabili (se 0) o dei loro negati (se 1).

b) prodotto di somme

Forma canonica della funzione logica definita dalla tabella della verità

CBACBACBAF

Operatori logici universali

NAND = AND negato = AND con NOT in cascata

Altri operatori di conveniente impiego:

Tutti disponibili in forma integrata (Porte logiche)

NOR = OR negato = OR con NOT in cascata

XOR OR esclusivo

XNOR OR esclusivo negato

Operatore logico NOR(somma logica complementare o negata)convenzionalmente rappresentato dal simbolo di figura svolge la

somma logica negata delle variabili binarie evidenziata dalla tabella

B

AA+B

A B

0 0 10 1 0

1 0 0

1 1 0

A+B

Equivalente a:

NOTB

AA+B

NOR

OR

Operatore logico NAND (prodotto logico complementare o negato)convenzionalmente rappresentato dal simbolo di figura svolge il

prodotto logico negato delle variabili binarie evidenziato dalla tabella

NANDB

AA·B

A B

0 0 10 1 1

1 0 1

1 1 0

A·B

Equivalente a:

AND NOTB

AA·B

NAND e NOR sono operatori logici universali

Una qualsiasi funzione logica F(A,B,C,…) è implementabile

tramite opportune combinazioni:

• o di soli operatori logici NAND

• o di soli operatori logici NOR

Tramite soli operatori logici NAND (o analogamente NOR)

è possibile implementare i tre operatori logici fondamentali

AND, OR, NOT

Segue verifica per gli operatori NAND.

Analoga procedura si applica per gli operatori NOR

Esempio 1:

implementare l’operatore NOT mediante operatori NAND

A B=A

0 0 01 1 0

A·B

1

A·B

soluzione

NANDB=A

AA·A=A

1

Tabella della Verità

A B

0 0 10 1 1

1 0 1

1 1 0

A·B

00

0

1

A·B

Esempio 2:

implementare l’operatore AND mediante operatori NAND

Soluzione

NAND A·B

Tabella della Verità

NANDA

B

A·B

A B

0 0 10 1 0

1 0 0

1 1 0

A·B

01

1

1

A+B

Esempio 3:

implementare l’operatore OR mediante operatori NAND

Soluzione

A·B= A+B

Tabella della Verità

NAND

A

BB

A

01

1

1

A·B

De MorganNAND

NAND

Operatore logico XOR (Exclusive OR) convenzionalmente rappresentato dal simbolo di figura

confronta le variabili in ingresso e fornisce uscita 1 solo quando gli

ingressi sono fra loro differenti

B

A A B

0 0 00 1 1

1 0 1

1 0

XOR

1

Significato logico:

Se o A o B (non entrambi!) sono veri, anche F è vero

Funzione logica XOR

BABABAF

BA BA

Operatore logico XNOR convenzionalmente rappresentato dal simbolo di figura

confronta le variabili in ingresso e fornisce uscita 1 solo quando gli

ingressi sono fra loro uguali

A B

0 0 10 1 0

1 0 0

1 11

Significato logico:

Se entrambi A e B sono o veri o falsi, anche F è vero

Funzione logica XNOR

XNOR

B

ASAME FXNOR

ABBABAF

Dalla Tabella di verità al circuito logico

Mappe di Karnaugh

Sono una forma alternativa di rappresentazione di funzioni booleane. Una mappa per una funzione di n

variabili ha 2n caselle. La rappresentazione è comoda per n fino a 5.

Le caselle corrispondo alle 2n configurazioni di valori delle variabili secondo un ordine opportuno dove

l’adiacenza logica tra due configurazioni di valori delle variabili si riflette in un’adiacenza geometrica tra

due caselle con un lato in comune.

1

1

AB

ABABAY

1

1

AB

BABAY

celle adiacenti celle non adiacenti

I termini prodotto che scaturiscono da

una sintesi fatta con le mappe di K si

chiamano primi implicanti e devono

assicurare una copertura completa

della mappa.

1 1 1

1

ABC

0 1

0

1

0 1

0

1

00 01 11 10

0

1

BCACBCA

BCACBACBACBAY

1 1

1 1

AB

CD 00 01 11 10

00

01

11

10

ADY

Un elemento della tabella puo’

appartenere a più raggruppamenti

(elemento 000 nella tabella a

sinistra) che sono però sempre

espressione di una potenza di 2.

Questo consente di semplificare

ulteriormente l’espressione.

Rappresentazione della funzione logica binaria: ,....),,( CBAFF

A

B

F

C

0

0

0

0

0

0

1

1

0

1

1

0

0

1

0

1

1

0

1

0

1

0

0

1

1

1

1

0

1

1

0

1

Tabella della verità Mappa di Karnaugh

1

0

1

0 0

0 1

0

1

0

0 1 1 1 1 0

1

0

AB

In ognuna delle 2n caselle della Mappa di Karnaugh si riporta il valore assunto dalla

funzione F corrispondente alla combinazione delle n variabili di ingresso relativa

alla casella stessa (valore del mintermine).

C

CBACBACBACBAF

Rappresentazione della funzione logica binaria: ,....),,( CBAFF

A

B

F

C

0

0

0

0

0

0

1

1

0

1

1

0

0

1

0

1

1

0

1

0

1

0

0

1

1

1

1

0

1

1

0

1

Tabella della verità Mappa di Karnaugh

1

0

1

0 0

0 1

0

1

0

0 1 1 1 1 0

1

0

AB

In ognuna delle 2n caselle della Mappa di Karnaugh si riporta il valore assunto dalla

funzione F corrispondente alla combinazione delle n variabili di ingresso relativa

alla casella stessa (valore del mintermine).

C

CBACBACBACBAF

CBACACBF

Procedura di minimizzazione di funzioni logiche binarie

rappresentate mediante mappa di Karnough

• Sintesi di F minima come somma di prodotti logici.

Procedura:

a) raggruppare gli 1 contigui (in orizzontale o in verticale)

in sottogruppi di 1, 2, 4, 8, …

b) identificare il numero minimo di sottogruppi distinti, partendo

dai sottogruppi maggiori

b) con riferimento al sottogruppo:

escludere le variabili binarie che cambiano

considerare le sole variabili binarie che rimangono invariate come

variabile stessa se 1, variabile negata se 0

c) trascrivere il prodotto logico per ciascun sottogruppo

d) rappresentare la F come somma dei prodotti logici suddetti

F = BC

Esempio 1

1

0

0

0 0

0 1

0

0

0

0 1 1 01 1

1

0

AB

CA

B

F

C

0

0

0

0

0

0

0

1

0

1

1

0

0

1

0

1

1

0

0

0

1

0

0

1

1

1

1

0

1

1

0

1

Tabella della verità Mappa di Karnaugh

Individuo il sottogruppo (1 sottogruppo da 2)

individuo la variabile che cambia: A

trascrivo il prodotto delle variabili che rimangono invariate: BC

Funzione logica minima:

Procedura convenzionale: applico le regole della logica binaria

CABCBAF Forma canonica:

CBAACBCABCBAF essendo: 1 AA

Esempio 2

1

1

0

0 0

0 0

0

1

0

0 1 1 01 1

0

0

AB

C

Mappa di Karnaugh

Funzione logica minima:

CBF

Esempio 3

1

0

0

0 0

0 1

1

0

0

0 1 1 01 1

1

0

AB

C

Mappa di Karnaugh

Funzione logica minima:

BABCF

due sottogruppi da 2 celle, di cui uno verticale ed uno orizzontale

N.B.: le celle al bordo orizzontale o verticale si considerano fra loro contigue

0 1

1

1

0 0

0 0 1

1

0

1

0 1 1 01 1

0

0

AB

CD

0

0

0

0

0

1

0

0

1 1

1 0

Esempio 4Mappa di Karnaugh

F= A C + B C D + A B C DFunzione logica minima:

1 sottogruppo da 4: CA

1 sottogruppo da 2:

1 sottogruppo da 1: DCBA

B C D

0 1

1

1

0 0

0 0 1

1

-

0

0 1 1 01 1

0

-

AB

CD

0

0

-

0

0

1

0

0

1 1

1 0

Esempio 5 (comprese condizioni indifferenza)Mappa di Karnaugh

0 1

1

1

0 0

0 0 1

1

1

0

0 1 1 01 1

0

0

AB

CD

0

0

0

0

0

1

0

0

1 1

1 0

Esempio 5 (comprese condizioni indifferenza)Mappa di Karnaugh

F= A C + A B DFunzione logica minima:

1 sottogruppi da 4: A C

1 sottogruppo da 2: A B D

Possono esistere casi in cui alcune combinazioni di ingressi non sono lecite. In questi casi le

corrispondenti uscite sono indefinite. Questi casi possono essere sfruttati vantaggiosamente per

semplificare ulteriormente l’espressione algebrica.

Ad esempio consideriamo la funzione Y che identifica se una cifra decimale (rappresentata in

forma binaria), è pari.

A B C D Y

0 0 0 0 1

0 0 0 1

0 0 1 0 1

0 0 1 1

0 1 0 0 1

0 1 0 1

0 1 1 0 1

0 1 1 1

1 0 0 0 1

1 0 0 1

1 0 1 0 x

1 0 1 1 x

1 1 0 0 x

1 1 0 1 x

1 1 1 0 x

1 1 1 1 x

0

1

2

3

4

5

6

7

8

9

-

-

-

-

-

-

1 1 x 1

x

x x

1 1 x x

AB

CD 00 01 11 10

00

01

11

10

gli ingressi

corrispondenti a

queste uscite non

sono leciti

Possono esistere casi in cui alcune combinazioni di ingressi non sono lecite. In questi casi le

corrispondenti uscite sono indefinite. Questi casi possono essere sfruttati vantaggiosamente per

semplificare ulteriormente l’espressione algebrica.

Ad esempio consideriamo la funzione Y che identifica se una cifra decimale (rappresentata in

forma binaria), è pari.

A B C D Y

0 0 0 0 1

0 0 0 1

0 0 1 0 1

0 0 1 1

0 1 0 0 1

0 1 0 1

0 1 1 0 1

0 1 1 1

1 0 0 0 1

1 0 0 1

1 0 1 0 x

1 0 1 1 x

1 1 0 0 x

1 1 0 1 x

1 1 1 0 x

1 1 1 1 x

0

1

2

3

4

5

6

7

8

9

-

-

-

-

-

-

1 1 x 1

x

x x

1 1 x x

AB

CD 00 01 11 10

00

01

11

10

DY

gli ingressi

corrispondenti a

queste uscite non

sono leciti

Progetto logico

Data una funzione logica binaria, determinare una

possibile combinazione di Operatori logici che la

implementino

• Operatori logici elementari AND; OR; NOT

• Operatori logici universali NAND; NOR

La soluzione non è univoca: esiste una soluzione ottimale:

vincoli tecnologici ed economici

Progetto logico: procedura

• Descrizione funzionale della rete combinatoria

definizione della relazione logica fra l’uscita F e le variabili

binarie di ingresso A, B, C,...

• Rappresentazione tramite Tabella della verità

• Deduzione della funzione logica F(A, B, C,…) in forma canonica

(o somma di prodotti o prodotti di somme)

• Minimizzazione della funzione logica

o tramite le leggi elementari della logica binaria

o tramite le Mappe di Karnaugh

• Sintesi della funzione tramite Operatori logici

elementari (AND, OR, NOT) e/o universali (NAND, NOR)

• Descrizione funzionale della rete combinatoria

Esempio: date tre variabili binarie in ingresso A, B, C, si abbia:

F=A per C=0; F=B per C=1

• Rappresentazione tramite Tabella della verità

A

B

F

C

0

0

0

0

0

0

0

1

0

1

0

0

0

1

1

1

1

0

1

0

1

0

0

1

1

1

1

0

1

1

1

1

• Deduzione della funzione logica F(A, B, C,…) in forma canonica

Somma di prodotti:

Prodotto di somme:

CBACBACBACBAF

CBACBACBACBAF

BCCAAABCBBCA

ABCCABBCACBAF

• Minimizzazione della funzione logica

o tramite le leggi elementari della logica binaria

o tramite le Mappe di Karnaugh

1

0

0

0 0

0 0

1

1

0

0 1 1 01 1

1

1

AB

C

Mappa di Karnaugh

Funzione logica minima:

BCCAF

2 sottogruppi orizzontali da 2: AC, BC

• Sintesi della funzione tramite operatori logici elementari

(AND; OR; NOT)

A

B

C

B

NOTCOR

C

ACAND

F

AND

A

C

BC

A

B

C

BCCAF

• Sintesi della funzione tramite operatori logici universali

(NAND oppure NOR)

In questo esempio parto da forma SP, quindi uso il NAND:

A

B

C

NAND

AC

NAND

F

NANDBC

A

B

C

BCCABCCAF