Lab 3 Timing Timing Constraints Simulação A. Mariano - 2014 1
VHDL processes Para um designer, process é um bloco de instruções que funciona de maneira sequencial e que é chaveado quando algum dos sinais ao qual ele está relacionado muda de estado. my_process: process (input1, input2) begin output1 <= input1 and input2; end process; Um evento (mudança de estado) em um dos sinais sensíveis é que chaveia o process Para 'clocked' processes, a lista dos sinais sensíveis deve conter obrigatóriamente o sinal de relógio (clock) A. Mariano - 2014 2
Instruções IF if [condition] then statements; end if; if [condition] then statements; else statements; end if; A. Mariano - 2014 3
Detecção da borda de subida de um clock if rising_edge(clock_signal) then [statements] end if; if clock_signal'event and clock_signal = '1' then [statements] end if; A. Mariano - 2014 4
Declaração de elementos de armazenamento Elementos de armazenamento são declarados como um sinal local. A maneira como o designer implementa o seu código é que os faz atuar como elementos de armazenamento. Se um sinal só é atribuído durante a transição do relógio, o armazenamento será implementado usando flip-flops:... architecture behavioural of counter signal counter : STD_LOGIC_VECTOR(7 downto 0); begin count: process(clock) begin if rising_edge(clock) then counter <= counter+1 end if; end process; end architecture;... A. Mariano - 2014 5
Declaração de elementos de armazenamento Inicialização do elemento de armazenamento signal counter : STD_LOGIC_VECTOR(7 downto 0) := "00000000"; Forma mais conveniente para vetores maiores: signal counter : STD_LOGIC_VECTOR(7 downto 0) := (others => '0'); A. Mariano - 2014 6
Contador de 8 bits (exemplo) A. Mariano - 2014 7
Contador de 8 bits (exemplo) A. Mariano - 2014 8
Desafio 1 Contador binário crescente de 30 bits... - Modifique o seu projeto visando a implementação de um contador binário de crescente de 30 bits. a) Atribua os 8 bits mais significativos aos 8 LEDs do kit NESYS 2; b) Efetue o mapeamento do clock (NET "Clk" LOC = "B8";) c) Verifique se a sintaxe está correta e faça a implementação do projeto. A. Mariano - 2014 9
O problema da temporização Como responder corretamente a especificação do projeto? A solução proposta é rápida o suficiente para atender a especificação? Utilizar uma FPGA mais rápida (custos ) Utilizar macros do fabricante da FPGA (portabilidade ) Otimizar o código a ser implementado (designer skills $$$) A. Mariano - 2014 10
O problema da temporização Como responder corretamente a especificação do projeto? A solução proposta é rápida o suficiente para atender a especificação? Utilizar uma FPGA mais rápida (custos ) Utilizar macros do fabricante da FPGA (portabilidade ) Otimizar o código a ser implementado (designer skills $$$) ESPECIFICAÇÃO: - Aquisição de sinais (bordas e duração de pulsos) com precisão de 10ns - Pulsos podem ocorrer em um intervalo de 4s ANÁLISE: -Dando uma certa margem de segurança ao projeto, F = 250 MHz - impondo 4ns de incerteza na detecção das bordas e 8ns de incerteza na medida da largura dos pulsos. - como os pulsos podem ocorrer em um intervalo de 4s, um contador de 30 bits faz-se necessário. A. Mariano - 2014 11
Velocidade de Operação Qual é a frequência máxima em que um design pode operar? A. Mariano - 2014 12
Velocidade de Operação Qual é a frequência máxima em que um design pode operar? O mais rápido que a sua FPGA e seu DESIGN permitirem!!! A. Mariano - 2014 13
Velocidade de Operação Após a síntese e mapeamento, é possível verificar o tempo de propagação de um determinado sinal (ou conjunto de sinais) A. Mariano - 2014 14
Velocidade de Operação Fmáx = 246 MHz A. Mariano - 2014 15
Como um design afeta a velocidade de operação? Cada um flip-flop atua como um ponto de partida ou de chegada para um sinal digital. Quando um sinal de relógio surge, o flip-flop assume um novo valor. O sinal atualizados sai do flip-flop e começa a se propagar através de células lógicas ligadas a este ramo até que todos os sinais lógicos estejam estáveis e todos os flip-flops tenham o seu valor atualizado. Para que um design funcione corretamente, o sinal de atualização tem que chegar ao flip-flop com, pelo menos, o tempo suficiente para garantir que, quando o relógio comutar novamente o sinal irá ser capturado com segurança (setup time). A. Mariano - 2014 16
Como um design afeta a velocidade de operação? Routing time: tempo necessário para "carregar os fios" que encaminham os sinais entre as diferentes células lógicas. Como se pode imaginar o comprimento das interconexões e o número de portas conectadas às trillhas ("fan-out") determina a quantidade de corrente necessária para transferir os sinais com precisão através da FPGA, e, portanto, o routing time. Logic time: tempo necessário para que uma célula lógica possa reagir a uma mudança de entrada Setup time: o tempo necessário para assegurar que o sinal atinja o seu destino final a cada comutação de relógio A. Mariano - 2014 17
É possível aumentar a velocidade de operação sem alterar o design? Imposição de uma restrição de projeto A. Mariano - 2014 18
Timing Constraints Após setar as restrições de tempo, reconstrua o projeto A. Mariano - 2014 19
Static Timing Report A. Mariano - 2014 20
Static Timing Report 30 bits 30*0,103 = 3,09 ns Fmáx = 267 MHz A. Mariano - 2014 (sem o roteamento!!!) 21
Desafio 2 Design de um contador binário de 30 bits que funcione a uma cadência de 250 MHz - Otimizar o código desenvolvido anteriormente de forma a atender a especificação - Simular o projeto e elaborar relatório ( a ser entregue IMPRESSO na próxima aula), contendo: - Código do design otimizado (print-screen do report apresentando a frequência máxima de operação) - Print-screen dos principais resultados de simulação (todos os resultados apresentados devem ser comentados e justificados) Dica: o ponto crítico deste design é o tempo necessário para que o sinal se propague no contador do BIT(0) ao BIT(29) 30 bits 30*0,103 = 3,09 ns A. Mariano - 2014 22