Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC :...

19
FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do datapath unidades funcionais Unidades funcionais do datapath operadores aritméticos operandos inteiros, vírgula fixa ou vírgula flutuante operadores com constantes, mais eficientes do que operadores genéricos operadores lógicos, manipulação de bits funções lógicas, rotações, deslocamentos, bitreverse operadores específicos de uma aplicação • A*B-(C+D), x[k]*x[k+t1]*x[k+t2] Numa abordagem top-down (HDL+síntese) operadores inferidos e construídos no processo de síntese implementados como circuitos combinacionais nem todos os operadores disponíveis FPGA Express (V3.6.1) suporta apenas divisões entre constantes arquitecturas dos operadores definidas nas bibliotecas da tecnologia alvo em Verilog todas as operações são consideradas com operandos sem sinal FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 200 Operadores aritméticos adição e subtracção ripple carry adder (RCA) propagação do carry limita a rapidez de cálculo resultado garantido após o maior tempo de propagação do carry carry select adder dividido em secções e cada secção inclui 2 somadores de k bits exemplo: somador de 12 bits em secções de 4 bits: Kay Hwang, “Computer Arithmetic - Principles, Architecture and Design”, John Wiley & Sons, 1990 A 3-0 A 3-0 B 3-0 B 3-0 1 0 4 bit add 4 bit add C -1 C 3,1 C 3,0 A 7-4 A 7-4 B 7-4 B 7-4 1 0 4 bit add 4 bit add C 7,1 C 7,0 C 3,0 C 3,1 CS A 11-8 A 11-8 B 11-8 B 11-8 1 0 4 bit add 4 bit add C 11,1 C 11,0 CS C 3,0 C 3,1 C 7,0 C 7,1 S 3-0 S 7-4 S 11-8 C 11 C 7 C 4

Transcript of Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC :...

Page 1: Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

199

Síntese do datapathunidades funcionais

• Unidades funcionais do datapath– operadores aritméticos

• operandos inteiros, vírgula fixa ou vírgula flutuante• operadores com constantes, mais eficientes do que operadores genéricos

– operadores lógicos, manipulação de bits• funções lógicas, rotações, deslocamentos, bitreverse

– operadores específicos de uma aplicação• A*B-(C+D), x[k]*x[k+t1]*x[k+t2]

• Numa abordagem top-down (HDL+síntese)– operadores inferidos e construídos no processo de síntese

• implementados como circuitos combinacionais– nem todos os operadores disponíveis

• FPGA Express (V3.6.1) suporta apenas divisões entre constantes– arquitecturas dos operadores definidas nas bibliotecas da tecnologia alvo

• em Verilog todas as operações são consideradas com operandos sem sinal

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

200

Operadores aritméticosadição e subtracção

– ripple carry adder (RCA)• propagação do carry limita a rapidez de cálculo• resultado garantido após o maior tempo de propagação do carry

– carry select adder• dividido em secções e cada secção inclui 2 somadores de k bits• exemplo: somador de 12 bits em secções de 4 bits:

Kay Hwang, “Computer Arithmetic - Principles, Architecture and Design”, John Wiley & Sons, 1990

A3-0

A3-0 B3-0

B3-0

1

0

4 bit add

4 bit add

C-1

C3,1

C3,0

A7-4

A7-4 B7-4

B7-4

1

0

4 bit add

4 bit add

C7,1

C7,0

C3,0

C3,1CS

A11-8

A11-8 B11-8

B11-8

1

0

4 bit add

4 bit add

C11,1

C11,0

CSC3,0

C3,1

C7,0

C7,1

S3-0S7-4S11-8

C11

C7C4

Page 2: Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

201

Operadores aritméticosadição e subtracção

– carry generate, carry propagate, lookahead• generate

• propagate

• equações do somador escrevem-se

• os carry de todos os andares podem ser obtidos em paralelo

Gi = Ai . Bi significa que o carry é gerado no andar i

Pi = Ai ⊕ Bi significa que o andar i propaga o carry que lhe chega

Si = Ai ⊕ Bi ⊕ Ci-1 = Pi ⊕ Ci-1Ci = Ai .Bi + Ai .Ci-1 + Bi .Ci-1 = Ai .Bi + Ai .Ci-1.Bi + Bi .Ci-1.Ai

