티스토리 뷰

728x90
반응형

외부 기능
0->1->0 펄스를 세는 기능을 함.
액티브엣지 시점에서

외부 포트
input source
output cnt

동작
1. source가 1이면 internal_cnt가 1이 할당됨.
2. source가 0이되면 internal_cnt가 1인지 확인하고 그렇다면 cnt값을 1만큼 증가시킴. 그리고 다음 펄스를 위해 internal_cnt를 0으로 초기화시킴.

// Code your design here
module pulse_counter(
input source,
output reg [3:0] cnt,

input clk,
   input rstn
);
  
   reg internal_cnt;
  
always @(posedge clk or negedge rstn) begin
      if (!rstn) begin
        internal_cnt = 0;
        cnt = 0;
      end
      else begin
        if (source == 1) begin
          internal_cnt = 1;
        end
        else begin
          if (internal_cnt == 1) begin
              cnt = cnt+1;
              internal_cnt = 0;
          end
          else begin
              cnt = cnt;
              internal_cnt = 0;
          end
        end
      end
end
  
endmodule

// Code your testbench here
// or browse Examples
module tb_top;
   reg  clk;
   reg source;
  wire [3:0] cnt;
   reg rstn
  
  initial begin
    clk = 1;
    forever begin
      #10 clk = ~clk;
    end
  end
  
  
  // Instantiate device under test
  pulse_counter u1(.source(source),
                   .cnt(cnt),
                   .clk(clk),
                   .rstn(rstn));
  
  initial begin
    rstn = 1;
    #1 rstn = 0;
    #1 rstn = 1;
    
  end

endmodule

728x90
반응형
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함