Aula 5.7: Contador 3 bits Flip-Flop tipo D e Testbench #LTCode

COMPARTILHAR:

Whatsapp Telegram Twitter Facebook Reddit

Aula 5.7 - Contador 3 bits Flip-Flop tipo D com Testbench

Este artigo faz parte do projeto #LTCode

Na primeira aula dessa série de aulas você aprendeu toda a base para compreender códigos em Verilog HDL e rodar os códigos, se ainda não leu clique aqui e confira.

Na aula de hoje aprenderemos a fazer um Testbench, que é um código escrito em Verilog para testar outro modulo em Verilog, ou seja, testar o projeto em teste – DUT (device under test | dispositivo em teste), uma bancada virtual.

Para aprendermos sobre Testbench vamos criar um contador de 3 bits, ou seja, código que conta de 000 a 111 (0 a 7 em binário), chamamos de contador de módulo 8, usando um flip-flop do tipo D.




O código do módulo do contador você encontra abaixo. Mas atenção, o código abaixo é referente a um flip-flop do tipo D com clock ativado por borda de descida. Não entrarei em detalhes sobre funcionamento do mesmo pois o foco dessa aula é em Testbench, portanto se esteja interessado clique aqui e confira um ótimo vídeo sobre como funciona este tipo de flip-flop.


module contador_8(clock, reset, preset,Q);
input reset, preset, clock;
output reg [2:0]Q;
initial 
begin
   Q = 3'b000;
end

always @ (negedge clock or negedge reset or negedge preset) 
begin
   if (reset == 1'b0)  //reseta contador para 0
   begin
         Q = 3'b000;
   end
   else if (preset == 1'b0) //seta contador para 7
   begin
         Q = 3'b111;
   end
   else // Q recebe Q + 1
   begin
         Q = Q + 3'b001;   
   end
end

endmodule

Dentro do ambiente always você deve estar estranhando a palavra chave negedge. Ela significa que o always vai ser executado quando aquela determinada variável (parâmetro) realizar uma transição de descida (1 -> 0), ou seja, borda de descida. Caso queira fazer com borda de subida, usamos a palavra chave posedge, ou seja, realiza uma transição de subida (0 -> 1). 

Agora vamos realizar o Testbench!


module teste_contador8;

reg preset_tb,  clock_tb, reset_tb;
wire  [2:0] Q_tb;
  
parameter stop_time = 5000; //tempo duração do teste

contador_8 dut(clock_tb, reset_tb, preset_tb, Q_tb); //chama módulo contador

initial # stop_time $finish;

initial
  begin
        reset_tb = 1'b0;  preset_tb = 1'b1; clock_tb = 1'b1; #10 
reset_tb = 1'b0;  preset_tb = 1'b1; clock_tb = 1'b0; #10
reset_tb = 1'b1;  preset_tb = 1'b1; clock_tb = 1'b1; #10  
reset_tb = 1'b1;  preset_tb = 1'b1; clock_tb = 1'b0; #10
reset_tb = 1'b1;  preset_tb = 1'b1; clock_tb = 1'b1; #10  
reset_tb = 1'b1;  preset_tb = 1'b1; clock_tb = 1'b0; #10
repeat(10)
        begin
reset_tb = 1'b1;  preset_tb = 1'b1; clock_tb = 1'b1; #10 
reset_tb = 1'b1;  preset_tb = 1'b1; clock_tb = 1'b0; #10
reset_tb = 1'b1;  preset_tb = 1'b1; clock_tb = 1'b1; #10  
reset_tb = 1'b1;  preset_tb = 1'b1; clock_tb = 1'b0; #10
reset_tb = 1'b1;  preset_tb = 1'b1; clock_tb = 1'b1; #10  
reset_tb = 1'b1;  preset_tb = 1'b1; clock_tb = 1'b0; #10
reset_tb = 1'b1;  preset_tb = 1'b1; clock_tb = 1'b1; 
end
  end  

endmodule

A forma de onda resultante do teste você pode conferir no ModelSim, como ilustra a imagem abaixo:

Não sabe usar o ModelSim? Acesse a parte de "Como realizar simulação" disponível na aula 5.0 clicando aqui.

Próxima aula, clique aqui.

COMENTÁRIOS

Nome

#ann,25,#HK,30,#LTCode,130,Artigo - Diversos,156,Artigo - Games,201,Artigo - Tecnologia,615,autor-thomaz,7,Coluna - Alternative World,24,Coluna - Fail,12,Coluna - Tec Line,14,Criptomoeda,72,Curiosidades - Diversos,49,Curiosidades - Tecnologia,50,en,2,estudo,8,HN,12,logica,14,Pentest,23,Programar C,29,Programar POO,6,Programar Python,6,Programar Shell,25,Programar verilog,12,qradar,4,Raspberry Pi,15,Redes,3,root,117,Shorty Awards,1,Smartphones - Reviews,33,Teoria,10,Top Nostalgia,2,VPN,19,WhatsApp,46,
ltr
item
Limon Tec: Aula 5.7: Contador 3 bits Flip-Flop tipo D e Testbench #LTCode
Aula 5.7: Contador 3 bits Flip-Flop tipo D e Testbench #LTCode
Aula 5.7 - Contador 3 bits Flip-Flop tipo D com Testbench
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmI65og5X32bSLCmBz3uJnZlmDvzOFWZWoZzyvUhh2rtp8Hr_kolKy02pOjxpkThrz8uHaTu3skUdeDJlkFEKkC2a9EabpwPzbwJ-hm-po0QIaNeNvYm5CJw3k4SbN03V-d2h1dxrW2tz4/s640/ltcode.jpg
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmI65og5X32bSLCmBz3uJnZlmDvzOFWZWoZzyvUhh2rtp8Hr_kolKy02pOjxpkThrz8uHaTu3skUdeDJlkFEKkC2a9EabpwPzbwJ-hm-po0QIaNeNvYm5CJw3k4SbN03V-d2h1dxrW2tz4/s72-c/ltcode.jpg
Limon Tec
https://www.limontec.com/2019/06/aula-5-7-codigos-em-verilog-ltcode.html?m=0
https://www.limontec.com/?m=0
https://www.limontec.com/
https://www.limontec.com/2019/06/aula-5-7-codigos-em-verilog-ltcode.html
false
2157924926610706248
UTF-8
Carregar todos posts Não encontramos nenhum post VER TUDO Ler mais Responder Cancelar resposta Deletar Por Home PÁGINAS POSTS Ver tudo RECOMENDADO PARA VOCÊ LABEL ARQUIVO SEARCH TODOS POSTS Não encontramos nenhum post relacionado a sua requisição VOLTAR PÁGINA INICIAL Domingo Segunda Terça Quarta Quinta Sexta Sábado Dom Seg Ter Qua Qui Sex Sab Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro Novembro Dezembro Jan Fev Mar Abr Maio Jun Jul Ago Set Out Nov Dez apenas agora 1 minuto atrás $$1$$ minutes ago 1 hora atrás $$1$$ hours ago Ontem $$1$$ days ago $$1$$ weeks ago mais de 5 semanas atrás Seguidores Seguir ESTE CONTEÚDO ESTÁ BLOQUEADO PASSO 1: Compartilhe com seus amigos PASSO 2: Clique no link compartilhado Copiar Todo Código Selecionar Todo Código Todos códigos foram copiados para seu clipboard Não é possível copiar códigos / textos, por favor aperte [CTRL]+[C] (ou CMD+C no Mac) para copiar Tabela de conteúdo