= Ai .Bi + Ci-1.(Ai.Bi + Bi.Ai)= Ai.Bi + Ci-1.(Ai ⊕ Bi )= Gi + Pi .Ci-1

C1 = G1 + C0 .P1C2 = G2 + C1 .P2 = G2 + (G1 + C0 .P1) .P2 = G2 + G1 .P2 + C0 .P1 .P2. . .Ck = Gk + Gk-1 .Pk + Gk-1 .Pk-1 .Pk + ... + C-1 .P0 .P1.....Pk

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

202

Operadores aritméticos – adição e subtracção

– somadores assíncronos• tempo de propagação depende dos operandos• circuitos para detectar que a propagação do carry está concluída• somador de 32 bits: média de 5 bits de carry

– 6 para um somador de 64 bits

• tempo pior é igual ou pior do que um somador ripple carry

– subtractores• em complemento para dois basta complementar o subtractor

– trocar todos os bits (com XOR) e adicionar 1 fazendo C-1=1

– melhor implementação depende da tecnologia• em FPGAs XC4000 e usando fast carry logic

– somador ripple carry melhor do que carry select ou lookahead carry

• para ASICs há arquitecturas mais eficientes – usando portas complexas CMOS ou modelos ao nível do interruptor

Page 3: Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

203

1 1 0 1 0 (a = 26 ou -6)0 1 0 1 1 (b = 11 ou +11)

+ 1 1 0 0 0 (c = 24 ou -8)0 1

1 00 0

1 1 + 1 0

1 1 1 1 0 1 (a+b+c = 61 ou -3)

Operadores aritméticosadição e subtracção

• Adição de vários operandos– Carry save adder

• produz 2 resultados (z e 2y) cuja soma é igual à adição dos 3 operandos

• Os resultados y e z são gerados em tempo constante ( O(1) )• Para obter o resultado z+2y é necessário um somador adicional

FA

a3 b3 c3

z3y3

FA

a2 b2 c2

z2y2

FA

a1 b1 c1

z1

y1

FA

a0 b0 c0

z0

y0

a+b+c = z+2y

0+1+0=011+1+0=10

z = 01001

y = 11010

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

204

Operadores aritméticosadição e subtracção

• Adição de vários operandos com RCA– Exemplo: adição de 7 operandos com n bits cada

Half adder

Full adder

a b c d e f g

3(n-1) FA, 3 HA

2n-1 FA, 3 HA

n n n n n n n

n+1 n+1n+1

n+2 n+2

n+3

n+1 FA, 1 HA

n

... ... ...

...

...

...

6n-3 FA, 7 HA

lognK

Tempo de propagação: (n+3+1)tpFA

Page 4: Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

205

Operadores aritméticosadição e subtracção

• Árvore de CSA para adicionar n operandosa b c d e f g

2n FA

n-1 FA, 1 HA

n n n n n n n

n n n

n FA

n

6n-3 FA, 3 HA

n

n+1n

n+1n

n-1 FA, 1HAn+2

nn-1 FA, 1HA

CSA

Somador de n bits

n n n

n n

sumcarry

Half adderFull adder

bypass

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

206

Operadores aritméticosmultiplicação

• Multiplicação binária

– multiplicação de números com sinal• facilmente tratados com representação em sinal e magnitude• o produto é

– negativo se os operandos tiverem sinais diferentes– positivo caso contrário

• custo: complementar os operandos e o resultado

1101 (13)0101 (5)1101

00001101

000001000001 (65 ≠ -15)

x(-3)(5)

sem sinal complemento para dois

Page 5: Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

207

Operadores aritméticosmultiplicação

• Multiplicador iterativo (shift-add)– multiplicando=Md[m-1:0], multiplicador=Mr[n-1:0] – Acc[m+n:0] = 0– para cada bit k do multiplicador desde 0 até n-1

• se Mrk = = 1Acc[m+n:n] = Acc[m+n-1:n] + Md[m-1:0]

• Acc = Acc >> 1

– produto = Acc[m+n-1:0]– exemplo:

Md Mr k Mrk Acc oper.1101 0101 - - 0000000001101 0101 0 1 011010000 add

001101000 shift1101 0101 1 0 001101000 add

000110100 shift1101 0101 2 1 100000100 add

010000010 shift1101 0101 3 0 010000010 add

001000001 shift

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

208

Operadores aritméticosmultiplicação

