Altifigence Academy

11 / 63 · 개념

디코더, 원핫 선택과 유효 입력

이진 주소를 개별 선택선으로 바꾸고, enable의 동작과 유효한 주소 범위, 선택선이 지켜야 할 조건을 정합니다.

주소를 선택선으로 변환하기

NN비트 디코더디코더 이진 코드에 대응하는 출력 선을 활성화하는 회로입니다. enable이 있으면 비활성일 때 모든 출력을 0으로 만들 수 있습니다.는 입력 주소에 따라 최대 2N2^N개의 출력 중 하나를 활성화합니다. enable ee가 있는 출력 did_i는 다음처럼 정의할 수 있습니다.

di=e∧(a=i)d_i=e\land(a=i)

2-to-4 디코더에서는 d0=ea‾1a‾0d_0=e\overline a_1\overline a_0, d1=ea‾1a0d_1=e\overline a_1a_0, d2=ea1a‾0d_2=ea_1\overline a_0, d3=ea1a0d_3=ea_1a_0입니다. enable이 0이면 출력은 모두 0이고, 1이면 정확히 하나만 1입니다.

enable=1에서 주소 a1a0를 바꾸면 d0~d3 중 하나만 켜집니다. enable을 0으로 바꿔 모든 선택선이 꺼지는지도 확인하세요.

주소에서 원핫 선택선으로

d[i] = enable AND (2 × a1 + a0 = i)

모든 입력에서 출력값을 정해야 합니다

SystemVerilog
module decoder2 (
  input logic en,
  input logic [1:0] addr,
  output logic [3:0] select
);
  always_comb begin
    select = 4'b0000;
    if (en) begin
      case (addr)
        2'd0: select = 4'b0001;
        2'd1: select = 4'b0010;
        2'd2: select = 4'b0100;
        2'd3: select = 4'b1000;
        default: select = 4'b0000;
      endcase
    end
  end
endmodule

처음에 기본값을 대입하면 모든 실행 경로에서 출력값이 정해져 이전 값을 기억하지 않습니다. always_comb라는 이름만 붙인다고 값을 대입하지 않은 분기가 자동으로 보완되는 것은 아닙니다.

출력 개수가 2의 거듭제곱이 아닐 때

10개 장치를 선택하려면 4비트 주소가 필요하지만 10~15는 유효하지 않습니다. 이 경우에는 모든 출력을 0으로 두고 오류 플래그를 1로 설정하는 등 처리 방식을 명세해야 합니다. 사용하지 않는 코드라는 이유만으로 임의의 출력이 허용되는 것은 아닙니다.

검증에서는 입력과 출력의 대응뿐 아니라 여러 선택선이 동시에 켜지지 않는가, disable이면 모두 꺼지는가를 검사합니다. 이런 불변식불변식 모든 허용 실행에서 항상 참이어야 하는 조건입니다. 예를 들어 깊이 4인 FIFO의 저장 개수는 항상 0 이상 4 이하입니다. 자세히 보기은 메모리 write enable이나 버스 선택 회로에서 특히 중요합니다. 디코더의 출력 수가 늘어날수록 주소 신호의 팬아웃과 배선 부하도 커지므로 계층적 디코딩을 고려하게 됩니다.

직접 생각해 보기

출력이 10개인 주소 디코더를 설계합니다. 필요한 주소 폭, 유효하지 않은 입력 수, en=0일 때 반드시 만족할 조건을 정하세요.

해설 보기

주소는 ⌈log⁡210⌉=4\lceil\log_2 10\rceil=4비트, 유효하지 않은 코드는 6개입니다. en=0이면 주소와 관계없이 모든 선택선이 0이어야 합니다. 유효하지 않은 주소에서도 모두 0으로 두고 별도 오류를 표시하는 명세를 선택할 수 있습니다.

선택은 이 브라우저에만 적용됩니다. 언제든 푸터에서 변경할 수 있습니다.