Guia Completo: Recursos Sintetizáveis do SystemVerilog
Processos always e initial: Guia Essencial SystemVerilog
Neste tutorial, vamos explorar os processos always e initial, abordando suas principais diferenças, como cada um se comporta em um fluxo de simulação
Simulação e Depuração: Ferramentas e Dicas PráticasAprenda técnicas de simulação e depuração em SystemVerilog, utilizando ferramentas, waveforms, asserts e logs para garantir designs confiáveis. e em que situações são mais adequados. A compreensão correta dessas construções é essencial para desenvolver códigos confiáveis e eficientes em SystemVerilog
Introdução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital..
Visão Geral🔗
SystemVerilog
Introdução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital. oferece diversos recursos para descrição de hardware
Boas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos. e verificação
Introdução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital.. Entre esses recursos, destacam-se duas construções fundamentais herdadas do Verilog
Linguagens de Descrição de Hardware: VHDL e VerilogAprenda as principais diferenças entre VHDL e Verilog, descubra vantagens, sintaxe, aplicações e dicas essenciais para projetos digitais com HDLs.: os processos always e initial.
- O processo
alwaysé um gatilho repetitivo que executa continuamente durante toda a simulação, reagindo a mudanças de sinais ou conforme definido pela lista de sensibilidade
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas.. - O processo
initialé um gatilho único que executa apenas uma vez, geralmente durante a inicialização da simulação
Simulação e Depuração: Ferramentas e Dicas PráticasAprenda técnicas de simulação e depuração em SystemVerilog, utilizando ferramentas, waveforms, asserts e logs para garantir designs confiáveis..
Por que isso é importante?
Para projetar bem um módulo ou um testbench em SystemVerilog
Introdução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital., você precisa ter clareza sobre como cada processo é disparado e em que parte da simulação ele atua. Isso impacta tanto as propriedades
Propriedades e Afirmações: Definindo Expectativas de SinaisDescubra como utilizar afirmações e propriedades em SystemVerilog para verificar sinalizações e garantir o comportamento esperado nos projetos de hardware. funcionais do design quanto a capacidade de verificação
Introdução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital..
Processo initial🔗
Um bloco initial é executado apenas uma vez no início do tempo de simulação (t = 0), ou no instante em que a simulação
Simulação e Depuração: Ferramentas e Dicas PráticasAprenda técnicas de simulação e depuração em SystemVerilog, utilizando ferramentas, waveforms, asserts e logs para garantir designs confiáveis. começa a contabilizar os eventos. Dentro dele, podem ser usadas instruções de temporização
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas., como #delay, para escalonar eventos
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas.
Eventos e Semáforos: Controle de Fluxo ConcorrenteDescubra como eventos e semáforos facilitam a sincronização e o controle de recursos em SystemVerilog, otimizando fluxos concorrentes. ou ações específicas ao longo do tempo.
Em síntese, o initial é muito útil para realizar configurações iniciais, como atribuir valores iniciais a registradores, gerar estímulos de arranque ou imprimir mensagens de verificação logo no início da simulação.
Características principais
1. Execução única: disparado uma vez no tempo zero (ou no início da simulação
Simulação e Depuração: Ferramentas e Dicas PráticasAprenda técnicas de simulação e depuração em SystemVerilog, utilizando ferramentas, waveforms, asserts e logs para garantir designs confiáveis.).
2. Uso não-sintetizável: em geral, os blocos initial não são sintetizáveis para hardware físico. São amplamente utilizados em testbenches
Criando Testbenches Estruturados: Estratégias de VerificaçãoAprenda a criar testbenches estruturados em SystemVerilog com estratégias de verificação, modularização e boas práticas para designs digitais confiáveis..
3. Ideal para inicializações: configurar valores ou estados iniciais de sinais e variáveis
Mapas de Karnaugh: Otimização de Circuitos e Minimização de FunçõesDescubra como os Mapas de Karnaugh simplificam expressões lógicas, otimizando circuitos digitais e facilitando o projeto em eletrônica digital..
4. Possibilidade de delays: controlar etapas de inicialização (por exemplo, esperar 100 ns para forçar um reset).
Um exemplo simples:
module exemplo_initial;
reg clk;
reg reset;
initial begin
// Inicialização
clk = 0;
reset = 1;
// Espera 10 unidades de tempo e desativa reset
#10 reset = 0;
end
endmodule
No fragmento acima, o bloco initial cuida apenas de atribuir valores no tempo zero e gerar um atraso
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas. para desativar o reset após 10 unidades de tempo.
Processo always🔗
Já o bloco always executado continuamente durante toda a simulação, repetindo sua execução sempre que ocorre um evento na sua lista de sensibilidade
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas. (quando presente) ou conforme seu tipo (always_comb,
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas.always_ff,
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas.always_latch etc.).
Em SystemVerilog
Introdução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital., o always tradicional do Verilog
Linguagens de Descrição de Hardware: VHDL e VerilogAprenda as principais diferenças entre VHDL e Verilog, descubra vantagens, sintaxe, aplicações e dicas essenciais para projetos digitais com HDLs. foi aprimorado por variantes que facilitam a síntese
Dicas de Desempenho: Simulação e SínteseAprenda estratégias e recomendações para otimizar simulação e síntese em projetos SystemVerilog, melhorando verificação e resultados finais. e evitam erros:
always_comb: indica que o bloco descreve lógica combinacional.
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas.always_ff: indica que o bloco descreve lógica sequencial (flip-flops
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas.
Flip-Flops e Latches: Tipos: SR, JK, D, T (funcionamento e clock)Aprenda os conceitos de Flip-Flops e Latches, incluindo tipos SR, JK, D e T, além do impacto do clock na sincronização de circuitos digitais.).always_latch: indica que o bloco descreve lógica sequencial por meio de _latches_.
No entanto, neste tutorial, focamos na forma mais genérica, o always.
Características principais
1. Execução repetitiva: reacende sempre que há uma mudança em um sinal da lista de sensibilidade
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas. ou de forma contínua (no caso de always @(...)).
2. Uso sintetizável: blocos always são tradicionalmente usados para descrever hardware
Boas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos. real, especialmente em designs RTL.
3. Sensibilidade
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas. explícita ou implícita:
- Em
always @(posedgereagimos somente na borda de subida
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas. clk)
Flip-Flops e Latches: Tipos: SR, JK, D, T (funcionamento e clock)Aprenda os conceitos de Flip-Flops e Latches, incluindo tipos SR, JK, D e T, além do impacto do clock na sincronização de circuitos digitais. do relógio. - Em
always @reagimos a qualquer mudança em algum dos sinais usados no bloco, descrito de forma implícita.
4. Controle de comportamento: descreve processos concorrentes, podendo representar caminhos combinacionais ou seqüenciais no design.
Um exemplo simples de always que gera o sinal de relógio:
module exemplo_always;
reg clk = 0;
// Gera clock em 50% duty-cycle
always begin
#5 clk = ~clk;
end
endmodule
Note que, neste caso, não especificamos uma lista de sensibilidade
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas.. O processo always executará para sempre (pois sempre haverá um #5 para aguardar, invertendo clk em seguida). Em um testbench
Criando Testbenches Estruturados: Estratégias de VerificaçãoAprenda a criar testbenches estruturados em SystemVerilog com estratégias de verificação, modularização e boas práticas para designs digitais confiáveis., isso é comum para gerar um relógio de simulação.
Diferenças Fundamentais🔗
Podemos resumir as principais diferenças entre initial e always na tabela abaixo:
| Aspecto | initial | always |
|---|---|---|
| Execução | Executa apenas uma vez. | Executa repetidamente. |
| Momento de disparo | No início da simulação ou no tempo zero. | Define-se pela lista de sensibilidade ou pela repetição contínua. |
| Uso típico | Inicialização de sinais, tarefas de configuração e debug temporário. | Descrição de lógica combinacional ou sequencial, geração de clock e monitoramento de eventos. |
| Sintetizável | Não é recomendado para síntese (usualmente não sintetizável). | Sim, largamente empregado para descrição de hardware em nível RTL. |
Atrasos (#) | Comuns e úteis para escalonar eventos no testbench. | Possíveis, mas geralmente evitados em blocos sintetizáveis ou substituídos por clocks. |
| Exemplos de uso | Reset inicial, mensagens de log, setup de sinais de debug. | Lógica combinacional/sequencial, geração de sinais periódicos, máquinas de estado. |
Aplicações Práticas🔗
Blocos de Inicialização
Em testbenches
Criando Testbenches Estruturados: Estratégias de VerificaçãoAprenda a criar testbenches estruturados em SystemVerilog com estratégias de verificação, modularização e boas práticas para designs digitais confiáveis., vários blocos initial podem existir para diferentes propósitos, como:
- Inicializar variáveis
Mapas de Karnaugh: Otimização de Circuitos e Minimização de FunçõesDescubra como os Mapas de Karnaugh simplificam expressões lógicas, otimizando circuitos digitais e facilitando o projeto em eletrônica digital. internas do testbench
Criando Testbenches Estruturados: Estratégias de VerificaçãoAprenda a criar testbenches estruturados em SystemVerilog com estratégias de verificação, modularização e boas práticas para designs digitais confiáveis.. - Aplicar estímulos iniciais a sinais de entrada.
- Exibir mensagens de diagnóstico no início da simulação
Simulação e Depuração: Ferramentas e Dicas PráticasAprenda técnicas de simulação e depuração em SystemVerilog, utilizando ferramentas, waveforms, asserts e logs para garantir designs confiáveis..
Descrição de Lógica e Sequencial
Para descrever lógica combinacional (por exemplo, multiplexadores
Circuitos Combinacionais: Multiplexadores (MUX) e demultiplexadores (DEMUX): seleção de dadosDescubra como os multiplexadores e demultiplexadores otimizam sistemas digitais, selecionando e distribuindo sinais com eficiência em circuitos eletrônicos.), usa-se always @ ou o recurso avançado always_comb. Já para descrever flip-flops
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas.
Flip-Flops e Latches: Tipos: SR, JK, D, T (funcionamento e clock)Aprenda os conceitos de Flip-Flops e Latches, incluindo tipos SR, JK, D e T, além do impacto do clock na sincronização de circuitos digitais. (lógica sequencial), utiliza-se always @(posedge ou
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas. clk)always_ff.
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas.
Geração de Clocks e Resets
- Gerar clock
Flip-Flops e Latches: Tipos: SR, JK, D, T (funcionamento e clock)Aprenda os conceitos de Flip-Flops e Latches, incluindo tipos SR, JK, D e T, além do impacto do clock na sincronização de circuitos digitais.: um alwaysinfinito (sem lista de sensibilidade
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas.) costuma ser usado para criar um sinal de clock
Osciladores e Relógios Digitais: Geração e Uso de Sinais de SincronismoDescubra o papel essencial dos osciladores e sinais de clock na sincronização e funcionamento de circuitos digitais modernos. em testbenches
Criando Testbenches Estruturados: Estratégias de VerificaçãoAprenda a criar testbenches estruturados em SystemVerilog com estratégias de verificação, modularização e boas práticas para designs digitais confiáveis.. - Acionamento de reset: frequentemente dentro de
initialpara fornecer um pulso de reset no início da simulação
Simulação e Depuração: Ferramentas e Dicas PráticasAprenda técnicas de simulação e depuração em SystemVerilog, utilizando ferramentas, waveforms, asserts e logs para garantir designs confiáveis..
Sequenciamento e Tarefas Temporizadas
O initial permite uma narrativa temporal para eventos
Eventos e Semáforos: Controle de Fluxo ConcorrenteDescubra como eventos e semáforos facilitam a sincronização e o controle de recursos em SystemVerilog, otimizando fluxos concorrentes. específicos. Por exemplo, você pode aplicar um conjunto de estímulos em instantes bem definidos:
initial begin
// Em t=0
sinal_entrada = 0;
#10 sinal_entrada = 1; // Em t=10
#20 sinal_entrada = 0; // Em t=30
end
Com isso, controla-se a ordem e o tempo em que os estímulos são aplicados, fundamental para depurar designs complexos.
Boas Práticas e Recomendações🔗
1. Use initial apenas para testbenches
Criando Testbenches Estruturados: Estratégias de VerificaçãoAprenda a criar testbenches estruturados em SystemVerilog com estratégias de verificação, modularização e boas práticas para designs digitais confiáveis. ou simulações: não tente sintetizar blocos initial, pois eles não correspondem a hardware
Boas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos. físico.
2. Prefira always_comb e
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas.always_ff para descrever lógica combinacional e sequencial: isso evita erros e garante que o software
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas.
Boas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos. de síntese identifique corretamente a intenção do projeto.
3. Mantenha blocos curtos e objetivos: facilita a leitura e a depuração
Simulação e Depuração: Ferramentas e Dicas PráticasAprenda técnicas de simulação e depuração em SystemVerilog, utilizando ferramentas, waveforms, asserts e logs para garantir designs confiáveis..
4. Centralize inicializações: se você precisar de diversas configurações iniciais, agrupe-as em um único bloco initial ou em blocos bem documentados.
5. Não abuse de delays (#) em blocos sintetizáveis: se precisar de comportamento temporizado ou pipelines, use cl ocks e flip-flops
Flip-Flops e Latches: Tipos: SR, JK, D, T (funcionamento e clock)Aprenda os conceitos de Flip-Flops e Latches, incluindo tipos SR, JK, D e T, além do impacto do clock na sincronização de circuitos digitais..
Exemplo Completo🔗
A seguir, um mini-exemplo que ilustra uso de initial e always juntos:
module exemplo_completo;
// Declarando sinais
reg clk;
reg reset;
reg [3:0] contador;
// Bloco para gerar clock
always begin
#5 clk = ~clk;
end
// Bloco para inicialização de sinais
initial begin
clk = 0;
reset = 1;
contador = 0;
// Espera 20 ns e libera o reset
#20 reset = 0;
end
// Bloco para contar em cada borda de subida do clock
always @(posedge clk) begin
if (reset)
contador <= 0;
else
contador <= contador + 1;
end
endmodule
1. Geramos clock
Flip-Flops e Latches: Tipos: SR, JK, D, T (funcionamento e clock)Aprenda os conceitos de Flip-Flops e Latches, incluindo tipos SR, JK, D e T, além do impacto do clock na sincronização de circuitos digitais. num always sem lista de sensibilidade
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas., invertendo clk a cada 5 ns.
2. Inicializamos variáveis
Mapas de Karnaugh: Otimização de Circuitos e Minimização de FunçõesDescubra como os Mapas de Karnaugh simplificam expressões lógicas, otimizando circuitos digitais e facilitando o projeto em eletrônica digital. e reset com initial, definindo um pulso de reset de 20 ns.
3. Dentro do outro bloco always @(posedge, descrevemos o comportamento do contador
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas. clk)
Registradores e Contadores: Contadores síncronos e assíncronos: sequências personalizadasAprenda as diferenças entre contadores assíncronos e síncronos, e descubra como utilizar sequências personalizadas para otimizar sistemas digitais. de 4 bits. Em cada borda de subida
Flip-Flops e Latches: Tipos: SR, JK, D, T (funcionamento e clock)Aprenda os conceitos de Flip-Flops e Latches, incluindo tipos SR, JK, D e T, além do impacto do clock na sincronização de circuitos digitais. do clock, verificamos o reset. Se estiver ativo, reiniciamos para zero; caso contrário, incrementamos o contador
Registradores e Contadores: Contadores síncronos e assíncronos: sequências personalizadasAprenda as diferenças entre contadores assíncronos e síncronos, e descubra como utilizar sequências personalizadas para otimizar sistemas digitais..
Conclusão🔗
O domínio do comportamento e do propósito dos processos always e initial é crucial para escrever códigos claros e funcionais em SystemVerilog
Introdução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital.. Saber quando e como usar cada bloco permite descrever de forma precisa tanto a lógica de hardware
Boas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos. desejada quanto o cenário de teste adequado para verificá-la.
Em resumo:
- Use
initialpara inicializações e ações únicas no testbench
Criando Testbenches Estruturados: Estratégias de VerificaçãoAprenda a criar testbenches estruturados em SystemVerilog com estratégias de verificação, modularização e boas práticas para designs digitais confiáveis.. - Use
always(ou suas variações especializadas) para modelar lógica combinacional e sequencial durante toda a simulação
Simulação e Depuração: Ferramentas e Dicas PráticasAprenda técnicas de simulação e depuração em SystemVerilog, utilizando ferramentas, waveforms, asserts e logs para garantir designs confiáveis..
Seguindo essas práticas, você obterá códigos mais organizados, com maior confiabilidade e facilidade de manutenção, já que cada bloco terá um papel específico no fluxo da simulação
Simulação e Depuração: Ferramentas e Dicas PráticasAprenda técnicas de simulação e depuração em SystemVerilog, utilizando ferramentas, waveforms, asserts e logs para garantir designs confiáveis..
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- ASIC World - Repositório clássico com exemplos práticos e explicações detalhadas sobre SystemVerilog, ideal para entendimento dos processos always e initial: www.asic-world.com/systemverilog/
- ChipVerify - Um recurso completo com tutoriais e exemplos fundamentais de SystemVerilog, adequado para compreender processos como always e initial: www.chipverify.com/systemverilog/systemverilog-tutorial
- Embarcados - Oferece cursos gratuitos e materiais educativos em português sobre SystemVerilog, complementando a abordagem de inicialização e processos repetitivos: www.embarcados.com.br/cursos-gratis-sobre-systemverilog/
- SystemVerilog for Design - Livro que explora práticas de design e modelagem de hardware, abordando conceitos fundamentais que incluem o uso de always e initial: www.amazon.com.br/SystemVerilog-Design-Using-Hardware-Modeling/dp/0387364943
- SystemVerilog.io - Plataforma com conteúdos e demonstrações que cobrem diversos aspectos da linguagem, incluindo construções como always e initial: www.systemverilog.io
há 10 meses atrás
há 11 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 11 meses atrás
há 11 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 11 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás