Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Verilog

D Trava


Um flip-flop captura dados em sua entrada na borda positiva ou negativa de um clock. O importante a ser observado é que o que quer que aconteça com os dados após a transição do clock até a próxima transição do clock não será refletido na saída. Uma trava por outro lado, não captura na borda de um clock, em vez disso, a saída segue a entrada enquanto o pino de habilitação estiver ativado.

Projeto


Neste exemplo, construiremos uma trava que tem três entradas e uma saída. A entrada d significa dados que podem ser 0 ou 1, rstn significa reset ativo-baixo e en significa enable que é usado para fazer os dados de entrada travarem na saída. O reset sendo ativo-baixo significa simplesmente que o elemento de design será resetado quando esta entrada for para 0 ou em outras palavras, o reset estará ativo quando seu valor for baixo. O valor da saída q é ditado pelas entradas d , pt e primeiro .
  
  
module d_latch (  input d,           // 1-bit input pin for data
                  input en,          // 1-bit input pin for enabling the latch
                  input rstn,        // 1-bit input pin for active-low reset
                  output reg q);     // 1-bit output pin for data output
 
   // This always block is "always" triggered whenever en/rstn/d changes
   // If reset is asserted then output will be zero
   // Else as long as enable is high, output q follows input d
   always @ (en or rstn or d)
      if (!rstn)
         q <= 0;
      else
         if (en)
            q <= d;
endmodule

  

Observe que a lista de sensibilidade para o always bloco contém todos os sinais necessários para atualizar a saída. Este bloco será acionado sempre que qualquer um dos sinais da lista de sensibilidade alterar seu valor. Também q obterá o valor de d somente quando en é alto e, portanto, é um positivo robusto.

Esquema

Banco de teste

  
  
module tb_latch;
   // Declare variables that can be used to drive values to the design
   reg d;  
   reg en;
   reg rstn;
   reg [2:0] delay;
   reg [1:0] delay2;
   integer i;
   
   // Instantiate design and connect design ports with TB signals
   d_latch  dl0 ( .d (d),
                  .en (en),
                  .rstn (rstn),
                  .q (q));

   // This initial block forms the stimulus to test the design
   initial begin
      $monitor ("[%0t] en=%0b d=%0b q=%0b", $time, en, d, q);
   
      // 1. Initialize testbench variables
      d <= 0;
      en <= 0;
      rstn <= 0;
      
      // 2. Release reset
      #10 rstn <= 1;
      
      // 3. Randomly change d and enable
      for (i = 0; i < 5; i=i+1) begin
         delay = $random;
         delay2 = $random;
         #(delay2) en <= ~en;
         #(delay) d <= i;
      end
   end
endmodule

  

Para tornar nossos sinais de afirmação e desativação do testbench de maneira mais aleatória, declaramos um reg variável chamada delay de tamanho 3 bits para que possa assumir qualquer valor de 0 a 7. Em seguida, o delay variável é usada para atrasar a atribuição de d e pt para obter padrões diferentes em cada loop.

Saída

Registro de simulação
ncsim> run
[0] en=0 d=0 q=0
[11] en=1 d=0 q=0
[18] en=0 d=0 q=0
[19] en=0 d=1 q=0
[20] en=1 d=1 q=1
[25] en=1 d=0 q=0
[27] en=0 d=0 q=0
[32] en=0 d=1 q=0
[33] en=1 d=1 q=1
[34] en=1 d=0 q=0
ncsim: *W,RNQUIE: Simulation is complete.


Clique na imagem para aumentá-la.

Verilog

  1. Amplificador emissor comum
  2. Op-Amp simples
  3. Seguidor de tensão de precisão
  4. Entrada e saída básica em C#
  5. Entrada/saída básica de C++
  6. C Entrada Saída (E/S)
  7. Entrada, Saída e Importação do Python
  8. Entrada e Saída Java Basic
  9. Entrada/saída básica de C++:Cout, Cin, Cerr Exemplo
  10. C - Entrada e Saída