Modelação de máquinas de estados FSM (Finite State Machine) sequência determinada de estados, síncrono com relógio estrutura geral saídas (Moore) entradas saída saídas (Mealy) saída saídas (Moore) reset (síncrono) clock reset (assíncrono) próximo estado registo de estado 42 Modelação de máquinas de estados Codificação de estados atribuição de padrões de bits a cada estado o tipo de codificação influencia dimensão do registo de estado complexidade dos circuitos lógicos combinacionais codificações mais usadas sequencial 0000 000 000 00 000 0 0 código Gray 0000 000 00 000 00 0 00 000 código Johnson 00000000 0000000 000000 00000 0000 00000 000000 one-hot 000000000000000 000000000000000 000000000000000... 43
Máquinas de estados - Mealy e Moore Mealy as saídas depem do estado corrente e das entradas o valor das saídas é associado às transições entre estados i A i2/s2 i/s Moore as saídas depem apenas do estado corrente o valor das saídas é associado aos estados i3 s3 D i4 i3 C F s4 B E s3 condição de transição de estado valores das saídas 44 Máquinas de estados - especificação Tabela de transição de estados Diagrama de transição de estados Ymo 0X/ i i2/yme 0 00 XX/ entradas estado próximo saídas i i2 corrente estado Yme Ymo 0 X 00 (S0) 00 (S0) 0 X 00 (S0) 0 (S) 0 0 X 0 (S) 00 (S0) 0 X 0 0 (S) 0 (S2) X X 0 (S2) 00 (S0) X/0 X/0 0 0 X0/ i/yme saídas Mealy saídas Moore S0 Yme i/yme i2/yme S2 Ymo S Ymo i2/yme 45
Máquinas de estados - modelação em Verilog Modelo incorrecto Ymo 0X/ i i2/yme 0 00 XX/ X/0 X/0 0 0 X0/ Funciona? Quais são os erros? module FSM_mal(clock, i, i2, Yme, Ymo); input clock, i, i2; output Yme, Ymo; reg Yme, Ymo; reg [:0] state; always @(posedge clock) case (state) 2 b00: Ymo<=0; if (i) state<=2 b0; Yme<=0; Yme<=; 2 b0: Ymo<=; if (i2) state<=2 b00; Yme<=0; state<=2 b0; Yme<=; 2 b0: Ymo<=; state<=2 b00; Yme<=; module 46 Máquinas de estados - modelação em Verilog Modelo incorrecto Ymo 0X/ i i2/yme 0 00 XX/ X/0 X/0 0 0 X0/ falta de reset (síncrono e/ou assíncrono) um só processo para próximo estado e saídas todas as saídas são registadas Yme não é saída Mealy não é definido o estado inicial falta o estado 2 b module FSM_mal(clock, i, i2, Yme, Ymo); input clock, i, i2; output Yme, Ymo; reg Yme, Ymo; reg [:0] state; always @(posedge clock) case (state) 2 b00: Ymo<=0; if (i) state<=2 b0; Yme<=0; Yme<=; 2 b0: Ymo<=; if (i2) state<=2 b00; Yme<=0; state<=2 b0; Yme<=; 2 b0: Ymo<=; state<=2 b00; Yme<=; module 47
Máquinas de estados - modelação em Verilog Modelo correcto Ymo 0X/ i i2/yme 0 00 XX/ X/0 X/0 0 0 X0/ module FSM_bem(reset, clock, i, i2, Yme, Ymo); input reset, clock, i, i2; output Yme, Ymo; reg Yme, Ymo; reg [:0] state, nextstate; always @(posedge clock) if (reset) state<=2 b00; state<=nextstate; always @(state or i or i2) case (state) 2 b00: nextstate=2 b00; Ymo=0; if (i) nextstate=2 b0; Yme=0; Yme=; 2 b0: Ymo=; if (i2) nextstate=2 b00; Yme=0; nextstate=2 b0; Yme=; 2 b0: Ymo=; nextstate=2 b00; Yme=; default: Ymo=0; nextstate=2 b00; Yme=; module 48 Máquinas de estados - modelação em Verilog Separação da lógica do próximo estado das saídas always @(state or i or i2) case (state) 2 b00: if (i) nextstate=2 b0; nextstate=2 b00; 2 b0: if (i2) nextstate=2 b00; nextstate=2 b0; 2 b0: nextstate=2 b00; default: nextstate=2 b00; module always @(state or i or i2) case (state) 2 b00: Ymo=0; if (i) Yme=0; Yme=; 2 b0: Ymo=; if (i2) Yme=0; Yme=; 2 b0: Ymo=; Yme=; default: Ymo=0; Yme=; module 49
Máquinas de estados - modelação em Verilog Combinando estado corrente e próximo estado always @(posedge clock or negedge reset) if (!reset) state <= 2 b00; case (state) 2 b00: if (i) state<=2 b0; state<=2 b00; 2 b0: if (i2) state<=2 b00; state<=2 b0; 2 b0: state<=2 b00; default: state<=2 b00; module modelando Ymo como saída síncrona: always @(posedge clock or negedge reset) if (!reset) Ymo<=0; state <= 2 b00; case (state) 2 b00: if (i) Ymo<=; state<=2 b0; Ymo<=0; state<=2 b00;... 50 Síntese de Sistemas Digitais estrutural processadores, memórias registos, muxs portas lógicas transistores lógico dispositivo alto nível RTL lógica circuito layout de transistores comportamental fluxogramas, algoritmos transferências entre registos expressões booleanas funções de transistores sistema RTL níveis de abstracção físico células módulos, chips placas, MCMs 5
Problemas de síntese Síntese estrutural do domínio comportamental para o domínio estrutural acrescenta detalhe estrutural depente da tecnologia mas não define a realização física sujeita a restrições: área, desempenho ou potência Síntese física transformação do domínio estrutural para o domínio físico segundo os 4 níveis de abstracção (Y-chart) dispositivo: produção dos desenhos das máscaras de células (layout) célula: colocação de células e interligações (place & route) RTL: organização física de módulos (floorplanning) sistema: particionamento em componentes, PCBs, MCMs 52 Síntese RTL origem descrição comportamental ao nível RTL (ou lógico) variáveis (registos) operações entre variáveis (aritméticas, lógicas ou deslocamento de bits) decisões (if-then-, case) transferências entre registos síncronas com um (ou vários) sinais de relógio restrições de implementação frequência mínima do sinal de relógio espaço ocupado: número e tipo de células (FPGAs) ou área física (ASICs) destino um modelo estrutural ao nível lógico antes do mapeamento tecnológico: rede de portas lógicas, flip-flops e latches após a optimização para a tecnologia alvo: rede de células disponíveis da tecnologia 53
Síntese RTL Como é traduzido o código? cada módulo é sintetizado para uma tecnologia genérica pode ser realizada optimização lógica nesta fase (o FPGAExpress não faz) o circuito é depois optimizado para a tecnologia alvo são usadas apenas células que existam na biblioteca alvo optimização da utilização dessas células (área ou rapidez) pode ser mantida a hierarquia do projecto ou planificar num só nível cada construção Verilog é traduzida num circuito padrão: if-then- multiplexers 2 case-case multiplexers grandes (ou lógica random) always @(posedge clk... ) circuitos síncronos com clk assign ou always @(a or... ) circuitos combinacionais operadores aritméticos e lógicos circuitos combinacionais 54 Síntese RTL estilo de codificação O estilo de codificação afecta o resultado Depente da ferramenta de síntese (é obrigatório ler os manuais!) cada ferramenta tem directivas que guiam o processo de síntese Estrutura de circuitos combinacionais gerados por expressões depe da associação de operadores; que resultados para: a(bcde) a((bc)(de)) a(bc)a(de) Codificação de FSMs codificação de estados é feita explicitamente pelo projectista a codificação adoptada afecta muito a qualidade do resultado obtêm-se melhores resultados dividindo uma FSM em vários blocos próximo estado, saídas, timers,... 55
Modelos RTL 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 tiporeg nem sempre são traduzidos em registos podem ser traduzidos emwire, 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 depe dos operandos são criados circuitos combinacionais que os implementam podem ou não ser partilhados para diferentes operações do mesmo tipo operadores / e % só podem ser usados com operandos constantes (V 200.08-FE3.6.) 56 Construção de modelos sintetizáveis always - duas formas always @(posedge...): os sinais tiporeg são traduzidos para FFs tipo D always @(posedge clock or negedge reset) if (!reset) acc = 8 b00000000; acc = data_in; reset assíncrono; tem de ser avaliado no primeiroif(...) always @(a or b or...): sinais do tiporeg são latches ouwires always @(a or sel) if (sel) out = a; out é uma latch always @(a or b or sel) if (sel) out = a; out = b; lista de sensibilidades out é uma função combinacional desel, a e b 57
Construção de modelos sintetizáveis inferência de latches em construçõesalways - regra geral latches são geradas para sinais do tiporeg que não sejam completamente especificados para todos os casos de instruções condicionais (por exemploif (sel) out = a; e quandosel==0? ) no caso contrário é apenas gerado um circuito combinacional sem elementos de memória latches são (geralmente) indesejáveis e fatais como podem afectar o funcionamento de um circuito síncrono?! ferramentas de síntese ignoram a lista de sensibilidades em construções do tipo always @( enable or bus_a or bus_b) o simulador não e só avalia o bloco quando algum sinal muda de estado 58 Construção de modelos sintetizáveis inferência de buffers de 3-estados atribuindo z a um sinal (do tiporeg) module three_state(in, out, en); input in, en; output out; reg out; always @( in or en) if (en) out = in; out = bz; module assign out = en? in : bz; 59
Construção de modelos sintetizáveis 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<=3;i=i) s[i] = a[i]^b[i]^carry; carry = a[i]&b[i] a[i]&carry b[i]&carry; while (...): cria um ciclo combinacional; deve ser quebrado com @(posedge clock) always @( posedge clock ) while (x<y) @(posedge clock); x=xz; 60 Síntese de Alto Nível descrição comportamental (algorítmica) estrutura RTL registos while (x<a) xl=xdx; ul=u-(5xudx)-(3ydx); yl=y(udx); x=xl; u=ul; y=yl; mux mux R R R mux mux mux - unidade de datapath controlo muxs e barramentos unidades funcionais 6
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 Compromisso área-tempo espaço de soluções típico área tempo 62 Síntese de alto nível Exemplo: 3 adições indepentes - duas soluções alternativas: a x z b x2 t y=ab; y2=xx2; y3=zt; mux mux a b x x2 z t R R R y 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 y y2 y3 3 unidades funcionais ciclo 63
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 depe 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 64 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 depências entre dados e resultados b a c y=ab; z=yc; k=ay; y z CFG (Control Flow Graph) representa a sequência de controlo de blocos de operações k if (a==b) z=yc; k=ay; a==b z=yc k=ay 65
Sequenciamento ASAP e ALAP ASAP - As Soon As Possible atribuir cada operação ao primeiro ciclo ciclo ALAP - As Late As Possible atribuir cada operação ao último ciclo ciclo ASAP com restrições, fixando o número e tipo das unidades funcionais ciclo 2 < 2 2 < 3-3 - 3-4 - 4 - < 4-4 multiplicadores subtractor somador 6 unidades funcionais 2 multiplicadores 2 subtractores somador 5 unidades funcionais 2 multiplicadores subtractor somador 4 unidades funcionais 66 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 67
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 e 3 são compatíveis FU 3 2 6 4 FU2 5 FU3 68 Sequenciamento e alocação optimização conjunta Programação Linear Inteira (PLI) formulação básica baseada em variáveis inteiras binárias: xij = 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, impraticável para problemas reais 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 69
Elementos do datapath Registos armazenam variáveis Barramentos interligam componentes Multiplexers agulham barramentos Unidades funcionais modelo básico uma FU só faz um tipo de operação num ciclo modelos realistas para unidades funcionais diferentes tipos de operações para a mesma unidade (ex. uma ALU) durações depentes do tipo de operação (vários ciclos de relógio) diferentes implementações para a mesma operação (custo/desempenho) diferentes operadores pipelined unidades funcionais reconfiguráveis dinâmicamente 70