You are on page 1of 3

430.

201A 논리설계 및 실험 (2023-1)

5. 실험 내용 (실험 시간에 할 것)
*이번 실험에서는 assign = a & b; 와 같은 assign 문을 활용해도 됩니다.*

① 2:4 DEMUX를 Verilog 로 구현한 후, simulation 상으로 검증하시오.

② 4to1 MUX를 Verilog 로 구현하시오.

단, always 문이나 assign 문을 활용하여 구현하시오. (lab1 자료 참고)

③[3.prelab]에서 완성한 회로를 solution.v 파일에 구현하여 simulation 상으로 검증하시오.

④4 비트 ALU 의 구조

이번 문항에서 구현해야 할 4 비트 ALU 의 입출력을 살펴보면 [그림 6-4]와 같다. 그림에서 보듯이
두 개의 4-bit data A(A3, A2, A1, A0), B(B3, B2, B1, B0)를 입력으로 하고 4 비트 출력 F(F3, F2, F1,

F0)가 있고, 여기에 입력 값에


따른 연산 동작을 결정하는 4 비트
제어신호 S, 캐리 입력 C , 캐리 IN

출력 C OUT 이 있다.

4 개의 제어신호에 따라 수행해야
할 연산을 나타내면 [표 6-3]와 같다.

[표 6-3]에서는 4 비트의 버스를


사용한다고 가정할 때 동일한
버스에서 제어신호를 전송하여 ALU
의 연산을 제어할 수 있도록
설계되었다. 또한 4 비트의 ALU 는
CIN 과 COUT 을 처리할 수 있기
때문에 8 비트, 16 비트, 32 비트
그림 6-4: 4 비트 ALU 의 구조
등으로 확장하여 사용할 수 있다.

해당 ALU를 Verilog 를 사용하여 구현한 후, simulation 상으로 검증하여라.


표 6-3: 동작 제어 신호에 따른 연산

제어 신호
연산
S3 S2 S1 S0

0 0 0 0 Logical 0

0 0 0 1 Logical 1

0 0 1 0 B

0 0 1 1 ~B

0 1 0 0 A and B

0 1 0 1 A or B

0 1 1 0 A xor B

0 1 1 1 B Logical Shift Right

1 0 0 0 B Logical Shift Left

1 0 0 1 B Arithmetic Shift Right

1 0 1 0 A+B

1 0 1 1 B increment

1 1 0 0 Reserved

1 1 0 1 Reserved

1 1 1 0 Reserved

1 1 1 1 Reserved
430.201A 논리설계 및 실험 (2023-1)

6. 토론 및 고찰사항 (결과 레포트)


1. 2:4 DEMUX의 진리표를 작성하여 behavior를 해석한 후, 실험 5-1에서 구현한 코드에 어떻게
반영되었는지 설명하시오. 또한, testbench를 동작시킨 결과의 waveform을 통해
testbench에서 주어진 입력에 대해 올바르게 동작하고 있음을 보이시오. 필요시, K-MAP을
사용하여 진리표를 최적화한 후 코드 설명 및 testbench waveform의 동작을 설명해도된다.
(코드 및 waveform 첨부 필수)

2. 4:1 MUX에 대하여, 1번과 동일한 과정을 수행하시오 (코드 및 waveform 첨부 필수)

3. PreLab에서 구현한 수식 F를 실험에서 solution.v에 구현하였다. 해당 solution.v 코드를


설명하고, 수식 F가 어떤 과정을 통해 구현되었고, waveform에 나타나는지 설명하시오. 이 때,
MUX와 DEMUX 각각의 입력 및 출력의 값들이 올바르게 구현되었음을 waveform의
중간값들을 통해서 보이며, 단계별로 설명하시오. (코드 및 waveform 첨부 필수)

4. 5-4 문항에서 우리는 4-bit data를 입력으로 받아 다양한 연산을 수행하는 ALU를 구현하였다.
표 6-3의 연산들이 코드에 어떻게 구현되었는지 설명하고, testbench의 동작을 waveform을
통해서 설명하시오. (코드 및 waveform 첨부 필수)

5. 우리는 5-4문항의 ALU를 구현함에 있어 case 문을 활용해서 combinational logic을


구현하였다. Case 문 외에도, 그동안 이전 실험에서 사용한 assign 문법과 if 문을 사용해서도
같은 기능을 수행하도록 구현할 수 있다. 두가지 다른 구현 방법을 통해 verilog로 ALU 코드를
작성한 후, 이에 대해 설명하시오 (case문을 사용한 코드, assign 문을 사용한 코드, if문을
사용한 코드를 각각 첨부하여 비교분석). 또한, 각 문법이 지니는 장단점에 대해서 (필요시
검색하여) 설명하시오.

6. case문을 사용하기 위해서는, 우선 always 문을 사용하여야 한다. Always 문에 대해 설명하고,


사용하는 방법에 대해 설명하시오. 특히, always@(logic)으로 시작할 때, ‘logic’ 자리에
들어가는 문구의 기능에 대해 설명하시오. (note: 예시로, 실험에서 구현한 ALU의 always 문은
always @ (ctrl_s or in_a or in_b)로 시작한다. 이 때, 괄호 안의 코드의 기능에 대해 설명하면됨)

You might also like