880 likes | 1.19k Views
조합 논리 함수. 단원목차. 1. 디코더 (Decoders) 2. 엔코더 (Encoders) 3. 멀티플렉서 (Multiplexers) 4. 디멀티플렉서 (Demultiplexers) 5. 크기 비교기 (Magnitude Comparators) 6. 패리티 생성기 및 검사기 (Parity Generators and Checkers). 기본 디코더. Decoder : 특정한 디지털 상태의 존재를 검출하는 디지털 회로 하나나 복수의 출력을 가질 수 있다 .
E N D
단원목차 1. 디코더(Decoders) 2. 엔코더(Encoders) 3. 멀티플렉서(Multiplexers) 4. 디멀티플렉서(Demultiplexers) 5. 크기 비교기(Magnitude Comparators) 6. 패리티 생성기 및 검사기(Parity Generators and Checkers)
기본 디코더 • Decoder : 특정한 디지털 상태의 존재를 검출하는 디지털 회로 • 하나나 복수의 출력을 가질 수 있다. • Example : 2-Input NAND Gate는 입력 상에 ‘11’를 검출하여 출력에 ‘0’을 발생한다.
Single Gate 디코더(1) • 단일 게이트(AND/NAND)와 몇 몇 Inverter를 사용한다. • Example: 4-Input AND는 입력에 ‘1111’를 검출하여 출력에 ‘1’을 발생시킨다. • 입력은 D3,D2,D1,D0로 표기되고, D3는 MSB(most significant bit), D0는 LSB (least significant bit)가 된다. • See Figure 5.1
Single Gate 디코더(2) Figure 5.1
Single Gate 예 • 만약 4-Input NAND 게이트의 입력이 !D3, !D2, !D1, D0로 주어진다면, NAND 게이트는 0001 코드를 검출한다(! = NOT). • 코드가 0001일 때 출력은 0이 된다. • 이 같은 디코더 형태는 PC 시스템에서 어드레스 디코더로 사용된다.(예 5.2)
다중 출력 디코더 • n개의 입력을 가진 디코더는 m= 2n개의 load circuit을 활성화 시킬 수 있다. • 2 to 4 또는 3 to 8 디코더와 같이 n-line to m-line 디코더라 불린다. • 일반적으로 디코더 출력을 활성화 시키기 위해 active low enable 입력 !G를 가진다.
3 to 8 디코더 회로 Figure 5.6
디지털 시뮬레이션 • Simulation : CPLD내에 설계 결과를 프로그램 하기 전에 타이밍 도를 사용하여 설계내용을 검증하는 과정 • 타이밍 도 상의 입력 스티뮬러스에 대한 출력 응답을 체크한다. • See Figure 5.8
디지털 시뮬레이션 Figure 5.8
MAX+PLUSII 시뮬레이션 • 기본과정 • 1. Enter Nodes from SNF (on Node Menu) • 2. Set End Time (File Menu) for length • (default = 1.0us) • 3. Set Grid Size (Options Menu) : 시뮬레이션 시 최소시간을 결정 • Fig. 5.9 ~ 5.15 참조 • 4. Use Toolbar to set input stimulus • 5. Open Simulator Engine, Press Start
시뮬레이션 결과(open .scf file) Figure 5.21
2 to 4 디코더의 VHDL Entity --Basic VHDL Entity for I/O ENTITY decode1 IS PORT(D1,D0 : IN BIT; Y0,Y1,Y2,Y3 : OUT BIT); END decode1; • 만약 입력과 출력포트가 std_logic type가 아닌 bit type으로 선언되면 • IEEE library 구문이 필요 없다.
2 to 4 디코더의 VHDL Architecture -- Use Concurrent Signal Assignment ARCHITECTURE decoder OF decode1 IS BEGIN Y0 <= (not D1) and (not D0); Y1 <= (not D1) and (D0); Y2 <= (D1) and (not D0); Y3 <= (D1) and (D0); END decoder;
VHDL Architecture • Data Flow Architecture는 병행적 신호 할당(concurrent signal assignments)을 사용한다. (Boolean eqs.) • 병행적 신호(Concurrent Signals): 모든 출력은 동일한 시간에 바뀐다. 즉, 순차적으로 바뀌지 않는다. (순서는 중요하지 않다.) • 조합논리회로 설계에 가장 보편적으로 사용되는 구조이다. • Dataflow Description : 함수적 기술 • Structural Description : 하드웨어적 기술 • Behavioral Description : 행위적 기술 • Hierarchical Description : 데이터플로우 + 구조적 기술
선택적 신호 할당(Selected Signal Assignments) • WITH SELECT의 VHDL Architecture 구문을 사용한다. • 기본형식: • WITH (signal input(s)) SELECT • signal input states are used to define the output state changes.
디코더의 VHDL Entity • Basic Entity for Selected Signal ENTITY decode1 IS PORT( D : IN STD_LOGIC_VECTOR(1 downto 0); Y :OUT STD_LOGIC_VECTOR(3 downto 0)); END decode1;
Selected Signal Entity • 이전 슬라이드에서 Entity는 입력과 출력을 위해 STD LOGIC 배열을 사용했다. • The Y : OUT STD_LOGIC_VECTOR(3 downto 0)는 Y3, Y2, Y1, Y0을 의미한다. • The STD_LOGIC 데이터 형식은 BIT 형식과 유사하지만 단지, 0과 1외에도 Z, X, H, L 등도 올 수 있다.
Selected Signal Architecture • Basic Architecture ARCHITECTURE decoder OF decode1 IS BEGIN WITH D SELECT Y <= “0001” WHEN “00”, “0010” WHEN “01”, “0100” WHEN “10”, “1000” WHEN “11”, “0000” WHEN OTHERS; END decoder;
디코더 Architecture • 이전 Architecture는 출력 Y를 결정하기 위해서 ‘SELECT’를 사용하여 ‘D’를 평가하였다. • D와 Y는 어레이 데이터 형식으로 사용되었다.(버스 혹은 벡터). • 마지막 구문인 ‘WHEN OTHERS’는 other logic states (Z, X, H, L, etc.)를 위해 사용되었다.
조건적 신호 할당(Conditional Signal Assignments) • VHDL Architecture는 ‘WHEN ELSE’를 사용한다. • 기본형식: • WHEN조건(부울식) ELSE • 해당 조건에 부합되면 실행
Conditional Signal Architecture • Basic Architecture ARCHITECTURE decoder OF decode1 IS BEGIN Y <= “0001” WHEN D = “00” ELSE “0010” WHEN D = “01” ELSE “0100” WHEN D = “10” ELSE “1000” WHEN D = “11” ELSE “0000” ; END decoder; 순차적으로 평가 (서로 종속적) Altera는 CPLD 내부회로의 효율성을 위해 “conditional signal assignment” 보다 “selected signal assignment”를 사용하기를 권한다. (Golden Rules)
Enable 입력을 갖는 디코더 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY decode3a IS PORT( d : IN STD_LOGIC_VECTOR (1 downto 0); g : IN STD_LOGIC; y : OUT STD_LOGIC_VECTOR (3 downto 0)); END decode3a; ARCHITECTURE decoder OF decode3a IS SIGNALinputs : STD_LOGIC_VECTOR (2 downto 0); BEGIN inputs(2) <= g; inputs (1 downto 0) <= d; WITH inputs SELECT y <= "0001" WHEN "000", "0010" WHEN "001", "0100" WHEN "010", "1000" WHEN "011", "0000" WHEN others; END decoder;
정수형을 갖는 디코더 LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY decode4g IS PORT( d : IN INTEGER Range 0 to 3; g : IN STD_LOGIC; y : OUT STD_LOGIC_VECTOR (0 to 3)); END decode4g; ARCHITECTURE a OF decode4g IS BEGIN y <= "1000" WHEN (d=0 and g='0') ELSE "0100" WHEN (d=1 and g='0') ELSE "0010" WHEN (d=2 and g='0') ELSE "0001" WHEN (d=3 and g='0') ELSE "0000"; END a;
Report File (.rpt) : 일부 ** EQUATIONS ** d0 : INPUT; d1 : INPUT; g : INPUT; -- Node name is 'y0' -- Equation name is 'y0', location is LC118, type is output. y0 = LCELL( _EQ001 $ GND); _EQ001 = !d0 & !d1 & !g; -- Node name is 'y1' -- Equation name is 'y1', location is LC115, type is output. y1 = LCELL( _EQ002 $ GND); _EQ002 = d0 & !d1 & !g; - - 계속 - ! = NOT & = AND # = OR $ = XOR
Seven Segment Displays I • Seven Segment Display: 8자 모양으로 구성된 7개의 LED들이 독립적으로 제어되어 십진 수를 표시하는 소자 • 공통 양극 디스플레이(CA): LED의 모든 양극이 공통으로 Vcc에 연결되어 로직 ‘0’일 때 세그먼트를 턴온 시킨다.(a to g).
Seven Segment Displays II • 공통 음극 디스플레이(CC): LED의 모든 음극이 공통으로 GND에 연결되어 로직 ‘1’일 때 세그먼트를 턴온 시킨다.(a to g). • LED (light emitting diode)는 음극보다 양극의 전위가 높을 때 턴온 된다.
Seven Segment Decoder/Drivers I • 숫자 0에서 9를 나타내는 BCD(Binary Coded Decimal) 4 Bit 코드인 ‘0000 – 1001’를 입력 받는다. • 각 디스플레이LED를 위해 출력(a - g)을 발생시킨다. • 각 세그먼트에서는 전류를 제한하기 위한 직렬저항이 요구된다.
Seven Segment Decoder/Driver II • 공통음극 세븐-세그먼트(CC-SS)를 위한 디코더는 ‘active high’출력을 갖지만, 공통양극 세븐-세그먼트(CA-SS)는 ‘active low’출력을 가진다. • 출력은 이진 입력조합 ‘1010 – 1111’과 ‘don’t cares’에 의해 생성된다. • 디코더는 VHDL이나 MSI Logic (7447, 7448)으로 설계될 수 있다.
SS Decoder Entity • Basic Entity ENTITY bcd_7seg IS PORT( d3, d2, d1, d0 :IN BIT; a,b,c,d,e,f,g :OUT BIT); END bcd_7seg; -- Defines binary inputs d0 to d3 -- Defines SS outputs a to g
SS VHDL Architecture (CA) I • Seven Segment signal declarations ARCHITECTURE seven_segment OF bcd_7seg IS SIGNAL input : BIT_VECTOR(3 downto 0); SIGNAL output : BIT_VECTOR(6 downto 0); BEGIN input <= D3 & D2 & D1 &D0 -- Uses two intermediate signals called input and output -- Creates an array by using the concatenate operator (&) -- In this case input(3) <= D3, input(2) <= D2 etc.
SS VHDL Architecture (CA) II • SS Architecture는 몇 몇 상태가 필요하다. WITH input SELECT output <= “0000001” WHEN “0000”, output <= “1001111” WHEN “0001”, output <= “0010010” WHEN “0010”, output <= “0000110” WHEN “0011”, output <= “1001100” WHEN “0100”, output <= “0100100” WHEN “0101”, | | | output <= “1111111” WHEN OTHERS;
SS VHDL Architecture (CA) III • SS Architecture(계속) a <= output(6); b <= output(5); c <= output(4); d <= output(3); e <= output(2); f <= output(1); g <= output(0); END seven_segment;
SS VHDL File 설명 • 이전 예제 파일에서는 ‘selected signal assignment’이 사용되었다. • - WITH (signals) SELECT • 중간 출력 신호들은 세그먼트(a에서 g)에 매핑된다. • 예로써, 입력(D3 - D0) = 0001일 때, 디코더는 a=d=e=f=g=1, b=c=0로 세트한다.
Ripple Blanking I • 리플 블랭킹: 복수 자리의 수를 표시할 때 앞이나 꼬리부분의 영(‘0’)은 표시하지 않고 중간부분의 영 (‘0’) 은 표시하는 기법. • RBI(active low) 입력과 RBO(active low) 출력을 사용한다. • D0 - D3 = 0000이고 RBI = 0일 때 디스플레이는 소거(blank)된다.
Ripple Blanking II • D0 - D3 = 0000이고 RBI = 1일 때 디스플레이는 영(‘0’)을 표시한다. • 만약 RBI = 1 or D0 - D3 = (NOT 0000)이면 RBO = 1이 된다. • 앞부분의 영들을 소거하고자 한다면, 최상위 자리(MSD)의 RBI를 GND에 연결하고, RBO는 그 다음 하위자리의 RBI에 연결한다.
VHDL에서의 Sequential Process • A VHDL Process는 sequential statements를 포함함으로 구성된다. sequential statements는 sensitivity list상의 신호에 변화가 있을 때 실행된다. • 기본형식 PROCESS(Sensitivity List) BEGIN Sequential Statements; END PROCESS;
CASE Statement Template CASE __expression IS WHEN __constant_value => __statement; __statement; WHEN __constant_value => __statement; __statement; WHEN OTHERS => __statement; __statement; END CASE; => 여러 값에 따라 결정할 때 Process 문 내에 사용
IF Statement Template IF __expression THEN __statement; __statement; ELSIF __expression THEN __statement; __statement; ELSE __statement; __statement; END IF; => TRUE or FALSE 조건에 따라 결정할 때 Process 문 내에 사용
Ripple Blanking Process구문 I • 이전 파일에 기본 프로세스 구문이 더해진다. • (sevsegrb.vhd) PROCESS(nRBI, input) BEGIN IF(input = “0000” and nRBI = ‘0’) THEN output <= “1111111”; -- Suppressed 0 nRBO <= ‘0’; ELSIF(input = “0000” and nRBI = ‘1’) THEN output <= “0000001”; -- Display a 0 nRBO <= ‘1’; ELSE -- Continued on next slide
Ripple Blanking Process구문 II • 이전 파일의 일부를 변경 CASE input IS WHEN “0001” => output <= “1001111”; -- a 1 Displayed WHEN “0010” => output <= “0010010”; -- a 2 Displayed | | | | | WHEN Others => output <= “1111111”; -- Blank END CASE; nRBO <= ‘1’; END IF;