▶ 목차 ◀1. 서론-. 4-bit ALU에 대하여2. 본론1) 4-bit Arithmetic Logic Shift Unit의 설계(1) 4-bit ALU의 구성(블록도)1) 4-bit arithmetic circuit2) 4-bit logic circuit3) 4 to 1 MUX(2) 4-bit ALU의 기능1) 4-bit arithmetic circuit의 기능2) 4-bit logic circuit의 기능3) 4 to 1 MUX의 기능(4) 4-bit ALU의 진리표2) VHDL을 이용한 4-bit ALU설계3) 시뮬레이션후 출력값 확인3. 결론1. 서론-. 4-bit ALU : 산술 연산기(Arithmetic circuit)와 논리 연산기(Logic circuit), 그리고 멀티플렉서(MUX)를 이용하여 산술연산과 논리 연산을 선택 적으로 모두 실행할 수 있도록 설계된 회로이다.2. 본론1) 4-bit Arithmetic Logic Shift Unit의 설계(1) 4-bit ALU의 구성(블록도){그림 4-bit ALU-. 4bit ALU는 위의 블록도와 같은 구성으로 볼 수 있으며 오른쪽의 MUX에 의하여 여러 기능중 한가지를 선택하여 수행하게 된다. 내부적으로 보이는 구성 요소 들의 블록도는 다음에 차례로 나타내었다.1) 4-bit arithmetic circuit{그림 4-bit Arithmetic circuit-. 4-bit ALU의 구성요소중 하나인 Arithmetic circuit이다. 이는 산술연산기로, ALU에서 산술연산을 할 때 사용된다.2) 4-bit logic circuit{그림 Logic Diagram-. 4-bit logic circuit은 논리연산기로 ALU에서 논리연산을 수행할 때 사용된다. 위의 MUX앞에 보여지는 OR, AND, XOR, NOT게이트로 보아 셀렉터에 따라 위 네가 지 연산중 한가지를 수행함을 알 수 있다.3) 4 to 1 MUX{그림 4x1 MUX-. 4 to 1 MUX의 블록도이다. 이 MUX는 4-bit ALU에서 산술 또는 논리 연산기를 통 해 나온 결과값이 선택되어 원하는 값만 출력되도록 한다.(2) 4-bit ALU의 기능-. 4-bit ALU의 세부적인 기능은 각각의 구성요소가 하는 역할을 알고 그에 대한 진리표를 보면 쉽게 알 수 있다. 4-bit ALU의 기능을 알기 위하여 각 구성요소 의 기능에 대해 알아보면 다음과 같다.1) 4-bit arithmetic circuit의 기능{SelectorInput{YOutput{D = A + Y + C_{i n}Microoperation{S_1{S_0{C_{i n}0000{D=ATransfer A0010{D=A+1Increment A010{B{D=A+BAdd011{B{D=A+B+1Add with carry100{bar B{D = A + bar BSubtract with borrow101{bar B{D = A + bar B +1Subtract1101{D=A-1Decrement A1111{D=ATransfer A표 4-bit Arithmetic circuit의 기능에 대한 진리표-. 4-bit Arithmetic circuit은 산술연산을 수행한다. 위의 표를 보면 셀렉터의 값 의 변화에 따라 ADD, Subtract등을 수행하고 있음을 확인할 수 있다.2) 4-bit logic circuit의 기능{SelectorOutputOperation{S_1{S_000{E=A BIGWEDGE BAND01{E=A BIGVEE BOR10{E=A BIGOPLUS BXOR11{E=barAComplement표 Logic circuit의 기능에 대한 진리표-. logic circuit은 AND, OR 등의 논리 연산을 수행한다. 입력 A, B가 4-bit로 주 어지면 4-bit출력이 나오게 되므로 4-bit logic circuit이라 할 수 있다.3) 4 to 1 MUX의 기능{selectoroutput{S_1{S_0{Y00{I_001{I_110{I_211{I_3표 4x1 MUX의 진리표-. 4x1 MUX는 4개의 입력이 들어왔을 때 셀렉터에 의하여 입력중 한가지만이 출력 으로 결정되도록 해 준다.(4) 4-bit ALU의 진리표-. 이제 4-bit ALU의 모든 기능을 다음 진리표를 통해 확인할 수 있다.{Operation selectOperationFunction{S_3{S_2{S_1{S_0{C_{i n}00000{F=ATransfer A00001{F=A+1Increment A00010{F=A+BAddition00011{F=A+B+1Add with carry00100{F=A+ barBSubtract with borrow00101{F=A+ barB +1Subtraction00110{F=A-1Decrement A00111{F=ATransfer A0100x{F=A BIGWEDGE BAND0101x{F=A BIGVEE BOR0110x{F=A BIGOPLUS BXOR0111x{F= barAComplement A10xxx{F=shrAShift right A into F11xxx{F=shlAShift left A into F표 4-bit ALU의 기능에 대한 진리표-. 위의 표에서 operation열을 보면 이전의 Arithmetic이나 Logic에서 수행한 모든 기능들이 포함되어 있음을 확인할 수 있다. 추가적인 MUX를 통해 이들의 기능을 모두 포함하면서도 필요할 때 원하는 연산만 수행할 수 있게 되어 있다. 맨 위 의 블록도와 비교해서 보면 셀렉터 값이 나누어져 들어가 있는 것을 볼 수 있는 데, 이 셀렉터 값에 의하여 산술연산과 논리 연산말고도 쉬프트 연산을 추가적 으로 행할 수 있음을 진리표를 통하여 알 수 있다.2) VHDL을 이용한 4-bit ALU설계-. 먼저 각각의 구성요소를 설계하고 그를 이용하여 ALU를 설계하는 방법(컴포넌트 구성)을 사용하였다. 이를 위하여 먼저 각 구성요소인 Arithmetic circuit, Logic circuit, 4 to 1 MUX를 설계하였다.***********************Arithmetic Circuit 소스 전문***************************library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity arithmetic isport(SEL : in std_logic_vector(1 downto 0);cin: in std_logic;A: in std_logic_vector(3 downto 0);Y: in std_logic_vector(3 downto 0);D: out std_logic_vector(3 downto 0));end arithmetic;architecture rtl of arithmetic isbeginprocess(SEL,cin,Y,A)beginif(SEL="00") thenif cin='0' thenD
1. Introduction 1) 코드 변환기 : 입력되는 Data는 BCD code이고 두 개의 선택 스위치 A, B가 있다. A가 선택되면 Excess-3 code로, B가 선택되면 Gray code로 변환된 값을 출력하도록 한다. 2) BCD, Excess-3 code, Gray code란? - BCD : 각 자릿수가 고유값인 가중치를 갖는 코드이다. 각 비트수가 왼쪽부터 순서대로 8,4,2,1의 값을 갖는 이진수라고 생각하면 된다. 0부터 9까지를 2진수로 표현한 코드이다. - Excess-3 code(3초과 코드) : BCD코드에 3을 더해서 만든 code이다. - Gray code : 인접한 수가 한 비트만 변하여 만들어진 코드이다. 비가중치 코드로 연산 코드로는 부적합하며 입출력 장치, A/D변환기 등에 유용하다. 3) BCD, Excess-3 code, Gray code의 상호 관계 -위의 표1에서 각각의 코드 내용을 알 수 있다. 코드 변환기를 제작하기 위해 BCD와 Excess-3 code와의 관계, BCD와 Gray code와의 관계를 알아보아야 한다. 위에서 각각의 코드에 대해 설명해 놓은 부분에서 알 수 있듯이, Excess-3 code는 BCD code로부터 3을 더한 코드이다. 한편 Gray code는 BCD code로부터 만들어진 코드가 아니고 네 자리중 한자리씩만 변한 code이므로 각 code의 상호관계를 쉽게 알 수 없다. 각각의 관계에 대하여 알기 위해 카르노 맵을 이용하여 상호관계를 확인해 볼 수 있다. 이는 뒷부분에서 작성할 것이다.
1. 실험 목적1.) 쉬프트레지스터의 구조와 동작원리를 이해2.) 쉬프트레지스터를 이용한 카운터의 동작을 이해2. 실험 원리1.) 쉬프트 레지스터(shift register)-. 쉬프트 레지스터 : 레지스터의 2진 정보를 단방향 또는 양방향으로 이동시킬수 있는 레지스터-. 각 플립플롭 각각의 입력과 출력이 연쇄적으로 연결되어 있는 형태이며 공통의 클럭 펄스가 다음 상태로의 이동을 제어-. 4비트 쉬프트 레지스터2.) 병렬 로드를 가지는 양방향 쉬프트 레지스터-. 일반적인 쉬프트 레지스터의 기능① 모든 동작을 동기화하기 위한 클럭 펄스 입력② 직렬입력 라인, 우측 쉬프트 동작을 수행③ 직렬입력 라인, 좌측 쉬프트 동작을 수행④ 병렬전송을 위한 n개의 입력라인, 병렬 로드 동작을 수행⑤ n개의 병렬 출력라인⑥ 클럭펄스가 계속 입력되더라도 레지스터의 정보가 변하지 않게 하는 제어 상태-. 병렬 로드를 가진 4비트 양방향 쉬프트 레지스터→ 4개의 D플립플롭과 4×1 MUX로 구성→ 2개의 선택 입력으로 레지스터의 동작 모드 결정3.) 직렬 입/출력 쉬프트레지스터-. 한 클럭에 한 비트 데이터가 오른쪽/왼쪽으로 이동4.) Left 쉬프트 레지스터-. Left 쉬프트 레지스터 : 내부에 저장된 2진 정보를 좌측으로 자리이동 시킬 수 있는 레지스터3. 예비문제1.) latch, flip flop 및 register를 비교, 설명하라.-. 래치와 플립플롭은 두 개의 안정 상태를 갖는 일종의 기억 회로이다. 안정 상태란 회로의 외부로부터 입력을 가하지 않은 한 본래의 상태를 유지할 수 있는 상태를 말하는데 두가지 안정된 상태란Q =1,Q'=0인 상태와Q=0,Q'=1인 상태를 말한다.그림에서 입력이 모두 0이거나 1이면 이러한 상태는 유지될 수 없는데, 이때를 불안정한 상태라고 한다.래치와 플립플롭의 차이점은 래치는 레벨트리거(level trigger)에 의해서 동작하여 1-상태인 동안 입력의 변화를 출력으로 바로 내보내지만 플립플롭은 에지 트리거(edge trigger)에 의해서 동작하므로 클럭 펄스가 나타나기 전에는 이전 입력에 의한 출력값이 유지된다.레지스터는 연산된 데이터가 이동될 때까지 대기하고, 이동된 내용이 연산될 때까지 대기시키는 역할을 수행하는 곳이다. 그러므로 레지스터는 기억 기능을 수행하여야 하기 때문에 플립플롭 회로를 사용하여 만들며, 여기에 기억된 데이터는 지시 신호에 의하여 이동한다.2.) 직병렬 쉬프트 레지스터의 동작에 대해 설명하라.-. 직렬로 입력되는 데이터는 쉬프트 레지스터에서 1비트씩 쉬프트시켜 레지스터를 완전히 채운다.레지스터의 내용은 각 플립플롭 회로의 Q 부분에서 직접 출력될 수 있도록 회선을 연결하여 이들 회선에서 각각의 비트들이 동시에 다른 곳으로 전달될 수 있도록 한다.=> 병렬로 입력된 데이터를 레지스터에서 1 비트씩 쉬프트시킬 수 있는 3비트 회로를 설계한 것이다.=>병렬로 입력되는 신호를 쉬프트 레지스터의 입력으로 넣어서 한비트씩 쉬프트 시킨 것을 하나의 출력으로 나오게 하는 병렬입력 직렬 출력 회로이다.3.) 좌우 쉬프트 레지스터의 동작에 대해 설명하라.-. 특정 레지스터에 기억된 내용은 한 비트씩 왼쪽 또는 오른쪽으로 이동시켜 데이터가 직렬식으로 이동되게 할 수 있다. 각 레지스터로 병렬 형태의 전송이 이루어진 후, 이것을 전화선에 1비트씩 차례대로 보내서 하나의 회선으로 데이터가 전달될 수 있도록 하여 데이터 통신 등에서 사용할 수 있게 한다.
1. 실험 결과1.) 실험 1.의 결과를 기입하라.DataCLKABCD1↑10000↑01001↑10101↑11012.) 실험 2.의 결과를 기입하라.clock 수ABCD*************0**************************9***************************************13.) 실험 3.의 결과를 기입하라.clockABCDS**************************101115101114.) 실험 4.의 결과를 기입하라.CLKABCD↑0000↑1000↑1100↑1110↑0111↑0011↑0001↑0000↑1000↑11005.) 실험 5.의 결과를 기입하라.clock 수QAQBQCQDQEQFQGQH100*************00311**************************1**************************11111116.) 실험 6.의 결과를 기입하라.SICLKABCD0↑10000↑11000↑11100↑11111↑01111↑00111↑00011↑00007.) 실험 7.의 결과를 기입하라.modecontrol입 력Cp의인가수출 력XD'C'B'A'DCBA00100100000↑010010100100XXXX1010000XXXX2001000XXXX3000100XXXX4000001XXXX5100001XXXX7010000XXXX8001001XXXX8*************00↑011118111100XXXX9011100XXXX10001100XXXX11000100XXXX12000000XXXX1300002. 비고 및 고찰-. 이번 실험은 쉬프트 레지스터의 동작과 그것을 이용한 카운터의 동작을 확인해 보는 실험이었다. 이번 실험은 회로구성이 복잡하여 회로를 구성하는 데만 해도 상당한 시간이 소요되었다. 이번 실험이 정확하게 되었는지 확인하고 그 원리를 좀더 잘 알아보기 위해 maxplus를 이용하여 시뮬레이션을 해 보았다.실험 1에 대한 실험은 다음과 같다.이 실험은 오른쪽 쉬프트 실험이었다. SI에 차례로 1011을 입력할 경우 SN7474는 상승edge trigger로 하강에서 상승으로 갈 때 데이터를 읽는다. 따라서 클럭이 상승할 때마다 데이터의 출력값이 변하게 되는데, 이때의 A, B, C, D의 출력 값을 살펴보면 한 clock씩 뒤로 밀려서 출력되는 것을 볼 수 있다. 이것은 처음 플립플롭에만 입력을 주어 그 입력으로 그 다음 플립플롭을 동작시키는 직렬입력 방식이며, 각각의 플립플롭에서 나온 출력들을 각각 확인하는 병렬출력 방식이다.실험 2에 대한 시뮬레이션 결과는 다음과 같다.이 실험은 링 카운터를 구성하고 그 출력을 관찰하는 실험이었다. 링 카운터란 1의 입력을 넣었을 때 한 비트씩 1이 이동하는 것으로 어느 한 곳에 1의 출력을 보였을 때 다른 곳에서는 0의 출력이 되어야 한다. 즉, 1의 출력이 겹쳐져서 나오면 안된다. 처음 1의 입력을 넣어 주기 위해서 preset 단자에 0의 입력을 넣어 주었다. SN7474의 경우 preset에 버블이 달려서 not게이트를 통과한 것과 같은 출력이 나타난다. 즉 preset을 구동하기 위해서는 0의 입력이 들어가야 하는데, 이 7474의 preset은 set의 역할로 preset이 구동되면 출력값은 입력값에 관계없이 1의 출력을 보이게 된다. 따라서 한 clock동안 preset에 0의 입력을 주면 첫 번째 D플립플롭이 1로 set된다. 시뮬레이션 한 결과값을 분석해 보면 다음 clock이 들어오기 전 까지 A는 1을 출력하고 다음 clock이 들어오면 0으로 되고 B의 출력값이 1로 그 다음 clock 에서는 B는 0이 되고 C는 1로 이렇게 하여 1의 값이 한 비트씩 이동하여 계속하여 회전하는 값을 보인다. 이것이 링 카운터임을 쉽게 확인할 수 있다. 그런데 실험실에서 실험한 결과를 보면 또다른 clock이 입력 된 후에도 그 전에 있던 1의 값이 사라지지 않고 다른 결과값들과 같이 존재하고 있음을 볼 수 있다. 실험상에 착오가 있어 잘못한 실험임을 알 수 있다.실험 3은 병렬입력 직렬출력 쉬프트 실험이었다. 먼저 CLR단자를 이용하여 Reset시키고 병렬 입력 단자 ABCD에 1011을 입력한다. clock은 상승 edge에서 동작하므로 한 클럭 동안 SI=0, Shift=0으로 입력하였다. 출력을 보면 처음 clock이 가해졌을 때 병렬 입력된 모든 값들이 플립플롭을 통해 입력값으로 들어가면서 SO출력이 1이 나왔고, 그 이후 101이 출력되었다. 이는 1011이 오른쪽으로 한 clock씩 쉬프트되어 출력된 것이다.실험 4는 다음과 같다.이 실험은 clock을 이용한 오른쪽 쉬프트 실험이었다. 처음에는 모두 출력값이 Q=0, Q'=1이다. 따라서 첫 번째 플립플롭의 입력값은 1이 되고 clock이 들어오면 A=1이 된다. 다음 clock이 들어오면 첫 번째 플립플롭의 Q'=0이 되어 첫 번째 플립플롭의 입력값은 0이 되어 A=0으로 바뀌고 그 이전의 A의 출력값이 두 번째 플립플롭으로 들어가서 B의 출력값이 1로 변하게 된다. 이렇게 하여 5 clock의 주기를 갖는 링 카운터의 모양을 하게 된다.위의 실험 시뮬레이션을 보면 각 플립플롭의 출력값 Q'을 AND로 묶어 주었는데, 이것을 실험책의 실험 회로 결선과 다른 모양이다.실험에서의 경우 여러개의 선을 하나로 묶어 연결해 주면 따로 AND게이트를 연결해 주지 않아도 AND의 출력을 보이는데 반해서 시뮬에서는 그런 기능이 되지 않아서 임의로 AND게이트를 하나 넣어주어 하나의 출력값이 나오게 하였다.5번째 실험은 다음과 같다.이 실험은 오른쪽 쉬프트 실험이었다. 이 실험에 쓰인 74164는 오른쪽 쉬프트 소자로서, 입력이 들어오면 이 입력값을 오른쪽으로 옮기는 것인데, 한 clock씩 뒤지면서 8개의 출력 값이 나오게 된다. 위의 결과를 살펴보면 A에 1의 값을 넣어 주었을 경우 그 출력이 처음 QA에 나타나게 되고 그 다음 한 clock후에 QB에 그다음 QC에 차례대로 나타나게 된다.6번째 실험은 직렬 입력 병렬 출력 오른쪽 쉬프트 레지스터에 대한 실험이다. A보다 B가 B보다 C가 C보다 D가 한 clock씩 늦어지면서 입력된 값이 그대로 출력됨을 알 수 있다.실험 7은 다음과 같다.이 실험은 직병렬 쉬프트 레지스터에 대한 실험이었다. 직병렬의 변환은 control신호에 의해서 좌우되는데, control신호에 1의 입력이 들어가면 입력 값에 의해 preset과 clear에 들어가는 입력 값이 좌우되게 된다. control신호가 1일 경우 입력 값이 1이면 오른쪽 NAND 게이트가 동작하여 preset에 0의 입력을 주게 된다. 그러면 출력 값이 무조건 J-K의 입력 값과 상관없이 1의 출력을 보이게 된다. 즉 직렬 입력 값이 들어가지 않게 되는 것이다. 0의 입력이 들어갈 경우 왼쪽 NAND게이트가 동작하여 clear단자에 0의 입력이 들어가 입력 값과 관계없이 0의 출력을 보이게 된다. 따라서 control 신호가 1의 입력이면 병렬 입력 쉬프트 레지스터가 되는 것이다.control신호가 0일 경우 두 개의 NAND게이트 모두 1의 출력을 내보내서 preset과 clear모두 동작하지 않게 된다. 이것은 직렬 입력에 의해 출력 값이 결정되는 것을 의미한다. 직렬 입력 쉬프트 레지스터가 되는 것이다. 이럴 경우 입력 inputx에 의해서 출력값이 결정된다. 출력 A에 대해서 한 clock씩 늦게 B, C, D의 출력값이 나타나는 것을 위의 결과에서 눈으로 확인할 수 있다.
1. 실험 목적1.) 동기 계수기의 구조와 동작을 이해한다.2.) 임의의 mod 동기 계수기를 설계하는 방법을 익힌다.2. 실험 원리-. 동기식 계수기 : 공통의 clock신호에 맞추어 플립플롭들이 동시에 상태를 바꾸어 가는 회로→ 전달 지연이 작음 → 빠른 clock신호에 의해 구동가능-. 동기식 계수기는 한번의 클럭펄스의 변화가 모든 단을 트리거 시키므로 순간적 동작형의 카운터라 할 수 있다.-. 동기식 계수기의 설계 방법① 설계하려는 카운터의 계수표 작성② 원하는 단수에 필요한 입력을 갖는 동기식 카운터를 그림③ 계수표와 여기표를 이용하여 각 단의 J와 K입력에 대한 카르노 맵을 구함④ 완성된 동기식 카운터의 회로를 그림-. 동기식 계수기-계수 방향에 따라..① Up counter② Down counter-. JK플립플롭을 사용하여 모든 앞단의 출력들을 AND계수기로 모아 다음 단의 입력에 동시에 넣게 되면 2진 Up counter를 만들 수 있다.-. 리플 캐리 계수기(ripple carry counter) : 동기식과 비동기식의 절충형. 비동기식보다 전송지연이 작고 동기식보다 회로가 간단하다.-. 링 계수기(ring counter) : 쉬프트 레지스터가 이에 포함. 효과적으로 자신의 상태를 부호화 하지 못함3. 예비 문제1.) JK플립플롭을 이용한 동기식 감산 16진 카운터를 설계하고 각 지점의 파형을 도시하라.-.2^n진 카운터를 만들기 위해서는 n개의 플립플롭이 필요하다. 16진 카운터를 만들기 위해 JK 플립플롭 네 개를 연결하여 4단으로 된 감산 카운터를 만든다. 16진 감산 카운터는 16부터 하나씩 빼는 것과 같은 순서로 카운트된다. 즉 아래 표와 같이 1111→1110→1101 식으로 카운트된다.위의 4단으로 연결된 JK플릅플롭에서 초음에 모두 1이 기억된 상태에서 clock펄스가 인가될 때 마다 1씩 감소하게 된다. 그리고 0000이 되었을 때 그 다음번은 다시 1111이 되어 계속 반복된다.