• Multiplicador shift-add– implementação

• em cada ciclo, os m+1 bits do produto parcial são carregados em Acc• o resultado parcial é deslocado para o registo que contém

inicialmente Mr

m bitadder

Mr

Mr0

P[m+n-1:0]

Acc Mdshrld

shrld

mn

nm

ld

m+1

Page 6: Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

209

Operadores aritméticosmultiplicação

• Multiplicação binária, complemento para dois– se só for negativo o multiplicando

• basta estender o sinal dos produtos parciais

11010101111110100000011101

000011110001

x(-3)(5)

(-15)

extensão de sinal

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

210

Operadores aritméticosmultiplicação

• Multiplicação binária em complemento para dois– se o multiplicador for negativo

• basta subtrair o último produto parcial (é igual a zero se for positivo)

– Recordando a representação complemento para dois• para um número positivo com m bits

• se for negativo

• para os dois casos

valor(x) = 0 + Xm-2.2m-2 + …+ X121 + X0.20

valor(x) = -2m + 2m-1 + Xm-2.2m-2 + …+ X121 + X0.20

valor(x) = - Xm-1.2m-1 + Xm-2.2m-2 + …+ X121 + X0.20

bit de sinal Xm-1 tem peso -2m-1

Page 7: Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

211

Operadores aritméticosmultiplicação

• Multiplicação em complemento para dois– se o multiplicador for negativo

– … e se ambos negativos

– implementação: fácil incluir no multiplicador shift-add!

11011101111110100000011101

111100011110100001001

x(-3)(-3)

(+9)

+

-

somar os 3 produtos parciaissubtraír o último produto parcial

extensão de sinal

010111010101

00000101

00110010101

11110001

x(5)

(-3)

(-15)

+

-

somar os 3 produtos parciaissubtraír o último produto parcial

se o multiplicadorfor positivo, o últimoproduto parcial é zero!

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

212

Operadores aritméticosmultiplicação

• Multiplicador shift-add– avaliação de k bits do multiplicador de cada vez

• número de ciclos reduzido k vezes (shift de k bits de cada vez)• exemplo para k=2

• aumento da complexidade do somador– é necessário somar 3.Md– somadores em cascata, tempo de atraso superior

Mr1 Mr0 somar a Acc0 0 00 1 Md1 0 2.Md1 1 2.Md+Md

m bitadder

MrMr0

Mdshrld

n

ld

m+1 bitadder

Mr1 2.MdAccm

m

m

m+1

m+2

Page 8: Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

213

Operadores aritméticosmultiplicação

• Multiplicação - recodificação de Booth– pela propriedade:

• pode substituir-se

• por

• objectivo: eliminar sequências de uns

– permite evitar em cada ciclo a soma de 3 operandos (2.Md+Md)

1 0 0 1 1 1 0 0 1

2i+k - 2i = 2i+k-1 + 2i+k-2 + 2i+1 + 2i

1 0 1 0 0 1 0 0 12i+k - 2i

0010111011011000101110111010001011110010100011000100101001010001001010

factores: 0 2 3 2 3 1 2

factores: 1 -1 0 -1 0 -2 -2

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

214

Operadores aritméticosmultiplicação

• Multiplicação - recodificação de Booth– algoritmo

• percorrer todos os bits desde o lsb até encontrar um 1• trocar esse 1 por 1 e percorrer uns até encontrar um zero• trocar esse 0 por 1 e continuar

– exemplo

– tabela de recodificação, analisando 2 bits de cada vez• é necessário acrescentar

um bit zero à direita dolsb: b-1=0

0011 1101 1001 = 512 + 256 + 128 + 64 + 16 + 8 + 1 = 985

0100 0110 1011 = 1024 - 64 + 32 - 8 + 2 - 1 = 985

bi bi-1 zi valor caso0 0 0 0 cadeia de zeros0 1 1 +1 fim dos uns1 0 1 -1 inicio dos uns1 1 0 0 cadeia de uns

Page 9: Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

215

Operadores aritméticosmultiplicação

• Multiplicação - recodificação de Booth– multiplicação com sinal: basta recodificar o multiplicador– para cada bit do multiplicador

• se é 0 não soma nada• se é 1 soma o multiplicando• se é 1 soma o simétrico do multiplicando

– exemplo

-7-5

-(-7)x20+(0)x21

+(-7)x22-(-7)x23

