산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> verilog

D 래치

플립플롭은 클록의 양수 또는 음수 에지 입력에서 데이터를 캡처합니다. 주목해야 할 중요한 점은 다음 클럭 에지까지 클럭 에지 이후 데이터에 어떤 일이 발생하든지 출력에 반영되지 않는다는 것입니다. 래치 반면에 인에이블 핀이 어서트되어 있는 한 출력은 클록 에지에서 캡처하지 않고 입력을 따릅니다.

디자인

이 예에서는 3개의 입력과 1개의 출력이 있는 래치를 만들 것입니다. 입력 d 0 또는 1이 될 수 있는 데이터를 나타냅니다. rstn 액티브 로우 리셋 및 en을 나타냅니다. 입력 데이터를 출력에 래치하는 데 사용되는 활성화를 나타냅니다. 리셋이 액티브 로우라는 것은 단순히 이 입력이 0이 될 때 디자인 요소가 리셋된다는 것을 의미합니다. 즉, 리셋은 값이 낮을 때 활성화됩니다. 출력 q의 값 입력 d에 의해 결정됩니다. , ko 그리고 처음 .

<노스크립트>
  
  
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

  

always에 대한 민감도 목록에 유의하십시오. 블록은 출력을 업데이트하는 데 필요한 모든 신호를 포함합니다. 이 블록은 감도 목록에 있는 신호가 값을 변경할 때마다 트리거됩니다. 또한 q en일 때만 d 값을 얻습니다. 높으므로 양성입니다. 걸쇠.

도식

<노스크립트>

테스트벤치

<노스크립트>
  
  
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

  

테스트벤치가 더 무작위적인 방식으로 신호를 주장하고 주장하지 않도록 하기 위해 reg을 선언했습니다. 지연이라는 변수 크기가 3비트이므로 0에서 7 사이의 값을 사용할 수 있습니다. 그런 다음 지연 변수는 d 할당을 지연하는 데 사용됩니다. 및 ko 모든 루프에서 다른 패턴을 얻으려면.

출력

시뮬레이션 로그
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.

이미지를 클릭하시면 크게 보실 수 있습니다.

<노스크립트> d latch

verilog

  1. 공통 에미터 증폭기
  2. 간단한 연산 증폭기
  3. 정밀 전압 추종자
  4. C# 기본 입력 및 출력
  5. C++ 기본 입출력
  6. C 입력 출력(I/O)
  7. 파이썬 입력, 출력 및 가져오기
  8. Java 기본 입력 및 출력
  9. C++ 기본 입출력:Cout, Cin, Cerr 예제
  10. C - 입력 및 출력