Symbol

사용 코드_case 문
|
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
|
module tb_encoder;
reg [9:0] iIN; // 10비트 입력: 키패드 입력을 시뮬레이션하기 위한 레지스터
wire [3:0] oOUT; // 4비트 출력: encoder 모듈의 출력 관찰용
// 테스트할 encoder 모듈 인스턴스화
encoder U0 (
.iIN (iIN), // iIN 신호를 encoder의 iIN에 연결
.oOUT (oOUT) // encoder의 oOUT을 oOUT wire에 연결
);
// 초기 블록: 시뮬레이션 시작 시 한 번 실행
initial begin
// 각 키패드 입력을 100 단위 시간 간격으로 순차적으로 적용
iIN = 10'b00_0000_0001; #100; // Key 0 입력
iIN = 10'b00_0000_0010; #100; // Key 1 입력
iIN = 10'b00_0000_0100; #100; // Key 2 입력
iIN = 10'b00_0000_1000; #100; // Key 3 입력
iIN = 10'b00_0001_0000; #100; // Key 4 입력
iIN = 10'b00_0010_0000; #100; // Key 5 입력
iIN = 10'b00_0100_0000; #100; // Key 6 입력
iIN = 10'b00_1000_0000; #100; // Key 7 입력
iIN = 10'b01_0000_0000; #100; // Key 8 입력
iIN = 10'b10_0000_0000; #100; // Key 9 입력
iIN = 10'b00_0000_0000; #100; // 아무 키도 눌리지 않은 상태 (default case 동작 확인)
end
endmodule
|
cs |
사용 코드_Testbench
|
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
32
33
34
35
36
37
38
|
module encoder (iIN, oOUT);
input [9:0] iIN; // 10비트 입력: 키패드의 10개 키 각각에 대응 (1-hot encoding)
output [3:0] oOUT; // 4비트 출력: 눌린 키에 해당하는 4비트 코드 값
reg [3:0] out; // always 블록 내에서 사용될 레지스터형 변수 (oOUT에 할당될 값)
// 입력 iIN의 변화가 있을 때마다 동작
always @(iIN) begin
case(iIN)
// iIN 비트 위치별 키패드 번호:
// 비트 0 -> 키 0
// 비트 1 -> 키 1
// 비트 2 -> 키 2
// 비트 3 -> 키 3
// 비트 4 -> 키 4
// 비트 5 -> 키 5
// 비트 6 -> 키 6
// 비트 7 -> 키 7
// 비트 8 -> 키 8
// 비트 9 -> 키 9
10'b00_0000_0001 : out = 4'b0000; // 입력 0번 키 -> 출력 0
10'b00_0000_0010 : out = 4'b0001; // 입력 1번 키 -> 출력 1
10'b00_0000_0100 : out = 4'b0010; // 입력 2번 키 -> 출력 2
10'b00_0000_1000 : out = 4'b0011; // 입력 3번 키 -> 출력 3
10'b00_0001_0000 : out = 4'b0100; // 입력 4번 키 -> 출력 4
10'b00_0010_0000 : out = 4'b0101; // 입력 5번 키 -> 출력 5
10'b00_0100_0000 : out = 4'b0110; // 입력 6번 키 -> 출력 6
10'b00_1000_0000 : out = 4'b0111; // 입력 7번 키 -> 출력 7
10'b01_0000_0000 : out = 4'b1000; // 입력 8번 키 -> 출력 8
10'b10_0000_0000 : out = 4'b1001; // 입력 9번 키 -> 출력 9
default : out = 4'b1111; // 입력 값이 1-hot이 아니거나 유효하지 않을 때 -> 에러 코드 1111
endcase
end
// always 블록에서 계산된 out 값을 oOUT에 연결
assign oOUT = out;
endmodule
|
cs |
Schematic

Simultaion

'Verilog_RTL 설계' 카테고리의 다른 글
| [Verilog_RTL]_7-Seg_DECODER (0) | 2025.06.20 |
|---|---|
| [Verilog_RTL]_2-to-10_DECODER (0) | 2025.06.16 |
| [Verilog_RTL]_Binary_BCD 변환기 (0) | 2025.06.14 |
| [Verilog_RTL]_4BIT_ALU (0) | 2025.06.14 |
| [Verilog_RTL]_LOGIC_GATE (0) | 2025.06.14 |