Counter 설계
설계 요구사항
- CLK의 상승 Edge마다 up_down 신호가 High면 내부 32bit Counter가 증가, Low면 감소
- 상위 3bit를 LED를 활용하여 출력 동작 확인
`timescale 1ns / 1ps
module my_count(
input RST,
input CLK,
input DIR,
output [2:0] LED
);
reg [31:0] cnt; //32bit register로 cnt 값 저장
assign LED = cnt[31:29]; // cnt의 상위 3 bit LED 출력으로 할당
always @(posedge CLK) // CLK 의 신호 상승 Edge가 감지될 때마다.
begin
if(RST == 1'b1) // Reset 신호가 1일 경우,
cnt <= 32'd0; // cnt를 0으로 초기화
else begin
if(DIR == 1'b1) // DIR 신호가 1일 경우,
cnt <= cnt + 1; // cnt를 1 증가
else // DIR 신호가 0이면,
cnt <= cnt - 1; // cnt 1 감소
end
end //always
endmodule
위 코드는 counter 작성 Design source 코드 입니다. 우선 위와 같이 코드를 작성 후,
Schematic을 확인 한 후에
I/O 설정 까지 마무리 하고 정상 작동되는지 확인합니다.
처음 Testbench를 하는 것이기 때문에 H/W에서 정상작동 되는 것을 우선 확인 한 후에 Testbench 코드를 추가하여 작성할 것입니다.
Testbench
`timescale 1ns / 1ps
module my_cnttb();
parameter clk_period = 10;
reg RST, CLK, DIR; // Register 선언 : Testbench에서는 입력신호를 모방하기 위해서 Register를 사용함.
wire [2:0] LED; // wire 선언 : 출력 신호를 관찰하기 위해 wire 변수 사용.
// Unit Under Test의 약자로 테스트 대상 단위를 의미함.
my_count uut ( // 모듈 인스턴스화 : 모듈을 인스턴스화 하고 Testbench의 신호를 모듈의 포트에 연결합니다.
.RST (RST),
.CLK (CLK),
.DIR (DIR),
.LED (LED)
);
initial begin // 초기화 Block : 시뮬레이션의 초기 조건 설정
RST = 1'b1; // 1 sig = Reset sig 활성화
#(clk_period * 20); // 200 대기
RST = 1'b0; // 0 sig = Reset sig 비활성화
end // initial rst
initial CLK = 1'b0; // CLK 초기값 0으로 설정
always #clk_period CLK = ~CLK; // 10ns 마다 CLK 신호를 반전시킨다.
initial begin
DIR = 1'b0; // DIR 초기값 0. 시작방향 설정
wait (RST == 1'b0); // RST가 0이 될떄 까지 기다린다.(RST 신호 비활성화를 기다린다.)
#(clk_period * 30); // 300 시간 단위만큼 대기. 시뮬레이션에서의 지연.
DIR = 1'b1; // DIR을 1로 변경(방향 반대로 전환)
#(clk_period * 30); // 300 시간 단위만큼 대기. 변경된 방향의 지속시간.
DIR = 1'b0; // DIR을 0으로 변경(원래 방향으로 복귀)
end
endmodule
Test값이 H/W에 적용된 값과 일치하는 지 확인합니다.
'Circuit Design > 🔥HDL' 카테고리의 다른 글
[Verilog] 5. FSM Demo. (1) | 2024.04.26 |
---|---|
[Verilog] 4. 1 Sec Counter- (Cora-z7) (0) | 2024.04.01 |
[Verilog] 2. 2Bit Adder - (Cora-z7) (0) | 2024.03.29 |
[Verilog] 1. Vivado 전가산기(Full Adder) - (Cora-z7) (0) | 2024.03.29 |
[Verilog] 0. VIVADO project 만들기 - 2(Cora-z7) (0) | 2024.03.19 |