7-28+56=35

x

+

10011101

0000011100000001110010011100100011

x

+

(-7) x (-5) = +35-7 = 1001-5 = 1011

recodificar -5(ver tabela)

1011 01011 01011 01011 0 1101

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

216

Operadores aritméticosmultiplicação

• Multiplicador de Booth iterativo– multiplicador Mr acrescentado de um bit à direita: Mr-1= 0– comparados dois bits de Mr de cada vez

• se bi = bi-1 desloca produto parcial (11 ou 00 → 0)• se bi < bi-1 soma Md e desloca produto parcial (01 → 1)• se bi > bi-1 subtrai Md e desloca produto parcial (10 → 1)• deslocamento aritmético do produto• exemplo:

– Mr = -3 (1101)– Md = +7 (0111)

1101 0 1 -7 1001 00001100 1000

1101 0 1 +7 0011 10000001 1100

1101 0 1 -7 1010 11001101 0110

1101 0 0 +0 1101 01101110 1011

Mr-1Mr opr. produto

Page 10: Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

217

Operadores aritméticosmultiplicação

• Multiplicador de Booth– recodificando pares de bits em dígitos com sinal

• são analisados 3 bits de cada vez• cada par de bits produz uma multiplicação por 0, +1, +2, -1 ou -2• reduz para metade o número de iterações (shift de 2 bits de cada vez)

– tabela de recodificação

bi bi-1 bi-2 zi zi-1 valor caso0 0 0 0 0 cadeia de zeros0 0 1 1 +1 fim de uns0 1 0 1 +1 1 isolado0 1 1 1 +2 fim de uns1 0 0 1 -2 início de uns 1 0 1 1 -1 zero isolado 1 1 0 1 -1 início de uns1 1 1 0 0 cadeia de uns

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

218

Operadores aritméticosmultiplicação

• Multiplicador de Booth (n/2 iterações)

add/sub

MultiplicadorMultiplicando

n m

recode

x2

0 1

add/sub

sel

zero

prod

b-1b0b1

recodeb1 b0 b-1 val sel zero add/sub0 0 0 0 x 1 x0 0 1 1 0 0 10 1 0 1 0 0 10 1 1 2 1 0 11 0 0 -2 1 0 01 0 1 -1 0 0 01 1 0 -1 0 0 01 1 1 0 0 1 x

Page 11: Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

219

Operadores aritméticosmultiplicação

• Multiplicação paralela (unsigned)

a4.b0 a3.b0 a2.b0 a1.b0 a0.b0a4.b1 a3.b1 a2.b1 a1.b1 a0.b1

a4.b2 a3.b2 a2.b2 a1.b2 a0.b2 a4.b3 a3.b3 a2.b3 a1.b3 a0.b3

a4.b4 a3.b4 a2.b4 a1.b4 a0.b4

a4 a3 a2 a1 a0 b4 b3 b2 b1 b0x

p9 p8 p7 p6 p5 p4 p3 p2 p1 p0

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

220

Operadores aritméticosmultiplicação

• array multiplicador (unsigned)– cada nó é um full adder

FAFA FA FA

FA FA FA FA

FA FA FA FA

FA FA FA FA

FA FA FA FA

p0p1p2p3p4p5p6p7p8p9

0

0 0 0 0a0.b0a0.b1

a1.b0

a2.b0

a3.b0

a4.b0

a1.b1

a2.b1

a3.b1

a4.b1

a1.b2

a2.b2

a3.b2

a4.b2

a1.b3

a2.b3

a3.b3

a4.b3

a0.b2a0.b3a0.b4

a1.b4

a2.b4

a3.b4

a4.b4

FA

A

B

Cin

SCout

Page 12: Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

221

Operadores aritméticosmultiplicação

• multiplicação paralela (signed)

(a4.b0) a3.b0 a2.b0 a1.b0 a0.b0(a4.b1) a3.b1 a2.b1 a1.b1 a0.b1

(a4.b2) a3.b2 a2.b2 a1.b2 a0.b2 (a4.b3) a3.b3 a2.b3 a1.b3 a0.b3

a4.b4 (a3.b4) (a2.b4) (a1.b4) (a0.b4)

(a4) a3 a2 a1 a0 (b4) b3 b2 b1 b0x

(p9) p8 p7 p6 p5 p4 p3 p2 p1 p0

