이번엔 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 |