Projecto de Sistemas Digitais (EEC4279) Licenciatura em Engenharia Electrotécnica e de Computadores Faculdade de Engenharia da Universidade do Porto Departamento de Engenharia Electrotécnica e de Computadores 4º ano, 2º semestre http://www.fe.up.pt/~jca/feup/psd 1 Projecto de Sistemas Digitais Sistemas Digitais. Importantes? Claro! vastas áreas de aplicação custo continua a descer Um SD incorporado num equipamento deve ser (numa perspectiva industrial) bom: satisfazer a funcionalidade com fidelidade e fiabilidade barato: custo mais baixo possível, sem comprometer a qualidade Projectar um SD if it wasn t hard they wouldn t call it hardware, J.F. Wakerly ferramentas computacionais ajudam the little gray cells mas não substituem 2
Fluxo de projecto (típico) Ideia um luminoas controlador para ligar de intensidade luzes de casa sempre e que desligar anguem do cao que entra se ou chama sai da bobi casota tambem 1 - receptor um gato que se chama e tem tareco 2 - um cpu para calcular a luz 3 - interface de potência interface processador memória particionamento desenho do circuito validação mapeamento tecnológico validação D Q D Q implementação lixo teste 3 Concepção Ideia vale a pena fazer algo que já existe? talvez... clarificar e estruturar a ideia, definir especificações um produto é mais do que um sistema digital geralmente um projecto é iniciado com especificações incompletas Exequibilidade boas ideias podem não ser praticáveis custo ou risco elevado tecnologia não acessível, não dominada ou não adequada tempo de desenvolvimento demasiado longo Implementação tecnologia(s) a decidir o mais cedo possível no ciclo de projecto 4
Aspectos tecnológicos Particionamento arquitectural geralmente um sistema não cabe num único componente divisão da funcionalidade selecção dos componentes e da tecnologia de montagem? funcionalidade rapidez disponibilidade LSI número de pinos interface CPU ASIC encapsulamento fabricante(s) µp memória RAM?PCB I/O proc. co-proc. COB MCM wire-wrap 5 Selecção da tecnologia Critérios a ter em conta acessibilidade à tecnologia (projecto e fabrico) custo (protótipagem, produção) fiabilidade testabilidade rapidez evolução tamanho consumo dissipação térmica compatibilidade electromagnética resistência mecânica 6
Ferramentas computacionais CAD/CAE (computer aided design/computer aided engineering) fundamentais para projectar em tempo útil circuitos complexos não competem em qualidade com um projectista experiente (geralmente) Ferramentas CAD/CAE trabalham com representações electrónicas de SDs (modelos) alguns tipos de ferramentas... captura esquemática (mais do que desenhar o circuito lógico...) síntese (lógica, RTL, alto nível) mapeamento tecnológico desenho físico (layout), verificação de regras geométricas simulação lógica (verificação funcional) análise temporal análise eléctrica modelação e simulação de faltas geração de vectores de teste análise térmica 7 Modelos de circuitos digitais Representações electrónica de SDs usadas e transformadas por ferramentas CAD/CAE Um modelo é uma aproximação! que pode ser boa e pode ser má rigor detalhe aproximação da tecnologia a simulação de um modelo nunca é igual ao seu funcionamento real Modelos (mais frequentemente) tratados por humanos modelos estruturais (esquemáticos) detalham a estrutura do circuito, interligando componentes entre si nível do sistema, RTL, lógico ou dispositivo modelos comportamentais (HDLs, state charts, tabelas, BDDs) descrevem o comportamento do sistema não contêm informação estrutural 8
Y- chart estrutural processadores, memórias registos, muxs portas lógicas transistores dispositivo transferências entre registos expressões booleanas funções de transistores layout de transistores fluxogramas, algoritmos comportamental sistema RTL lógico níveis de abstracção células módulos, chips placas, MCMs físico 9 Especificação de um SD Tradicionalmente captura esquemática (estrutural) interligação de portas lógicas, flip-flops, componentes RTL, bibliotecas de componentes específicas de uma tecnologia anotação do desenho com atributos nomes, parâmetros de componentes, restrições para implementação captura a estrutura (física) do circuito transformado de forma optimizada para uma tecnologia alvo tabelas de verdade, expressões booleanas (comportamental) conveniente para blocos de lógica combinacional ou FSMs minimização lógica codificação de estados representação textual, tradução automática para um circuito lógico independente do meio de implementação 10
Especificação de um SD Actualmente... projecto a níveis de abstracção mais elevados representações comportamentais ao nível RTL e algorítmico linguagens normalizadas para descrição de hardware suportadas por ferramentas de síntese automática combinam modelação estrutural com comportamental permitem ao projectista abstrair-se da tecnologia alvo (não totalmente!) portabilidade e facilidade de manutenção redução do ciclo de projecto permite explorar diversas alternativas com diferentes compromissos comparando com a programação de computadores... nível de abstracção crescente código máquina assembly C, Pascal layout portas lógicas HDLs } ainda se justifica? 11 Projecto estruturado Hierarquia e modularidade conceitos semelhantes aos empregues em programação estruturada objectivos: estruturação do projecto permitir a reutilização de módulos facilitar a verificação do projecto simplificar a produção da documentação (geralmente esquecida!) quanta hierarquia? nem 1 nem 1000! como se faz em programação? porquê? critérios principais: funcionalidade e granuralidade (complexidade dos módulos) uma diferença importante da hierarquia em software: não significa reduzir a complexidade do hardware geralmente desaparece durante o percurso até ao nível lógico ou dispositivo 12
Metodologias de projecto Abordagens típicas bottom-up (capture-and-simulation) hierarquia criada de baixo para cima (lógico RTL sistema) ciclo de projecto: manual desenhar os circuitos mais simples (ou usá-los se existirem) validar com simulação esses circuitos usá-los na construção de outros circuitos mais complexos top-down (describe-and-synthesize) hierarquia criada de cima para baixo (sistema RTL lógico) ciclo de projecto automático especificar o sistema de forma comportamental sintetizar e avaliar as soluções resultantes de diferentes restrições na prática, top-down e bottom-up tocam-se! 13 Validação do projecto Simulação funcional verificação funcional da especificação ao nível mais abstracto geralmente são usados modelos unit-delay ou zero-delay verificar que é satisfeita a funcionalidade desejada se não funciona? detecção e depuração de erros (debug) problemas: como definir os vectores de simulação? como se sabe que o resultado é correcto? quão exaustivo é o teste? fontes de erro mais comuns é bom lembrar que os computadores não erram, os humanos sim mas são humanos que criam as ferramentas de software! especificações incompletas, ligações erradas ou nomes trocados uso incorrecto de ferramentas de síntese automática má organização das várias versões de um projecto (save before quit? oops!) 14
Validação do projecto Análise temporal circuitos lógicos introduzem atrasos a simulação dá resultados correctos considerando os atrasos? qual o desempenho? o que limita o desempenho? modelos de atrasos específicos de uma tecnologia dependem do circuito em que um componente se insere (fan-out) quanto mais completo é o modelo, mais complexa é a simulação tp LH, tp HL, t r, t f (mínimos, típicos e máximos) interligações também introduzem atrasos função do comprimento e da forma só são conhecidos após a implementação ao nível físico 15 Teste Teste do sistema fabricado testar para quê? minimizar ( 0%) o número de sistemas defeituosos vendidos detectar e diagnosticar defeitos de fabrico melhorar o sistema ou o processo produtivo como testar? construir um modelo de faltas do circuito criar vectores de simulação que as consigam detectar saídas diferentes na presença ou ausência da falta ferramentas para ATPG - Automatic Test Pattern Generation teste é uma fatia importante do custo de produção projecto orientado para a testabilidade (DFT - Design for Testability) auto-teste (BIST - Built-in Self Test) teste de PCB (boundary scan test, norma IEEE 1149.1) 16
Linguagens de descrição de hardware Modelação de um circuito (digital) descrições comportamentais permitem nível elevado de abstracção metodologia de projecto top-down: ferramentas de síntese automática representação textual: portabilidade, edição e documentação a favor do esquemático: uma figura diz mais do que mil palavras um esquema captura melhor a ideia estrutural ferramentas gráficas front-end produzem descrições em HDLs editores de esquemático: netlist em HDL (estrutural, gate-level ou RTL) editores de diagramas de estados: descrições comportamentais sintetizáveis duas perspectivas na construção de um modelo descrever o seu funcionamento apenas para simulação construir uma descrição sintetizável ($monitor( ) não é sintetizável!) um modelo sintetizável deve descrever bem o seu funcionamento subsets das linguagens e regras de modelação dependem das ferramentas 17 HDLs - exemplos VHDL - VHSIC Hardware Description Language (IEEE 1076 93) desenvolvida para simulação, usada para síntese, fortemente tipada Verilog (IEEE 1364 95) mais simples do que VHDL, poucos tipos de dados, próxima de C ABEL - Advanced Boolean Equation Language (TM Data I/O) programação de PLDs, equações lógicas, descrição de FSMs HardwareC (univ. Berkeley) derivada da linguagem C, orientada para a representação de hardware ISPS - Instruction Set Processor Specification descrição do conjunto de instruções de processadores Silage (IMEC) aplicações de DSP, pouco controlo, data-flow EDIF - Electronic Data Interchange Format (IEEE standard para representação de circuitos electrónicos ao nível estrutural XNF - Xilinx Netlist Format (TM XILINX) proprietária da XILINX para descrever netlists, estrutural, permite hierarquia 18
Verilog e VHDL - história VHDL 80: por necessidade de normalização, documentação e portabilidade, e DOD funda projecto para criar linguagem de programação para descrever hardware 83: início do desenvolvimento do VHDL (IBM, Texas, Intermetrics) 87: o DOD impõe que todos os SDs fossem descritos em VHDL; standard IEEE 1076; os sistemas electrónicos do F-22 foram um dos primeiros projectos em VHDL 93: VHDL é revisto e adoptado como o standard IEEE 1076 93 96: adopção generalizada por ferramentas EDA; package para ferramentas de síntese (IEEE 1076.3); modelação de bibliotecas para ASIC e FPGA (IEEE 1076.4) Verilog 81: Gateway Design Automation, Philip Moorby cria GenRad HDL e o simulador HILO 83: Gateway lançou a linguagem Verilog HDL e um simulador de Verilog 85: linguagem e simulador são enriquecidos (Verilog-XL) 87: Synopsys adopta Verilog como formato de entrada para ferramentas de síntese 89/ 90: Cadence compra Gateway e separa o simulador da linguagem; a linguagem é libertada para o domínio público; é criado o OVI (Open Verilog International) 93: neste ano, de todos os circuitos submetidos a fundições de silício, 85% foram desenvolvidos e submetidos em Verilog. 95: Verilog é revisto e adoptado como o standard IEEE 1364 19 Verilog e VHDL - comparação capacidade de modelação semelhante para modelos estruturais VHDL oferece melhor suporte para modelos abstractos e modelos de atrasos Verilog tem melhores construções para modelar ao nível lógico e primitivas de bibliotecas de ASICs e FPGAs tipos de dados VHDL suporta tipos de dados abstractos criados pelo utilizador em Verilog os tipos são muito simples e mais próximos do hw (wire e reg) aprendizagem VHDL é fortemente tipada, menos intuitiva, mais verbosa Verilog é mais simples e fácil de ler; código é mais curto do que em VHDL parameterização VHDL tem construções para parametrizar número de bits, replicar estruturas e configurar modelos Verilog suporta apenas modelos com parâmetros, instanciação com redefinição de parâmetros 20
VHDL VHDL-Verilog (comportamental) library IEEE; use IEEE.STD_Logic_1164.all; entity MUX_2_1 is port(s1,a1,b1,s2,a2,b2,s3,a3,b3:in std_logic; Y1,Y2,Y3:out std_logic); end entity MUX_2_1; Verilog module MUX_2_1(S1,A1,B1,Y1, S2,A2,B2,Y2, S3,A3,B3,Y3); input S1,A1,B1,S2,A2,B2,S3,A3,B3; output Y1,Y2,Y3; reg Y2,Y3; architecture COND_DATA_FLOW of MUX_2_1 is begin Y1 <= A1 when S1= 1 else B1; TWO_2_1_MUXES: process(s2,a2,b2,s3,a3,b3) begin Y2<=B2; if (S2= 1 ) then Y2<=A2; endif; if (S3= 1 ) then Y3<=A3; else Y3<=B3; endif; end process TWO_2_1_MUXES end architecture COND_DATA_FLOW; assign Y1=S1?A1:B1; always @(S2 or A2 or B2 or S3 or A3 or B3) begin Y2=B2; if (S2) Y2=A2; if (S3) Y3=A3; else Y3=B3; end endmodule 21 VHDL VHDL-Verilog (estrutural) library IEEE; use IEEE.STD_Logic_1164.all; entity HALF_ADDER is port(a,b:in std_logic; sum,carry:out std_logic); end entity HALF_ADDER; Verilog module HALF_ADDER(a,b,sum,carry); input a,b; output sum,carry; xor X1(sum,a,b); and A1(carry,a,b); architecture STRUCT of HALF_ADDER is endmodule component xor2 port(a,b:in std_logic; c:out std_logic); end component; component and2 port(a,b:in std_logic; c:out std_logic); end component; begin X1: xor2 port map(a=>a,b=>b,c=>sum); A1: and2 port map(a=>a,b=>b,c=>carry); end STRUCT; 22
Modelação em HDL Modelo sintetizável vs. modelo não sintetizável ferramentas de síntese automática inferem a estrutura de um circuito o modelo (comportamental ou estrutural) vai ser hardware regras, restrições e recomendações das ferramentas de síntese como é interpretado e traduzida a descrição em HDL simulação e implementação devem concordar construções específicas da tecnologia de implementação modelos não sintetizáveis não são traduzidos para hardware definem estímulos para simulação, e permitem a monitorização de sinais modelam o comportamento de outros circuitos para simulação do sistema circuito de relógio memórias ou CPUs circuitos de interface (por exemplo conversores A/D ou D/A) 23 Modelação em HDLs recomendações gerais Antes de iniciar a construção do modelo definir a arquitectura e estruturação do projecto (particionamento) ferramentas de síntese não processam bem circuitos infinitamente grandes! Escrever o código de modo a reflectir a arquitectura estruturado em módulos e funções, ter em mente a reusabilidade favorecer a legibilidade: nomes, comentários, parêntesis, parâmetros Garantir a precisão da simulação deve traduzir fielmente o comportamento do hardware gerado modelar correctamente o comportamento das partes não sintetizáveis 24
Construção de modelos sintetizáveis (em Verilog, para Synopsys FPGA Express) Atrasos são sempre ignorados o seu uso pode tornar incoerente a simulação e o comportamento do circuito Sinais do tipo reg nem sempre são traduzidos em registos podem ser traduzidos em wire, D-flip-flops ou latches transparentes Atribuição contínua (assign sum=a^b^cin;) traduzida para um bloco de lógica combinacional Operadores aritméticos e lógicos apenas para inteiros sem sinal, dimensão dos resultados depende dos operandos são gerados circuitos combinacionais que os implementam podem ou não ser partilhados para diferentes operações do mesmo tipo os operadores / e % só podem ser usados com operandos constantes 25 Construção de modelos sintetizáveis (em Verilog, para Synopsys FPGA Express) always - duas formas always @(posedge...): os sinais tipo reg são traduzidos para Dffs always @(posedge clock or negedge reset) begin if (!reset) acc = 8 b00000000; else acc = data_in; end reset assíncrono; tem de ser avaliado no primeiro if(...) always @(a or b or...): sinais do tipo reg são latches ou wires always @(a or sel) begin if (sel) out = a; end out é uma latch always @(a or b or sel) begin if (sel) out = a; else out = b; end lista de sensibilidades pode ser omitida só para síntese out é uma função combinacional de sel, a e b 26
Construção de modelos sintetizáveis (em Verilog, para Synopsys FPGA Express) inferência de latches em construções always - regra geral latches são geradas para sinais do tipo reg que não sejam completamente especificados para todos os casos de instruções condicionais (por exemplo if (sel) out = a; e quando sel==0? ) no caso contrário é apenas gerado um circuito combinacional sem elementos de memória latches podem ser indesejáveis aumento do espaço ocupado degradação do desempenho ferramentas de síntese ignoram a lista de sensibilidades o simulador não! Só avalia o bloco quando algum sinal muda se não for usada há (geralmente) incoerência entre a simulação e o circuito sintetizado. 27 Construção de modelos sintetizáveis (em Verilog, para Synopsys FPGA Express) inferência de buffers de 3-estados atribuindo z a um sinal (do tipo reg) module three_state(in, out, en); input in, en; output out; reg out; always @( in or en) if (en) out = in; else out = 1 bz; endmodule assign out = en? in : 1 bz; 28
Construção de modelos sintetizáveis (em Verilog, para Synopsys FPGA Express) ciclos for(...): só são suportadas 4 formas: crescente ou decrescente de passo constante (...;index=index±step) condição de terminação com <, >, <= ou >= always @( a or b or carry ) for(i=0;i<=31;i=i+1) begin s[i] = a[i]^b[i]^carry; carry = a[i]&b[i] a[i]&carry b[i]&carry; end while (...): cria um ciclo combinacional; deve ser quebrado com @(posedge clock) always @( posedge clock ) while (x<y) begin @(posedge clock); x=x+z; end 29 Síntese de Sistemas Digitais estrutural processadores, memórias registos, muxs portas lógicas transistores arquitectural alto nível dispositivo lógica circuito layout de transistores comportamental fluxogramas, algoritmos transferências entre registos expressões booleanas funções de transistores sistema lógico RTL níveis de abstracção físico células módulos, chips placas, MCMs 30
Problemas de síntese Síntese estrutural transformação do domínio comportamental para o domínio estrutural acrescenta detalhe estrutural dependente da tecnologia mas não define a realização física sujeita a restrições: estimativas de área, desempenho ou potência Síntese física transformação do domínio estrutural para o domínio físico nos 4 níveis de abstracção (Y-chart) dispositivo: produção dos desenhos das máscaras de células (layout) célula: tradução de portas lógicas em agregados de células e interligações RTL: organização física de módulos (floorplanning) sistema: particionamento em componentes, PCBs, MCMs 31 Síntese de Alto Nível ou síntese RTL origem descrição comportamental ao nível RTL: um algoritmo variáveis (registos) operações entre variáveis (aritméticas, lógicas ou deslocamento) decisões (if-then-else, ciclos) restrições tempo de execução: número de ciclos de relógio e frequência do relógio espaço ocupado: número e tipo de elementos, número de células ou área destino - arquitectura básica um datapath ao nível RTL (síncrono) rede de registos, multiplexers, unidades funcionais e barramentos uma unidade de controlo produz uma sequência de sinais de selecção e abilitação para o datapath 32
Síntese de Alto Nível descrição comportamental (algorítmica, RTL) estrutura RTL registos while (x<a) begin xl=x+dx; ul=u-(5*x*u*dx)-(3*y*dx); yl=y+(u*dx); x=xl; u=ul; y=yl; end mux mux R R R mux mux mux * + - unidade de controlo muxs e barramentos datapath unidades funcionais 33 Síntese de alto nível medidas de qualidade Objectivos importantes simplificar o hardware e minimizar o tempo de execução minimizar tempo explorar paralelismo complicar hardware Medidas de qualidade da solução RTL avaliadas antes da implementação física, baseadas em estimações número e complexidade das unidades funcionais e registos número de ciclos de relógio, período de relógio complexidade da unidade de controlo espaço ocupado pelas interligações, barramentos e multiplexers potência consumida área Compromisso área-tempo espaço de soluções típico tempo 34
Síntese de alto nível Exemplo: 3 adições independentes - duas soluções alternativas: a x1 z b x2 t y1=a+b; y2=x1+x2; y3=z+t; mux mux a b x1 x2 z t + + + + R R R y1 y2 y3 uma unidade funcional 3 ciclos espaço ocupado pelo datapath? complexidade da unidade de controlo? duração do ciclo de relógio? potência consumida? testabilidade? R R R y1 y2 y3 3 unidades funcionais 1 ciclo 35 Síntese de Alto Nível problemas transformações de alto nível semelhantes às realizadas pelos compiladores propagação de constantes, simplificações algébricas, optimização de ciclos sequenciamento (scheduling) atribuição das operações a ciclos de execução (ciclos de relógio) minimizar o número de ciclos necessário para completar a operação explorar o paralelismo natural do algoritmo alocação e colagem (allocation e binding) selecção de registos e de um conjunto de unidades funcionais minimizar a complexidade do hardware escolher entre diversos compromissos de unidades funcionais depende do sequenciamento e influencia-o colagem das operações a unidades funcionais que as realizem uma operação pode demorar diferentes tempos em diferentes FUs 36
Transformações de alto nível Compilação da descrição comportamental representação interna baseada em grafos DFG (Data Flow Graph) representa as operações e as dependências entre dados e resultados b a c y=a+b; z=y*c; + k=a+y; y * + k z CFG (Control Flow Graph) representa a sequência de controlo de blocos de operações if (a==b) z=y+c; else k=a+y; z=y+c a==b k=a+y 37 Sequenciamento ASAP e ALAP ASAP - As Soon As Possible atribuir cada operação ao primeiro ciclo ciclo 1 * * * * + ALAP - As Late As Possible atribuir cada operação ao último ciclo ciclo 1 * * ASAP com restrições, fixando o número e tipo das unidades funcionais ciclo 1 * * + 2 * * + < 2 * * 2 * * < 3-3 - * * + 3 - * * 4-4 - + < 4 - + 4 multiplicadores 1 subtractor 1 somador 6 unidades funcionais 2 multiplicadores 2 subtractores 1 somador 5 unidades funcionais 2 multiplicadores 1 subtractor 1 somador 4 unidades funcionais 38
Sequenciamento heurísticas Lista de prioridades (list scheduling) operações ordenadas por função de prioridade caminho mais longo, número de sucessores, mobilidade das operações em cada iteração são sequenciadas as operações prontas uma operação pronta tem todos os antecessores sequenciados pela ordem ditada pela lista de prioridades FDS - Force Directed Scheduling distribui as operações de forma a balancear a utilização das Fus baseada na probabilidade de cada operação ser atribuída a cada ciclo requer o conhecimento de ASAP e ALAP: mobilidade determina um sequenciamento num número fixo de ciclos 39 Alocação e colagem Conhecido um sequenciamento escolher um conjunto de unidades funcionais que realizem as operações nos ciclos determinados pelo sequenciamento em cada ciclo uma FU só pode realizar uma operação Formulação básica determinação do número mínimo de sub-grafos completos grafo de compatibilidades: operações 1 e 3 são compatíveis FU1 1 3 2 6 4 FU2 5 FU3 40
Sequenciamento e alocação optimização conjunta Programação Linear Inteira (PLI) formulação básica baseada em variáveis inteiras binárias: xij = 1 se a operação i é atribuída ao ciclo j 0 caso contrário restrições no número de ciclos ou de unidades funcionais computacionalmente pesado Métodos heurísticos arrefecimento simulado (simulated annealing) flexibilidade para tratar restrições complexas associadas às FUs necessário número elevado de iterações, soluções sub-óptimas computacionalmente pesado algoritmos genéticos 41 Unidades funcionais modelo básico uma FU só faz um tipo de operação num ciclo modelos mais realistas diferentes tipos de operações durações dependentes do tipo de operação disponibilidade de diferentes implementações para a mesma operação diferentes operadores pipelined unidades funcionais reconfiguráveis dinâmicamente 42
Verificação do projecto Tradicionalmente verificação era (e por vezes ainda é) feita com um protótipo do sistema é dispendioso, demora tempo a ser construído protótipos de CIs construídos com componentes discretos não são fiéis é uma implementação do sistema, funciona próximo da velocidade real permite verificar o sistema com estímulos complexos de sistemas físicos Verificação por simulação protótipo substituído por um modelo do sistema, permitindo: verificar condições de erro (sinais não ligados, conflitos de barramentos) verificar o sistema com diferentes modelos de atrasos dos componentes observar o estado de qualquer nó ou componente do sistema forçar qualquer sinal a estados desejados iniciar a simulação em qualquer estado controlar de forma precisa a temporização de eventos assíncronos construir o conjunto de estímulos para testar o sistema fabricado Baseado em Digital Systems Testing and Testable Design, capítulo 3, M. Abramovici, M.A. Breuer, A.D. Friedman, Computer Science Press, 1990 43 Simulação estímulos simulador resultados? modelo especificação 44
Simulação Verificação do projecto comparar o funcionamento de um modelo do sistema com os resultados esperados pela especificação verificar se a operação do sistema é: correcta e independente do estado inicial dos elementos de memória insensível a variações dos atrasos dos componentes livre de contenções, oscilações, entradas ilegais ou estado suspensos...e também: estudar e avaliar compromissos de custo e desempenho avaliar alterações ao projecto produzir documentação (por exemplo diagramas temporais) 45 Simulação - problemas Como se constroem estímulos? não há procedimentos formais para gerar estímulos processo heurístico, baseado na intuição e conhecimento do sistema não é praticável a verificação exaustiva um circuito com 75 entradas 2 75 testes (1.2x10 9 anos@1µs/teste) Como se sabe se os resultados são correctos? só verifica a funcionalidade exercitada pelos estímulos Estímulos para verificação e para teste verificação: detectar e diagnosticar erros de projecto não é possível enumerar todos os erros de projecto teste: detectar e diagnosticar defeitos de fabrico defeitos de fabrico (faltas) são modelados como erros lógicos 46
Simulação - compiled-code simulação compilada (compiled-code) executa um modelo compilado do circuito o circuito é traduzido em instruções executáveis por um processador simulador oferece suporte para fornecer estímulos de simulação orientada para verificação funcional, não suporta análise temporal o comportamento de componentes é modelado por instruções máquina ou subrotinas exemplo (modelo estrutural): para cada transição de clk (código 8086): A B Y clk D Q Z F MOV AL,A AND AL,B MOV Y,AL MOV AL,B AND AL,Y NOT AL MOV Z,AL MOV F,AL 47 Simulação - event-driven simulação de eventos (event-driven) usa um modelo estrutural do circuito para gerar e propagar eventos eventos nas entradas são produzidos pelos estímulos eventos nos restantes nós são gerados pela avaliação dos componentes modelo do circuito é mantido em estruturas de dados um evento é uma mudança do estado de um sinal num tempo dado os componentes que usam esse sinal são activados e avaliados as mudanças resultantes das avaliações geram novos eventos outros eventos: controlo do simulador, monitorização de sinais em Verilog: $finish; $display(...), $monitor(...) permite processar estímulos e sinais assíncronos análise do comportamento com os atrasos dos componentes avaliação do funcionamento com eventos não sincronizados (interrupções) 48
Simulação event-driven - fluxograma todos os eventos produzidos pelos estímulos já foram introduzidos na lista até ao primeiro evento pendente actualiza o valor dos sinais modificados pelos eventos deste tempo propaga o valor dos sinais activos até aos componentes que os usam e activa esses componentes a avaliação dos componentes activados produz novos eventos em tempo futuro (atrasos dos componentes) ou no mesmo tempo início avançar tempo de simulação extrair eventos para este tempo actualiza sinais activos propaga mudanças dos sinais avalia componentes activados introduz os novos eventos na lista não há eventos fim 49 Simulação - o valor lógico desconhecido Quando um circuito lógico é ligado, memórias e flip-flops ficam com valores lógicos não definidos é necessário prever um mecanismo de iniciação (reset) geralmente associado ao power-up iniciar os conteúdo de registos e RAMs iniciar máquinas de estados num estado determinado Valor lógico desconhecido: u representa o estado de sinais lógicos não iniciados resultantes de não iniciação de registos e memórias indefinição do estado de entradas primárias do circuito a simular é processado juntamente com os valores lógicos 0 e 1 operadores lógicos são generalizados para tratar o valor lógico u 50
Simulação - o valor lógico desconhecido Generalização dos operadores lógicos valor u é representado pelo conjunto {0,1} u pode ser qualquer elemento do conjunto que o representa 1 e 0 são representados pelos conjuntos {1} e {0}, respectivamente uma operação lógica B entre p e q, com p,q {0,1,u} é definida como uma operação entre os conjuntos que representam p e q o resultado é a reunião dos resultados de todas as operações B entre todos os elementos dos dois conjuntos and(0,u)=and({0},{0,1})={and(0,0),and(0,1)}={0,0}={0}=0 or(0,u)=or({0},{0,1})={or(0,0),or(0,1)}={0,1}=u para um operador unário U, o resultado U(q) é a reunião de todos os resultados de U aplicada a cada elemento do conjunto que representa q not(u)=not({0,1})={not(0),not(1)}={1,0}=u 51 Simulação - o valor lógico desconhecido Tabelas de verdade para AND, OR e NOT AND 0 1 u 0 0 0 0 1 0 1 u u 0 u u OR 0 1 u 0 0 1 u 1 1 1 1 u u 1 u NOT 0 1 u 1 0 u Perda de informação propagando o valor lógico u u 0 1 u u u desconhecidos, mas sempre com valores contrários u é sempre 1! não, não é factorial... não serve usar u e u u Q u Q 1 Q u u Q desconhecido 52
Simulação - o valor lógico Z Modelação de buffers com saída tristate E Tabela de verdade: I I E 0 1 u 0 Z 0 {0,Z} 1 Z 1 {1,Z} u Z u {u,z} O se E=1, O=I se E=0, O=Z Tabela de verdade de um barramento com 2 entradas Um sinal com o nível lógico Z pode ser forçado com 1 ou 0 (pull-up ou pull-down) é sempre interpretado como u por uma entrada a b o a b 0 1 Z u 0 0 u 0 u 1 u 1 1 u Z 0 1 Z u u u u u u em que casos pode ocorrer contenção no barramento? 53 Simulação - modelos de atrasos atraso de transporte um atraso na propagação do nível lógico atrasos de subida e de descida diferentes atrasos para as transições 0-1 e 1-0 atrasos ambíguos mínimos e máximos para os atrasos 0-1 e 1-0 atraso inercial duração mínima de uma entrada para ser reflectida na saída setup time e hold time para flip-flops setup time: tempo mínimo para D estar estável antes de clock hold time: tempo mínimo para D permanecer estável após clock 54
Prototipagem Prototipagem de Sistemas Digitais construção física dispendiosa e demorada (componentes off-the-shelf) fase de protótipo: prováveis iterações ao projecto custos elevados e tempos longos de re-desenho recurso a dispositivos programáveis do tipo PLA 1985/86: Xilinx introduz nova família de PLDs FPGA - Field Programmable Gate Array agregados regulares de blocos lógicos configuráveis blocos configuráveis de complexidade reduzida configuração rápida (escrita em SRAM, volátil, in-circuit) Sistemas reconfiguráveis baseados em FPGAs construídos uma vez, re-utilizáveis um número arbitrário de vezes prototipagem, circuitos para aplicações específicas, computadores dedicados 55 FPGA - Field Programmable Gate Array A0 S0 A0 B0 S0 B0 S1 S1 A1 B1 S2 A1 S2 B1 bloco lógico configurável interruptores programáveis interligações bloco de entrada/saída 56
FPGAs - características Programação eléctrica anti-fuse (programador, definitiva) EPROM, EEPROM (programador ou in-circuit, não volátil) SRAM (in-circuit, volátil) Arquitecturas de FPGAs correntes Xilinx Actel Algotronix Altera bloco lógico configurável 57 FPGAs - arquitecturas de blocos configuráveis Look-up tables A B C D RAM multiplexers mux portas lógicas e muxs A B A B mux mux pares de transistores mux blocos PLA 58
FPGAs - aplicações circuitos para aplicações específicas (ASICs) substituir um circuito integrado fabricado por medida emulação e prototipagem de hardware acelerar simulação (3 a 5 ordens de magnitude) emulação de sistemas mistos digital-analógico processadores dedicados (Custom Computing Machines) especificamente desenhados para acelerar partes de aplicações paralelismo das operações natureza das operações (por exemplo manipulação de bits) associados a processadores convencionais uma plataforma reconfigurável (física) para diferentes processadores lista de sistemas baseados em FPGAs consultar http://www.io.com/~guccione/hw-list.html 59 FPGAs - Xilinx XC4000 Família XC4000 da XILINX (http://www.xilinx.com) considerado um standard industrial (versão HardWire TM ) configuração por SRAM blocos lógicos configuráveis baseados em LUTs de 4 e 3 entradas abundância de flip-flops arquitectura do tipo array, canais de interligação abundantes capacidade de implementar blocos de RAM circuitos dedicados para geração e propagação de carry interconexões hierárquicas capacidade de readback (configuração e nós internos) capacidades actuais até 500 K portas lógicas equivalentes XC4085XLA-08: 85 K gates = 64.000$00 (Outubro 1998) 60
Síntese do datapath S.D. - controlo e processamento de informação unidade de processamento (datapath) processamento e comunicação de dados registos, ALUs, outros operadores dedicados (FUs), barramentos controlo activa os elementos do datapath, define as operações a realizar FSMs, controladores microprogramados Control dominated sistemas onde predominam as estruturas de controlo controlador de microondas, semáforos, microprocessador,... Data flow dominated sistemas onde predomina o datapath, controlo reduzido aplicações de DSP, unidades de cálculo dedicadas 61 Sistemas Digitais síncronos Sistema síncrono simplicidade em separar o controlo do datapath todos os registos têm o mesmo sinal de relógio o datapath efectua operações de registo a registo transferências entre registos na transição de relógio em cada ciclo de relógio o controlador define: clk controlo FUs registos que registos são carregados agulhamento de barramentos e multiplexers operações a realizar pelas unidades funcionais mux R mux R mux mux mux + * / sqrt and or R 62
Datapath síncrono Lógica combinatória entre registos entrada assíncrona entrada síncrona saída assíncrona saída síncrona clock T delay1 T delay2 T delay3 frequência de relógio freq. clock < 1 / max(t delay1,t delay2,t delay3 ) controlo do datapath também condiciona o desempenho clock controlo datapath 63 Datapath síncrono todos os registos têm o mesmo relógio elevado fanout: necessário buffers para distribuir o relógio problemas clock skew: variação da fase do relógio em diferentes registos atrasos introduzidos pelas interligações, só conhecidos após routing circuitos dedicados para distribuir relógio (p.ex. em FPGAs) carregamento condicional de registos (abilitação ou enable) não usar gated clocks (depende da tecnologia de implementação) flip-flops com controlo clock enable síncrono necessário garantir tempos de hold e setup dos flip-flops tratamento de entradas assíncronas (p.ex. interrupções) análise de metaestabilidade sincronização com o relógio circuitos CMOS consomem energia (quase apenas) nas transições 64
Datapath síncrono - clock skew variação da fase do relógio em diferentes registos R1 R2 R1 R2 clk clk atraso clk1 clk clk R1 a b c R2 x a b clk1 R1 a b c R2 x b c atraso 65 Datapath síncrono - clock skew Motivado por assimetria do circuito de relógio características físicas das ligações (comprimento, RC) R1 R2 clk clk1 diferente fanout R1 R2 R3 R4 clk clk1 lógica combinatória no caminho do relógio R1 R2 clk ce clk1 gated clock 66
Datapath síncrono - clock skew Em FPGAs as interligações programáveis introduzem atrasos importantes difícil (mas não impossível) equilibrar os atrasos de diferentes nets rede de interligações dedicadas para distribuir sinais de relógio também servem para outros sinais com elevado fanout exemplo: na família XC4000E (consultar o databook ) 4 buffers primários (BUFGP) e 4 buffers secundários (BUFGS) um par de buffers em cada canto do die (TL, TR, BL e BR) cada buffer pode alimentar as entradas clk de todos os FFs com skew mínimo não utilizar um desses buffers para distribuir o relógio é FATAL! no ambiente de síntese da XILINX (Foundation+Express) são identificados os sinais de relógio: sinais que alimentam entradas clk de FFs é alocado um buffer global (BUFGP ou BUFGS) para cada um não podem existir mais de 8 sinais de relógio diferentes 67 Datapath síncrono - gated clock Carregamento condicional de um registo solução errada: usar um AND para deixar ou não passar o clock ce clk R solução correcta clock enable síncrono ce 0 1 clk ce.clk flip-flops primitivos com controlo clock enable R clk ce ce.clk R1 a b? R1 é carregado duas vezes! Só funciona se ce ocorrer antes de clk. Como é possível garantir? Se ce é produzido por uma máquina de estados síncrona com clk, ce é mudado sempre após clk. Problema adicional: o atraso introduzido pela porta AND 68
Datapath síncrono - gated clock Solução (mais) segura para um gated clock controlo ce1 ce2 clk clk gclk1 gclk2 portas NAND com atrasos idênticos atrasos iguais de clk até cada NAND... e de cada NAND até aos buffers garante clock skew mínimo clk sinais ce gerados na unidade de controlo unidade de controlo síncrona com clk em FPGA requer routing cuidado clk ce gclk = ce.clk 69 Datapath síncrono - gated clock Outra solução segura: registar os sinais enable controlo en1 en2 ens1 D Q gclk1 ens2 gclk2 D Q clk clk en ens gclk 70
Síntese do datapath - pipelining datapath síncrono (não-pipelined vs. pipelined) não-pipelined: uma operação por ciclo de relógio: f clk oper/s clk reg in reg out T delay di0 di1 di2 di3 di4 X do0 do1 do2 do3 do4 di clk reg in lógica combinatória reg out do pipelined: partir o circuito lógico e inserir registos T delay clk reg in reg0 reg1 reg out Tp delay max di0 di1 di2 di3 di4 X d0 d1 d2 d3 d4 X X d0 d1 d2 d3 X X X do0 do1 do2 di clk lógica combinatória reg in reg0 reg1 reg out do Latência: 3 ciclos clk Tp delay max 71 Síntese do datapath - pipelining No circuito pipelined Tp delay max menor do que T delay Tp delay max é o maior atraso de uma partição do circuito combinatório define uma frequência de clk maior do que para o circuito combinatório 3xTp delay max maior do que T delay para além da lógica combinatória há atrasos introduzidos pelos registos um resultado demora 3 períodos de clk a aparecer na saída é consumido um dado e produzido um resultado em cada clk aumento de desempenho para sequências de operações iguais mas não compensa para realizar uma única operação. 72
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 nem todos os operadores disponíveis FPGA Express suporta apenas divisões entre constantes (!) arquitecturas dos operadores com poucas alternativas FPGA Express só constrói multiplicadores unsigned 73 Síntese do datapath - operadores aritméticos Somadores e subtractores ripple carry propagação do carry limita a rapidez de cálculo resultado garantido após o maior tempo de propagação do carry carry select somador dividido em secções, cada secção contém 2 somadores de k bits exemplo: somador de 12 bits em secções de 4 bits: A 11-8 B 11-8 A 7-4 B 7-4 A 3-0 B 3-0 C 11,1 4 bit add 1 C 7,1 4 bit add 1 C 3,1 4 bit add 1 C 11 S 11-8 C 11,0 4 bit add 0 S 7-4 C 7,0 4 bit add 0 S 3-0 C 3,0 4 bit add 0 Kay Hwang, Computer Arithmetic - Principles, Architecture and Design, John Wiley & Sons, 1990 A 11-8 B 11-8 C 3,1 A 7-4 B 7-4 C 3,0 CS CS C C 7,1 C 7 4 C 7,0 C 3,1 C 3,0 A 3-0 B 3-0 C -1 74
Síntese do datapath - operadores aritméticos Somadores e subtractores (cont.) carry generate, propagate, lookahead generate G i = A i. B i propagate P i = A i B i significa que o andar i propaga o carry que lhe chega equações do somador escrevem-se S i = A i B i C i-1 = P i C i-1 C i = A i.b i + A i.c i-1 + B i.c i-1 significa que o carry é gerado no andar i = A i.b i + (A i B i ). C i-1 = G i + P i.c i-1 os carry de todos os andares podem ser obtidos em paralelo C k = G k + G k-1.p k + G k-1.p k-1.p k +... + C -1.P 0.P 1.P k 75 Síntese do datapath - operadores aritméticos Somadores e subtractores (cont.) 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 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, um ripple carry do que carry select ou lookahead carry arquitecturas mais eficientes com portas complexas CMOS ou transistores 76
Síntese do datapath - operadores aritméticos Multiplicação binária multiplicação de números com sinal x sem sinal 1101 (13) 0101 (5) 1101 complemento para dois (-3) (5) 0000 1101 0000 01000001 (65-15) 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 77 Síntese do datapath - operadores aritméticos 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 Mr k = = 1 Acc[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 Mr k Acc oper. 1101 0101 - - 00000 0000 1101 0101 0 1 01101 0000 add 00110 1000 shift 1101 0101 1 0 00110 1000 add 00011 0100 shift 1101 0101 2 1 10000 0100 add 01000 0010 shift 1101 0101 3 0 01000 0010 add 00100 0001 shift 78
Síntese do datapath - operadores aritméticos 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 shr ld Acc shr ld n Mr Mr 0 ld Md m m+1 m n m bit adder P[m+n-1:0] 79 Síntese do datapath - operadores aritméticos Multiplicação binária em complemento para dois se só for negativo o multiplicando basta estender o sinal dos produtos parciais extensão de sinal 1101 x 0101 1111101 000000 11101 0000 11110001 (-3) (5) (-15) 80
Síntese do datapath - operadores aritméticos 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 de números em complemento para dois para um número positivo com m bits valor(x) = 0 + X m-2.2 m-2 + + X 1 2 1 + X 0.2 0 se for negativo valor(x) = -2 m + 2 m-1 + X m-2.2 m-2 + + X 1 2 1 + X 0.2 0 para os dois casos valor(x) = - X m-1.2 m-1 + X m-2.2 m-2 + + X 1 2 1 + X 0.2 0 bit de sinal X m-1 tem peso -2 m-1 81 Síntese do datapath - operadores aritméticos Multiplicação binária em complemento para dois se o multiplicador for negativo 0101 (5) x 1101 (-3) se o multiplicador 0101 0000 for positivo, o último + 0101 produto parcial é zero! 0011001-0101 11110001 (-15) e se ambos negativos 1101 (-3) x 1101 (-3) 1111101 000000 extensão de sinal + 11101 11110001-11101 00001001 (+9) somar os 3 produtos parciais subtraír o último produto parcial implementação: fácil incluir no multiplicador shift-add! somar os 3 produtos parciais subtraír o último produto parcial 82
Síntese do datapath - operadores aritméticos Multiplicador shift-add avaliação de k bits do multiplicador de cada vez (não sobrepostos) número de ciclos reduzido k vezes (shift de k bits de cada vez) exemplo para k=2 Mr1 Mr0 somar a Acc 0 0 0 0 1 Md 1 0 2.Md 1 1 2.Md+Md aumento da complexidade do somador Acc m é necessário somar 3.Md somadores em cascata, tempo de atraso superior shr ld n Mr Mr 1 ld Mr 0 m m bit adder Md m m+1 bit adder m+2 2.Md m+1 83 Síntese do datapath - operadores aritméticos Multiplicação - recodificação de Booth pela propriedade: 2 i+k - 2 i = 2 i+k-1 + 2 i+k-2 + 2 i+1 + 2 i pode substituir-se 1 0 0 1 1 1 0 0 1 por 1 0 1 0 0 1 0 0 1 2 i+k - 2 i objectivo: eliminar sequências de uns 00 10 11 10 11 01 10 00 10 11 10 11 10 10 00 10 11 11 00 10 10 00 11 00 01 00 10 10 01 01 00 01 00 10 10 factores: 0 2 3 2 3 1 2 factores: 1-1 0-1 0-2 -2 permite evitar em cada ciclo a soma de 3 operandos (2.Md+Md) 84
Síntese do datapath - operadores aritméticos 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 0011 1101 1001 = 512 + 256 + 128 + 64 + 16 + 8 + 1 = 985 0100 0110 1011 = 1024-64 + 32-8 + 2-1 = 985 tabela de recodificação, analisando 2 bits de cada vez é necessário acrescentar um bit zero à direita do lsb: b -1 =0 b i b i-1 z i valor caso 0 0 0 0 cadeia de zeros 0 1 1 +1 fim dos uns 1 0 1-1 inicio dos uns 1 1 0 0 cadeia de uns 85 Síntese do datapath - operadores aritméticos 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) x (-5) = +35-7 = 1001-5 = 1011 recodificar -5 (ver tabela) 1011 0 1011 0 1011 0 1011 0 1101 1001 x 1101 00000111 0000000 111001 + 00111 00100011-7 x -5 -(-7)x2 0 +(0)x2 1 +(-7)x2 2 + -(-7)x2 3 7-28+56=35 86
Síntese do datapath - operadores aritméticos Multiplicador de Booth iterativo multiplicador Mr acrescentado de um bit à direita: Mr -1 = 0 comparados dois bits de Mr de cada vez se b i = b i-1 desloca produto parcial (11 ou 00 0) se b i < b i-1 soma Md e desloca produto parcial (01 1) se b i > b i-1 subtrai Md e desloca produto parcial (10 1) deslocamento aritmético do produto exemplo: Mr = -3 (1101) Md = +7 (0111) Mr Mr -1 opr. produto 1101 0 1-7 1001 0000 1100 1000 1101 0 1 +7 0011 1000 0001 1100 1101 0 1-7 1010 1100 1101 0110 1101 0 0 +0 1101 0110 1110 1011 87 Síntese do datapath - operadores aritméticos 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 tabela de recodificação b i b i-1 b i-2 z i z i-1 valor caso 0 0 0 0 0 cadeia de zeros 0 0 1 1 +1 fim de uns 0 1 0 1 +1 1 isolado 0 1 1 1 +2 fim de uns 1 0 0 1-2 início de uns 1 0 1 1-1 zero isolado 1 1 0 1-1 início de uns 1 1 1 0 0 cadeia de uns 88
Síntese do datapath - operadores aritméticos Multiplicação paralela (unsigned) x a4 a3 a2 a1 a0 b4 b3 b2 b1 b0 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 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0 89 Síntese do datapath - operadores aritméticos array multiplicador (unsigned) cada nó é um full adder Cout A FA S Cin B a2.b4 a0.b4 a0.b3 a0.b2 a0.b1 a0.b0 0 0 0 0 a1.b4 FA a1.b3 FA a1.b2 FA a1.b1 FA a1.b0 FA a2.b3 FA a2.b2 FA a2.b1 FA a2.b0 a3.b4 FA FA FA FA a3.b3 a3.b2 a3.b1 a3.b0 a4.b4 FA FA FA FA a4.b3 a4.b2 a4.b1 a4.b0 FA FA FA FA 0 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0 90
Síntese do datapath - operadores aritméticos multiplicação paralela (signed) termos de soma negativos bit de sinal (peso -2 4 ) (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) x (a4) a3 a2 a1 a0 (b4) b3 b2 b1 b0 (p9) p8 p7 p6 p5 p4 p3 p2 p1 p0 91 Síntese do datapath - operadores aritméticos array multiplicador de Pezaris (nxn, signed) 4 tipos de full adders diferentes FA0, FA1, FA2, FA3 a1.b4 a0.b4 a0.b3 a0.b2 a0.b1 0 0 0 0 FA2 FA0 FA0 FA0 a1.b3 a1.b2 a1.b1 a1.b0 a0.b0 a2.b4 FA2 FA0 FA0 FA0 a2.b3 a2.b2 a2.b1 a2.b0 a3.b4 FA2 FA0 FA0 FA0 a3.b3 a3.b2 a3.b1 a3.b0 a4.b4 FA3 a4.b3 FA1 FA1 FA1 a4.b2 a4.b1 a4.b0 FA2 FA2 FA2 FA2 0 (p9) p8 p7 p6 p5 p4 p3 p2 p1 p0 92
Síntese do datapath - operadores aritméticos multiplicador bi-secção (signed) separando os termos positivos dos negativos secção positiva secção negativa a3.b0 a2.b0 a1.b0 a0.b0 a3.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) x (a4) a3 a2 a1 a0 (b4) b3 b2 b1 b0 (p9) p8 p7 p6 p5 p4 p3 p2 p1 p0 93 Síntese do datapath - operadores aritméticos multiplicador bi-secção só dois tipos de full-adders fácil de expandir para mxn a1.b3 a0.b3 a0.b2 a0.b1 a0.b0 0 0 0 FA0 a1.b2 FA0 a1.b1 FA0 a1.b0 secção positiva secção negativa a2.b3 FA0 FA0 FA0 a2.b2 a2.b1 a3.b3 FA0 FA0 FA0 a3.b2 a3.b1 a3.b0 FA0 FA0 FA0 0 a2.b0 a3.b4 a2.b4 a1.b4 a0.b4 a4.b4 FA2 a4.b3 FA2 FA2 FA2 a4.b2 a4.b1 a4.b0 FA2 FA2 FA2 FA2 0 (p9) p8 p7 p6 p5 p4 p3 p2 p1 p0 94
Síntese do datapath - operadores aritméticos divisão binária processo parecido com a multiplicação: shift-subtract o resultado de uma subtração define a próxima operação dependência série entre as várias operações mais complexo do que a multiplicação exemplo (unsigned): 147/11=13, 147%11=4 dividendo subtrai divisor resto 10010011 1011-1011 00001101 001110-1011 001111-1011 100 divisor 1 < 1011 10 < 1011... 111 < 1011 quociente 95 Síntese do datapath - operadores aritméticos divisão binária (unsigned) - algoritmo A=0; // fica com o resto, n bits M=Divisor; // n bits Q=Dividendo; // fica com o quociente, m bits cnt=m; repeat A Q {A,Q} = {A,Q} << 1; 0011 11000011 A = A - M; 0111 10000110 if (A<0) Q[0] = 1; else resto dividendo begin Q[0] = 0; A = A + M; end cnt = cnt - 1; until (cnt==0); quociente 96
Síntese do datapath - operadores aritméticos divisão binária (signed) - algoritmo M=Divisor; // n bits {A,Q}=Dividendo; // com extensão de sinal, n+m bits // A fica com o resto, n bits cnt=m; // número de bits do dividendo sd = sign({a,q});// sinal do dividendo repeat {A,Q} = {A,Q} << 1; sa = sign(a); A0 = A; if ( sign(a) == sign(m) ) A = A - M; else A = A + M; if ( sign(a) == sa ( A == 0 && Q == 0 ) ) Q[0] = 1; else begin Q[0] = 0; A = A0; quociente é zero, restaura o valor de A end cnt = cnt - 1; until (cnt==0); if (sd!= sign(m) ) Q = -Q; 97 Síntese do datapath - operadores aritméticos divisão binária - exemplo (signed) -7 / 3 = -2-7 % 3 = -1-7 = 1001 +3 = 0011-2 = 1110-1 = 1111 1111 1001 valor inicial, extensão do sinal 1111 0010 shift e guarda A + 0011 M e A com sinais diferentes, soma M a A 0010 o resultado trocou o sinal de A 1111 0010 Q[0]=0, restaura o valor de A 1110 0100 shift e guarda A + 0011 M e A com sinais diferentes, soma M a A 0001 o resultado trocou o sinal de A 1110 0100 Q[0]=0, restaura o valor de A 1100 1000 shift e guarda A + 0011 M e A com sinais diferentes, soma M a A 1111 o resultado não trocou o sinal de A 1111 1001 Q[0]=1 1111 0010 shift e guarda A + 0011 M e A com sinais diferentes, soma M a A 1111 o resultado trocou o sinal de A 1111 0010 Q[0]=0, restaura o valor de A 1111 1110 dividendo e divisor com sinais opostos troca o sinal do quociente: Q=-2, R=-1 98
Síntese do datapath - operadores aritméticos Divisor paralelo Array divisor (nonrestoring) divisor dividendo CAS Controlled Add/Subtract B i A i n 6 n 5 n 4 n 3 d 3 d 2 d 1 d 0 q 3 1 CAS CAS CAS CAS n 2 P P q 2 CAS CAS CAS CAS n 1 C i+1 FA C i q 1 CAS CAS CAS CAS n 0 S i B i q 0 CAS CAS CAS CAS quociente resto r 3 r 2 r 1 r 0 99 Síntese do datapath - operadores aritméticos Outros operadores quadrado AxA é mais eficiente do que a multiplicação operandos constantes propagando a constante para HW os operadores são simplificados multiplicação traduzida em shifts, adições e subtracções raíz quadrada funções trignométricas e logarítmicas tabeladas ou desenvolvidas em série operadores específicos inexistentes em processadores convencionais optimizados para uma aplicação 100
Teste de sistemas digitais Definição determinar se um sistema (fabricado) funciona correctamente aplicar estímulos seleccionados observar as respostas compará-las com as respostas esperadas Níveis de hierarquia sistemas - interligação de cartas de circuito impresso defeitos em cartas ou interligações cartas - interligação de componentes defeitos nas interligações, componentes mal colocados componentes (chips) - interligações de transistores defeitos nos contactos, curto circuitos ou circuitos abertos nas pistas Baseado em Digital Systems Testing and Testable Design, M. Abramovici, M.A. Breuer, A.D. Friedman, Computer Science Press, 1990 101 Testar quando? O teste de um CI pode ser feito na wafer contactos directos aos pads ou outros pontos de teste após o encapsulamento pelos terminais do CI após a inserção numa carta usando autoteste ou infraestruturas residentes para teste integrado num sistema antes da distribuição teste pós-produção integrado num sistema após instalação no utilizador final field test 102
Testar quando? Quanto mais cedo melhor custo de detectar uma falta wafer $0.01 - $0.1 CI encapsulado $0.1 - $1 carta $1 - $10 sistema $10 - $100 utilizador $100 - $1000 aumento de 10x 103 Tipos de teste Quando é realizado o teste? em simultâneo com a operação do sistema (on-line, concurrent) como uma actividade separada (off-line) O que se procura com o teste? erros de projecto (design verification testing) erros de fabrico (acceptance testing) defeitos de fabrico, falhas no processo (burn-in) falhas físicas infantis (quality assurance testing) falhas físicas, factores externos (field testing, maintenance) permanentes, intermitentes, transitórias envelhecimento, radiações, temperatura, humidade, vibrações 104
Tipos de teste Que fonte de estímulos, quem verifica resultados? produzida pelo próprio sistema (self testing) proveniente de um equipamento externo dedicado (external testing) Como são produzidos os estímulos e respostas? armazenados em memória (stored pattern testing) produzidos durante o teste (algorithmic testing, comparision testing) Como são aplicados os estímulos? numa ordem pré-determinada (non-adaptative testing) dependendo dos resultados obtidos (adaptative testing) Que rapidez de aplicação dos estímulos? muito mais lentos do que em funcionamento normal (DC ou static) à velocidade normal de funcionamento (AC- ou at-speed testing) 105 Tipos de teste Que resultados são observados? as respostas de todas as saídas uma função da resposta (compact testing) Que sinais são usados para teste? só os terminais de entrada e saída (edge-pin testing, GO/NO GO) terminais de E/S e nós internos guided probe testing - ao nível da carta, localizar falhas bed of nails - contacto directo a nós internos in-circuit - isolar componentes montados numa carta in-circuit emulation - substituir um componente por um testador (µp) 106
Teste funcional e teste estrutural Teste funcional verificar que o projecto do circuito implementa a especificação ao nível funcional, RTL ou lógico verificar que o circuito realiza a função pretendida após a sua implementação na tecnologia alvo Teste estrutural verificar que os componentes do sistema funcionam verificar que as interligações entre os componentes funcionam 107 Qualidade e fiabilidade Qualidade satisfação de especificações funcionais, eléctricas e físicas projecto e manufactura qualidade de materiais controlo do yield Fiabilidade capacidade de um componente cumprir a sua função em condições determinadas e durante um período de vida especificado 108
Yield e nível de defeitos matéria prima fabrico fabricados teste enviados (bons e avariados) rejeitados (dados como avariados) Yield (processo de fabrico) Y = nº componentes bons nº componentes fabricados nível de defeitos (no cliente) DL = nº componentes defeituosos nº de componentes enviados 109 Modelos de faltas Defeitos físicos manifestam-se como falhas ao nível eléctrico (curto circuito, circuito aberto) falhas ao nível lógico (trocas de zero por uns) Modelos de faltas representação da forma como um defeito físico afecta o comportamento em diferentes níveis de abstração (RTL, lógico ou eléctrico) o mesmo defeito físico é representado por diferentes modelos modelos de faltas realistas conhecimento dos mecanismos físicos e eléctricos que podem causar faltas fundamentais para a geração eficaz de estímulos de teste estímulos de teste activar uma falta e propagar o seu efeito para um ponto observável (saída) 110
Cobertura de faltas Teste exaustivo é impraticável circuito com N entradas 2 N vectores (N=75, 1µs/vector = 1.2G anos) Estímulos de teste conjunto limitado de valores para as entradas objectivo: detectar resultados errados para qualquer falta no circuito modelos de faltas simplificados admite-se uma só falta de cada vez do tipo stuck-at-1, stuck-at-0 Cobertura de faltas FC = nº faltas detectadas nº faltas consideradas x 100% 111 Yield - Defect level - Defect coverage DL = 1 - Y (1-DC) DC = nº faltas detectadas nº faltas possíveis x 100% nível de defeitos (DL) 1 0.9 0.8 Y=1% Y=10% 0.7 0.6 Y=25% 0.5 Y=50% 0.4 0.3 Y=75% 0.2 0.1 0 Y=90% Y=99% 0 0.2 0.4 0.6 0.8 1 cobertura de defeitos (DC) (DC <= FC) 112
Modelo de faltas Single Stuck-at Modela uma falta como colagem de um nó a 1 ou 0 considera que não ocorrem várias faltas simultâneamente estímulos de teste devem produzir saídas erradas se o nó em análise estiver sempre a 1 ou sempre a 0 vantagens simplicidade traduz o comportamento (ao nível lógico) de muitas falhas físicas independente da tecnologia possibilita o tratamento matemático do teste (geração de estímulos) testes criados para SSF também detectam outros tipos de faltas (MSF) num circuito combinacional grande, o número de faltas SS n F 2.G.f G = número de portas lógicas, f = fanout médio 113 Geração de testes (faltas lógicas) Um vector de teste t detecta uma falta se a saída do circuito for diferente com a falta e sem a falta Teste de um circuito lógico conjunto T de vectores de teste aplicados em sequência num circuito combinacional podem ser aplicados em qualquer ordem detecção de uma falta activar a falta - forçar nesse nó um valor diferente do imposto pela falta propagar o erro para a saída - conduzir a valores diferentes na saída exemplo: a b c d 0 0 1 1 sa1 0/1 0 0 0/1 0/1 114
Faltas indetectáveis Detecção de faltas não são detectadas por nenhum vector de teste invalidam a assumpção de considerar uma só falta de cada vez todas as faltas stuck-at de um circuito não-redundante (simplificado) são detectáveis Equivalência funcional duas faltas f e g são funcionalmente equivalentes se Z f (x) = Z g (x) nenhum teste distingue duas faltas funcionalmente equivalentes basta considerar uma falta de cada classe (equivalence fault collapsing) Localização de faltas para além de detectar, interessa saber a que classe pertence uma falta 115 Equivalência funcional e estrutural Equivalência funcional com o modelo SSA determinar a equivalência entre faltas é um problema NP-completo solução é calcular a resposta do circuito com uma e outra falta Equivalência estrutural um circuito com uma SSF pode ser simplificado removendo todas as linhas (excepto entradas) que ficam constantes com a presença da falta duas faltas são estruturalmente equivalentes se os circuitos simplificados forem idênticos faltas estruturalmente equivalentes são funcionalmente equivalentes equivalência estrutural pode ser determinada por uma análise local da estrutura do circuito 116
Simulação de faltas Simular o circuito na presença de faltas Avaliar a qualidade de um teste determinar a cobertura de faltas ( FC >= DC) Geração de testes construir, modificar e avaliar testes para obter uma dada cobertura Construção de diccionários de faltas identificar faltas pelas respostas do circuito Análise do comportamento na presença de faltas em que medida uma falta afecta o comportamento do circuito? 117 Simulação de faltas Simulação série o circuito é acrescentado de uma falta de cada vez e simulado processo lento, repetido para cada falta requer apenas um simulador lógico possibilita a simulação de qualquer tipo de falta é impraticável para simular um número grande de faltas Simulação paralela simulação em paralelo de N circuitos, cada um com uma falta introduzida número de iterações (simulações) é reduzido N vezes é mantida uma lista com os estados de cada nó na presença de cada falta. 9 8 7 6 5 4 3 2 1 0 para um nó i 1 0 1 0 0 1 1 1 0 1 faltas consideradas k ssa-1 k ssa-0 l ssa-1 l ssa-1 resposta do circuito bom 118
Simulação de faltas Deductive simula o circuito bom e deduz o comportamento de todos os circuitos faltosos (conjunto de faltas considerado) em cada nó i é mantida uma lista Li das faltas observáveis nesse nó o valor de i é diferente para o circuito bom e para o circuito faltoso se i é uma saída primária, Li é o conjunto de faltas detectáveis em i para o exemplo apresentado no slide anterior: Li = {1,5,6,8} operação básica para simular um elemento lógico dados os valores das entradas sem faltas e a lista de faltas para cada entrada, calcular a saída sem falta e a lista de faltas na saída. simulador propaga eventos de modificação das listas de faltas 119 Simulação de faltas Concorrente numa simulação de faltas, a maior parte dos valores nos circuitos faltosos N f é igual aos do circuito bom N simulação concorrente: simula o circuito bom para cada circuito N f são simulados apenas os elementos que diferem de N durante a simulação e para cada elemento x em N (x f em N f ) a lista Vx (Vx f ) das entradas, saídas e estados internos de x (x f ) a lista CLx representa todos os elementos x f que são diferentes de x porque Vx Vx f : a falta f foi propagada para as entradas ou saídas de x porque a falta f é local a x f, mesmo se Vx = Vx f (falta f não activada) cada entrada em CLx tem a forma (f, Vx f ) 120
Geração de testes Geração de testes - problema complexo custo requerido para construir e avaliar a qualidade do teste depende da complexidade do circuito - design for testability random test generation (RTG) - testes gerados aleatóriamente deterministic test generation - usa um modelo do circuito geração manual ou automática de testes testes gerados para uma falta específica ou sem definir qualquer falta qualidade do teste número de faltas que podem ser detectadas - fault coverage (FC) extensão do teste: para a mesma FC, quanto mais curto melhor. custo da aplicação do teste tempo de aplicação do teste, tempo de processamento das respostas requisitos de memória do testador 121 Geração automática de testes (ATG) Faltas SSF em circuitos combinacionais fan-out free passos básicos para gerar uma falta l do tipo s-a-v definir entradas primárias que activem a falta: forçar v nesse nó propagar o erro para uma saída primária para cada sinal considera-se um par de valores, com e sem a falta v/vf 0/0 0 1/1 1 1/0 D 0/1 D situações de erro operações lógicas: processando separadamente os dois valores D. 1 = 1/0. 1/1 = 1.1/0.1 = 1/0 = D operações são consistentes com a álgebra booleana D.D = 0, D+D = 1, D+D = D.D = D, D.D = D+D = D 122
ATG para SSF (combinacionais, fan-out free) Algoritmo para gerar um teste para l s-a-v justify(l,v) propagate(l,d) set all values to x (undefined logic value) justify(l,v) if (v == 0) propagate(l,d) else propagate(l,d) determina as entradas primárias que forçam v no nó l propaga D de l para uma saída primária, determinando os valores necessários para as entradas primárias a b c d e f s-a-0 g h i j inicial: justify(f,1); propagate(f,d) justify(f,1): a=1; b=1 propagate(f,d): justify(g,0); propagate(h,d) justify(g,0): c=0; d=x propagate(h,d): justify(i,1) justify(i,1): e=0 Teste para f s-a-0: 110x0 123 ATG para SSF(combinacionais, fan-out) Em circuitos fan-out free problemas justify() podem ser resolvidos independentemente os conjuntos de entradas definidas por cada são mutuamente exclusivos Em circuitos com fan-out objectivos básicos iguais: activar uma falta e propagar o erro activar uma falta l s-a-v consiste em justificar v em l propagar o erro: vários caminhos até à saída, escolher um. dificuldade: em geral os problemas justify não são independentes necessário backtracking quando são encontradas inconsistências exploração sistemática do espaço de soluções (enumeração implícita) se existir, encontra um teste se falhar, não há teste que detecte a falta considerada 124
ATG para SSF(combinacionais, fan-out) Algoritmo recursivo para ATG solve() if imply_and_check() = FAIL return FAIL if (error at PO and all lines justified) return SUCCESS if (no error can be propagated to a PO) return FAIL select an unsolved problem repeat select one untried way to solve it if Solve() = SUCCESS return SUCCESS until all ways to solve the problem have been tried return FAIL imply_and_check( ) encontra a solução para os problemas que podem ser resolvidos por implicação verifica a consistência do resultado em circuitos fan-out free encontra a solução 125 ATG - exemplo d a b c f s-a-1 g2 g1 f1 f2 e g3 g4 activar f implica justificar g1=0 justificar g1=0 implica a=b=c=1 o erro pode ser propagado para f1 ou f2 escolhendo f1 é necessário justificar g2=1 justificar g2=1 implica d=a=0: inconsistência com a=1 para justificar g1=0 backtrack: propagar a falta para f2, implica justificar g4=1 justificar g4=1 implica c=1, e=0 teste para f f s-a-1: abcde=111x0 126