bit de sinal(peso -24)

termos de somanegativos

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

222

Operadores aritméticosmultiplicação

• array multiplicador de Pezaris (nxn, signed)– 4 tipos de full adders diferentes

• FA0, FA1, FA2, FA3

FA3

FA2 FA2

p0p1p2p3p4p5p6p7p8(p9)

0

0 0 0 0a0.b0a0.b1

a1.b0

a2.b0

a3.b0

a4.b0

a1.b1

a2.b1

a3.b1

a4.b1

a1.b2

a2.b2

a3.b2

a4.b2

a1.b3

a2.b3

a3.b3

a4.b3

a0.b2a0.b3a0.b4

a1.b4

a2.b4

a3.b4

a4.b4

FA2 FA2

FA1 FA1 FA1

FA2 FA0 FA0 FA0

FA2 FA0 FA0 FA0

FA2 FA0 FA0 FA0

Page 13: Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

223

Operadores aritméticosmultiplicação

• multiplicador bi-secção (signed)– separando os termos positivos dos negativos

a3.b0 a2.b0 a1.b0 a0.b0a3.b1 a2.b1 a1.b1 a0.b1

a3.b2 a2.b2 a1.b2 a0.b2 a4.b4 0 a3.b3 a2.b3 a1.b3 a0.b3

(a4.b3) (a4.b2) (a4.b1) (a4.b0)(a3.b4) (a2.b4) (a1.b4) (a0.b4)

(a4) a3 a2 a1 a0 (b4) b3 b2 b1 b0x

(p9) p8 p7 p6 p5 p4 p3 p2 p1 p0

secçãopositiva

secçãonegativa

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

224

Operadores aritméticosmultiplicação

• multiplicador bi-secção– só dois tipos de full-adders– fácil de expandir para mxn

FA2

FA2 FA2

p0p1p2p3p4p5p6p7p8(p9)

0

a4.b0a4.b1a4.b2a4.b3

a3.b4

a4.b4

FA2 FA2

FA2 FA2 FA2

FA0 FA0 FA0

0 0 0a0.b0a0.b1

a1.b0

a2.b0

a1.b1

a2.b1

a1.b2

a2.b2

a1.b3

a2.b3

a0.b2a0.b3

FA0 FA0 FA0

FA0 FA0 FA0

a3.b0a3.b1a3.b2a3.b3

FA0 FA0 FA0

a2.b4 a1.b4 a0.b4

0

secção positivasecção negativa

Page 14: Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

225

Operadores aritméticos – divisão

• divisão de números inteiros sem sinal– processo parecido com a multiplicação: shift-subtract– o resultado de uma subtração define a próxima operação

• dependência entre as várias operações• mais complexo do que a multiplicação

– exemplo (sem sinal): 147/11=13, 147%11=4

10010011 10111011 0000110100111010110011111011100

-

-

-

1 < 101110 < 1011... 111 < 1011

subtrai divisor

resto

quocientedividendo

divisor

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

226

Operadores aritméticos – divisão

• divisão unsigned - algoritmoA=0; // fica com o resto, n bitsM=Divisor; // n bitsQ=Dividendo; // “apanha” quociente, m bitscnt=m;repeat{A,Q} = {A,Q} << 1;A = A - M; // subtrai o divisor ao dividendoif (A>=0)Q[0] = 1; // divisor “coube” no dividendo

elsebeginQ[0] = 0; // divisor não “coube” no dividendoA = A + M; // repõe o valor do dividendo

endcnt = cnt - 1;until (cnt==0);

A Q0011 110000110111 10000110

quocientedividendo

resto

Page 15: Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

227

Operadores aritméticos – divisão

• divisão de números inteiros com sinal (compl.para 2)M=Divisor; // n bits{A,Q}=Dividendo; // dividendo com extensão de sinal (n+m bits)

// A fica com o resto (n bits)cnt=m; // m bits do dividendosD = sign({A,Q});// guarda sinal do dividendorepeat{A,Q} = {A,Q} << 1;sA = sign(A); // sinal do resto actualA0 = A; // guarda Aif ( sign(A) == sign(M) )A = A - M;elseA = A + M;if ( sign(A) == sA || ( A == 0 && Q == 0 ) ) // trocou sinal de AQ[0] = 1;elsebeginQ[0] = 0; // bit do quociente é zero A = A0; // restaura o valor de Aend

