SystemVerilog 기반의 논리 회로 설계(강의용) - 4장 조합 논리 회로 설계

4816 단어 HDLSystemVerilog

제4장 조합 논리 회로의 설계


이 장에서 alwayscomb문 디자인 가법기, 인코더, 다중 복용기 등 조합 논리 회로를 사용하는 방법을 배웁니다.

4비트 가법기


제2장 목록 2.10에서 보여준 4위 가법기adder 모듈은 목록 4.1과 같다comb문구로도 기술할 수 있다.
<목록 4.1 adder 모듈(4비트 가법기)>
module adder(
  input   logic [3:0] a,
  input   logic [3:0] b,
  output  logic [3:0] sum,
  output  logic       carry
);

  always_comb begin
    {carry, sum} = a + b;
  end

endmodule
always_comb 문장은 신호가 변할 때 시작되며,begin~end로 둘러싸인 부분을 실행하는 회로를 구축합니다.
always_comb문에서의 대입은 레지스터를 설계할 때 사용하는 비저항 대입<=이 아니라 사용=이다.
이것=의 대입을 막힌 대입이라고 한다.
조합 회로comb문구를 사용하여 디자인을 할 때 원칙적으로 폐쇄대입=을 사용하는 것이 좋은 습관이다.
트리거를 사용하는 회로 설계에서 비저항 대입<=을 사용하고 조합 논리 회로의 설계에서 차단 대입=을 미리 사용하면 어느 회로를 기술했는지 쉽게 나타낼 수 있다.

연습하다


실습판 DE0-CV에 목록 4.1의 adder 모듈을 설치하여 동작을 확인합니다.
adder 모듈의 입력 출력 신호는 표4.1처럼 DE0-CV의 입력 출력 장치에 분배됩니다.
<표 4.1 adder 모듈의 입력 출력 장치 할당>
신호 이름
장치 지정
입출력
a[3:0]
SW7-SW4
input
b[3:0]
SW3-SW0
input
carry
LEDR9
output
y[3:0]
LEDR3-LEDR0
output

7단 디코더


표4.2의 진리치표에서 제시한 조합 논리 회로 sseg4-bit의 입력 신호num[3:0]과 7-bit의 출력 신호 y[6:0]의 관계디자인 decorder를 고려하다(그림4.1).

<그림 4.17 세그먼트 디코더 ssegdecoder>
<표4.ssegdecorder 모듈의 진리 값표>
num[3:0] 입력
출력 y[6:0]
0000
1000000
0001
1111001
0010
0100100
0011
0110000
0100
0011001
0101
0010010
0110
0000010
0111
1011000
1000
0000000
1001
0010000
1010
0001000
1011
0000011
1100
0100111
1101
0100001
1110
0000110
1111
0001110
이렇게 하면 진리 값표를 제공하는 조합 회로는case 문장을 사용하여 설계할 수 있다.
목록 4.2의 ssegdecorder 모듈의 설명 예시를 표시합니다.
<목록 4.ssegdecorder 모듈(7단 디코더)>
module sseg_decoder(
  input   logic [3:0]   num,
  output  logic [6:0]   y
);

  always_comb begin
    case (num)
      4'b0000  : y = 7'b100_0000;
      4'b0001  : y = 7'b111_1001;
      4'b0010  : y = 7'b010_0100;
      4'b0011  : y = 7'b011_0000;
      4'b0100  : y = 7'b001_1001;
      4'b0101  : y = 7'b001_0010;
      4'b0110  : y = 7'b000_0010;
      4'b0111  : y = 7'b101_1000;
      4'b1000  : y = 7'b000_0000;
      4'b1001  : y = 7'b001_0000;
      4'b1010  : y = 7'b000_1000;
      4'b1011  : y = 7'b000_0011;
      4'b1100  : y = 7'b010_0111;
      4'b1101  : y = 7'b010_0001;
      4'b1110  : y = 7'b000_0110;
      4'b1111  : y = 7'b000_1110;
      default  : y = 7'b111_1111; // 上記で全パターン尽くされているのでこのdefaultは実際は不要
    endcase
  end

endmodule
진리 값표는 거의 고스란히 케이스에 나타난다
나는 카스어의 작용을 대충 알 수 있다고 생각한다.
예를 들어, num = 4'b 1010 (=4'hA) 의 경우 7'b0001000을 Y로 출력합니다.
케이스 문구를 사용하여 조합 논리 회로를 설계할 때 모든 입력 모드를 설명해야 합니다.
필요에 따라default 문장 등을 사용하여 모든 입력 모드를 다 사용합니다.

연습하다


목록 4.3의 sseg실습 보드 DE0-CV에 decorder 모듈을 설치하여 동작을 확인합니다.
sseg_decorder 모듈의 입력 출력 신호는 표 4.3처럼 DE0-CV의 입력 출력 장치에 분배됩니다.
<표 4.3 ssegdecorder 모듈의 입력과 출력을 장치에 할당 >
신호 이름
장치 지정
입출력
num[3:0]
SW3-SW0
input
y[6:0]
HEX06-HEX00
output

다중 복용기


설계도4.2와 같은 4 입력 다중 복용기를 고려한다.
표 4.4에 이 4 입력 다중복용기 mux4의 기능표를 표시합니다.

<그림 4.24 입력 재사용기 mux4>
<표 4.4mux4 모듈의 기능 표>
신호sel[1:0] 선택
출력 y
00
d0
01
d1
10
d2
11
d3
mux4 모듈은 목록 4.3과 같은case 문장을 사용하여 설명할 수 있습니다.
<목록 4.3mux4 모듈>
module mux4 (
  input   logic [1:0] sel, // 選択信号
  input   logic [1:0] d0,
  input   logic [1:0] d1,
  input   logic [1:0] d2,
  input   logic [1:0] d3,
  output  logic [1:0] y
);

  always_comb begin
    case (sel)
      2'b00   : y = d0;
      2'b01   : y = d1;
      2'b10   : y = d2;
      2'b11   : y = d3;
      default : y = 2'b00; // 上記で全パターン尽くされているのでこのdefaultは実際は不要
    endcase
  end

endmodule // mux4

연습하다


실습 보드 DE0-CV에 목록 4.3의 mux4 모듈을 설치하여 동작을 확인합니다.
mux4 모듈의 입출력 신호는 표 4.5와 같이 DE0-CV의 입출력 장치에 분배됩니다.
<표 4.5mux4 모듈의 입력 출력 장치 할당>
신호 이름
장치 지정
입출력
sel[1:0]
SW9-SW8
input
d0[1:0]
SW7-SW6
input
d1[1:0]
SW5-SW4
input
d2[1:0]
SW3-SW2
input
d3[1:0]
SW1-SW0
input
y[1:0]
LEDR1-LEDR0
output

좋은 웹페이지 즐겨찾기