Verilog_RTL 설계

[Verilog_RTL]_10-to-2_ENCODER

juniha 2025. 6. 16. 18:54

Symbol

[그림 1] 10-to-2_Encoder_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

[그림 2] Encoder_Schematic

Simultaion

[그림 3] Encoder_Simulation

'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