cnt = cnt - 1;until (cnt==0);if ( sD != sign(M) ) // dividendo e divisor com sinais opostosQ = -Q;

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

228

Operadores aritméticos – divisão

• exemplo (signed): -7 / 3 ({A,Q} = -7, M = +3)

-7 / 3 = -2-7 % 3 = -1

{A,Q} = -7 = 1001M = +3 = 0011...Q = -2 = 1110R = -1 = 1111

1111 1001 dividendo com extensão do sinal1111 0010 shift e guarda A (A=1111)0011 A e M com sinais diferentes, soma M a A0010 o resultado trocou o sinal de A1111 0010 Q[0]=0 e restaura o valor de A1110 0100 shift e guarda A ( A=1110)0011 M e A com sinais diferentes, soma M a A0001 o resultado trocou o sinal de A1110 0100 Q[0]=0 e restaura o valor de A1100 1000 shift e guarda A (A=1100)0011 M e A com sinais diferentes, soma M a A1111 o resultado não trocou o sinal de A1111 1001 Q[0]=11111 0010 shift e guarda A (A=1111)0011 M e A com sinais diferentes, soma M a A0010 o resultado trocou o sinal de A1111 0010 Q[0]=0, restaura o valor de A1111 1110 dividendo e divisor com sinais opostos

troca o sinal do quociente: Q=-2, R=-1

+

+

+

+

A Q

Page 16: Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

229

Operadores aritméticos – divisão

• Divisor celular (combinacional)– Array divisor (non-restoring)

CAS CAS CAS CAS

CAS CAS CAS CAS

CAS CAS CAS CAS

CAS CAS CAS CAS

n6 n5 n4 n3

n2

n1

n0

r0r1r2r3

q0

q1

q2

q3

1

d3 d2 d1 d0

dividendodivisor

quociente resto

CAS(Controlled Add/Subtract)

FA

BiAi

Ci

Bi

Ci+1

Si

P P

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

230

Síntese do datapathoutros operadores

• Operadores aritméticos específicos de uma aplicação– quadrado

• AxA é mais eficiente do que a multiplicação

– operações com constantes• propagação de constantes simplifica o hardware (geralmente...)• multiplicação traduzida em shifts, adições e subtracções

– raíz quadrada• aproximação algorítmica

– funções transcendentes • aproximações por tabelas, polinómios ou segmentos de recta • domínio da função e precisão pretendida condiciona o método

Page 17: Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

231

Exemplo: Filtro FIRsptool (MatLab)passband:

ripple=1dBFc=4KHz

stopbandFs=6KHzG=-30dB

filtro FIR 31 coeficientes

resposta impulsional:

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

232

Exemplo:filtro FIRmultiplicações xk*hn

