본문 바로가기
하만 세미콘 아카데미/Verilog HDL

Verilog HDL 실습 (Counter)

by smileww 2024. 5. 31.

이번엔 Counter를 Verilog HDL로 만들어보도록 하겠습니다.

 

Counter란?

Counter는 숫자를 세는 모듈이다. Clock을 분주할 수 있고 Memory의 원하는 Address에 Read / Write를 하는 기능을 설계할 수도 있다. cnt를 구현하라면 읽어서 저장을 할 수 있는 저장 공간이 있어야 가능한데 이는 Data를 저장할 수 있는 D Flip Flop을 이용하면 된다.

 

 

Verilog HDL Code

더보기

Counter Module

`timescale 1ns / 1ps

module my_counter(
    input Reset,
    input Clk,
    input Dir,
    output [2:0] LED
    );
    
reg [31:0] counter;

assign LED = counter[31:29];

always @(posedge Clk)
begin
    if (Reset == 1'b1)
        counter <= 32'd0;
    else begin
        if(Dir == 1'b1)
            counter <= counter + 1;
        else
            counter <= counter - 1;
        end
    end
  
    
endmodule

Testbench

`timescale 1ns / 1ps

module my_counter_tb();
parameter clk_period = 10;

reg Reset, Clk, Dir;
wire [2:0] LED;

my_counter uut(
    .Reset   (Reset),
    .Clk    (Clk),
    .Dir    (Dir),
    .LED     (LED)
    );
    
    initial begin
    Reset = 1'b1;
//    #200;
    #(clk_period*20);
    Reset = 1'b0;
    end
    
    initial Clk = 1'b0;
 //   always #10 Clk = ~Clk;
    always #(clk_period) Clk = ~Clk;
    
 initial begin
    Dir = 1'b0;
    wait (Reset == 1'b0);
    #(clk_period*30);
    Dir = 1'b1;
    #(clk_period*30);
    Dir = 1'b0;
 end
    

endmodule

 

이번 실습은 이 모듈은 카운터의 값에 따라 상위 3비트를 LED에 출력하여 카운터의 상태를 시각적으로 확인해보도록 하겠습니다. Counter의 총 32bit 중에서 상위 3bit에 LED를 할당합니다. 나머지 28:0 bit까지는 숫자가 증가하고 다음 상위비트로 넘어가는 순간 총 7개의 LED 색으로 바뀌게 됩니다.

 

 

 

위는 Counter 변수가 32bit에서 실행했던 Simulation이고 실제로 값이 커서 제대로 된 값을 Simulation에서 측정하기 어렵기 때문에 Counter 변수를 7bit로 수정하여 Simulation을 보여드리도록 하겠습니다.

 

 

Dir이 1로 된 상태에서는 Counter가 증가합니다. 상위 3bit는 LED를 동작시키고 나머지 하위 4bit가 모두 증가하였을 때 다음 bit에 1이 증가하여 LED가 1로 값이 바뀌는 모습을 볼 수 있습니다.

 

상위 3bit 모두 111로 설정이 되어 있어서 LED의 값은 7이 됩니다. (모든 불빛이 다 켜집니다) 그리고 Dir이 0으로 바뀌었기 때문에 counter의 숫자가 감소하게 됩니다.

 

 

이번에도 마찬가지로 Synthesis를 진행하여 핀 배치를 설정합니다.

 

 

 

그 후 Bitstream까지 진행하고 FPGA와 연결하여 보드에서 테스트를 진행합니다.

 

처음에 시작할때는 Dir이 0이기 때문에 Counter가 감소하기 시작하고 버튼을 누르고 있으면 Counter가 증가하여 LED가 반대로 켜지는 걸 확인할 수 있습니다.

 

 

'하만 세미콘 아카데미 > Verilog HDL' 카테고리의 다른 글

Verilog HDL 실습 (Security)  (0) 2024.05.31
Verilog HDL 실습 (FSM)  (0) 2024.05.31
Verilog HDL 실습 (1sec_LED)  (0) 2024.05.31
Verilog HDL 실습 (Parity_bit)  (0) 2024.05.31
Verilog HDL 실습 (Full Adder)  (0) 2024.05.31