assign p0 = - ( {1'b0, din } << 1 ); // 9 bitsassign p1 = 8'b0; // 8 bitsassign p2 = din; // 8 bitsassign p3 = -p0; // 9 bitsassign p4 = { {2{din[7]}},din} + ( { {2{din[7]}}, din} << 1 ); // 10 bitsassign p5 = p3; // 9 bitsassign p6 = 0; // 8 bitsassign p7 = p0; // 9 bitsassign p8 = - ( { {3{din[7]}},din} + ( { {3{din[7]}}, din} << 2 ) ); // 11 bitsassign p9 = p8; // 11 bitsassign p10 = -p4; // 10 bitsassign p11 = p4; // 10 bitsassign p12 = ( {{4{din[7]}}, din } << 3 ) + ( {{4{din[7]}}, din } << 1 ) + {{4{din[7]}}, din}; // 12 bitsassign p13 = ( {{5{din[7]}}, din } << 4 ) + ( {{5{din[7]}}, din } << 2 ); // 13 bitsassign p14 = ( {{5{din[7]}}, din } << 4 ) + ( {{5{din[7]}}, din } << 3 ) + ({{5{din[7]}}, din } << 1);// 13 bitsassign p15 = ( {{5{din[7]}}, din } << 5 ) - ( {{5{din[7]}}, din } << 2 ) + ({{5{din[7]}}, din } );// 13 bits

Coeficientes (/128): -2 0 1 2 3 2 0 -2 -5 -5 -3 3 11 20 262926 20 11 3 -3 -5 -5 -2 0 2 3 2 1 0 -2

Page 18: Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

233

Exemplo:filtro FIRadições (xk*hn-1)+(xk*hn-2)+...+xk*h0

if ( enable )begin

t0 <= { p0[8], p0 };t1 <= t0 + { {2{p1[7]}}, p1 };t2 <= t1 + { {2{p2[7]}}, p2 };t3 <= { t2[9], t2 } + { {2{p3[8]}}, p3 };t4 <= { t3[10], t3 } + { {2{p4[9]}}, p4 };t5 <= t4 + { {3{p5[8]}}, p5 };t6 <= t5 + { {4{p6[7]}}, p6 };t7 <= t6 + { {3{p7[8]}}, p7 };t8 <= { t7[11], t7 } + { {2{p8[10]}}, p8 };t9 <= t8 + { {2{p9[10]}}, p9 }; t10 <= t9 + { {3{p10[9]}}, p10 };t11 <= t10 + { {3{p11[9]}}, p11 };t12 <= { t11[12], t11} + { {2{p12[11]}}, p12 };t13 <= t12 + {p13[12], p13};t14 <= { t13[13], t13} + { {2{p14[12]}}, p14 };t15 <= t14 + { {2{p15[12]}}, p15 };t16 <= { t15[14], t15 } + { {3{p14[12]}}, p14 };...

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

234

Exemplo:filtro FIRdivisão final, arredondamento e clipping

always @( t30 )begin

corr_bit = ( t30[6] & ( | t30[5:0] ) ) // add 1 if decimal part is 0.1bbbbb with at least one b==1| ( t30[6] & t30[7] ); // add 1 if decimal part is 0.100000 and integer part is odd

dout_bc = t30[15:7] + { 7'd0, corr_bit };dout = dout_bc[7:0];// clipping to maxint and minintif ( dout_bc[8:7] == 2'b01 ) // overflow positive in 8 bits, set to maximum positive

dout = 8'b01111111;if ( dout_bc[8:7] == 2'b10 ) // overflow negative in 8 bits, set to minimum negative

dout = 8'b10000000;end

Page 19: Síntese do datapath - web.fe.up.ptaja/PSDI_200708/slides/slidesPSDI200708... · FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007 José Carlos Alves 199 Síntese do

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

235

Exemplo: filtro IIR

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

20

40

60

80

100

Normalized Frequency (×π rad/sample)

Pha

se (d

egre

es)

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-40

-30

-20

-10

0

10

Normalized Frequency (×π rad/sample)

Mag

nitu

de (d

B)

0 0.05 0.1 0.15 0.2 0.25 0.3

20

40

60

80

Normalized Frequency (×π rad/sample)

Pha

se (d

egre

es)

0 0.05 0.1 0.15 0.2 0.25 0.3

-20

-10

0

Normalized Frequency (×π rad/sample)

Mag

nitu

de (d

B)

Y/X = 0.86* 1 - z-11 - 0.738z-1 Yk = (Xk – Xk-1 + 0.738Yk-1)*0.86

FEUP/DEEC : EEC0055 / Projecto de Sistemas Digitais, 2006/2007José Carlos Alves

236

Exemplo: filtro IIRassign add1 = -{ {2{dind[15]}}, dind} + { {2{din[15]}}, din} + yd1;always @( add1d or yd1i )begin

yd1i = { {10{add1d[17]}}, add1d} * 27'd756; yd1 = yd1i[27:10];

end/* // ou então: always @( add1d or yd1 )begin

yd1 = add1d - { {2{add1d[17]}}, add1d[17:2] };yd1 = add1d - { {4{yd1[17]}}, yd1[17:4] };yd1 = add1d + { {1{yd1[17]}}, yd1[17:1] };yd1 = { {1{yd1[17]}}, yd1[17:1] };

end*/ // douti = add1d * int( 0.86 * 256 ) / 256;

always @( add1d or doutii )begin

doutii = { {8{add1d[17]}}, add1d} * 25'd220;douti = doutii[25:8];

end

/* // uma forma alternativa de codificar o mesmo:always @( add1d or douti )begin

douti = add1d - { {3{add1d[17]}}, add1d[17:3] };douti = add1d + { {1{douti[17]}}, douti[17:1] };douti = add1d + { {1{douti[17]}}, douti[17:1] };douti = { {1{douti[17]}}, douti[17:1] };

end*/