제 7 장 Flip-Flops and Registers 실험의목표 - S-R Latch 의동작을이해하도록한다. - Latch 와 Flip-flop 의차이를이해한다. - D-FF 과 JK-FF 의동작원리를이해한다. - Shift-register MSI 의동작을익히도록한다. - Timing 시뮬레이션방법에대하여습득한다. 실험도움자료 1. Universal Shift Register 1-1 shift register 란? Shift register는데이터저장기능뿐아니라데이터를각각의저장소자사이에서쉬프트할수있다. 아래그림에서보면알수있듯이 shift 펄스가발생할때마다데이터가왼쪽에서오른쪽으로이동하게된다. [ 그림 7-1] shift register 77
1-2 universal shift register 1-1의 shift register의경우에는초기데이터를로드할방법이존재하지않는문제점이있다. 때문에모든 shift register의경우는초기데이터를로드할수있는기능이있으며이것은크게 serial input과 parallel input으로나누어진다. 이러한초기데이터로딩기능과양방향으로의쉬프트기능을모두가지고있는 shift register가 universal shift register이다. 아래그림은 Universal shift register 인 74LS194 의 schematic 이다. [ 그림 7-2] 74LS194 74LS194가어떻게작동하는지간단히살펴보면, S1S0 이 00 이면값을홀드하고, 01 인경우는오른쪽으로쉬프트, 10 인경우는왼쪽으로쉬프트, 11 인경우는 A,B,C,D를통하여 parallel input을받아들인다. SL은왼쪽으로쉬프트가일어날때 QD의 input을, SR은오른쪽으로쉬프트가일어날때 QA의 input을의미한다. 이것을정리하여 function table로나타낸것이다. 78
CLR S1 S0 CLK SL SR A B C D QA QB QC QD L X X X X X X X X X L L L L H X X X X X X X X Qa Qb Qc Qd H H H X X a b c d a b c d H L H X H X X X X H Qb Qc Qd H L H X L X X X X L Qb Qc Qd H H L H X X X X X Qa Qb Qc H H H L L X X X X X Qa Qb Qc L H L L X X X X X X Qa Qb Qc Qd [ 표 7-1] 74LS194 의 function table 2. Serial-to-parallel, parallel-to-serial conversion 두개의 PC 혹은하나의 PC와하나의단말기를시리얼포트를통하여연결한경우시리얼라인을통해서는시리얼데이터가오고가지만 PC 혹은단말기내부에서는시리얼데이터를모아서패러럴한형태 ( 바이트 ) 로변환한후에이것을이용한다. PC에서시리얼라인으로데이터를보낼때는 parallel to serial conversion을그반대의경우는 serial to parallel conversion이일어나게된다. 74LS194를 cascading하여 8비트 parallel/serial transmission subsystem을아래처럼구성해볼수있다. 79
[ 그림 7-3] parallel/serial transfer subsystem 왼편의두개의 74194는 parallel to serial converson을, 오른편의두개의 74194는 serial to parallel conversion을담당한다. parallel to serial conversion의경우 s1s0= 11 일때 8비트의데이터를한번에 input으로받아들인후매 clock마다왼쪽으로쉬프트한다. serial to parallel conversion은이반대로작동한다. 3. MAX plus II 를이용한 Timing 시뮬레이션 아래의 VHDL 코드는다음과같은 input, output 을가지는심볼로표시할수있다. 80
[ 그림 7-4] shift register 의 schematic 동작을간단히설명하면기본적으로 input은 serial, parallel 둘다지원하고, output인경우는 serial output만지원하는 4bit shift register이다. LOAD신호가 high일경우는 LOAD_DATA의 4bit를 input으로읽어들이고, 그외의경우에는 DIN의 serial input을읽어들인다. 위의이러한동작은다 CLK에동기화되어동작을하며, output역시마찬가지로 CLK에동기화되어한 bit씩 output을내보낸다. Altera Max Plus II를이용하여시뮬레이션을수행할경우, 4번의 VHDL소스를이용하여.vhd파일을만든후, 컴파일과시뮬레이션과정을한다. 이때주의해야할점은타이밍시뮬레이션을하기위해서는컴파일을할때꼭 timing 컴파일을하여야하고, 디바이스는기본적으로 Altera MAX 7000으로설정되어있다. ( 자세한것은 Altera Max Plus II 의매뉴얼을참조하라.) 81
체크되어있나확인후컴파일 [ 그림 7-5] timing 시뮬레이션이가능하도록컴파일 위의과정을통하여컴파일이성공적으로수행되었다면, 이제타이밍시뮬레이션을수행할수가있다. 시뮬레이션을수행할 waveform을작성해야하는데. 이때우리는 setup time과 hold time의변화가어떤식으로영향을미치는지를시뮬레이션해봐야하므로먼저각각의 flipflop의 setup time과 hold time에대한추정치를알고있어야한다. 이것은메뉴의 MAX+plus II >> Timing Analyzer 를통하여할수있다. 이때 Setup/Hold Matrix 를선택하여분석을하여야한다. 82
체크 [ 그림 7-6] setup/hold time analysis 위의그림을보면 setup time이 5ns, hold time이 0ns임을알수있다. 이값을알았으니, 이제이값에위배되는값을일부러 waveform에넣어보고어떻게동작하는지알아본다. 아래그림처럼 setup time이 5ns보다는커야하지만일부러 3ns를넣어보자. Waveform editor를통하여 test waveform을그릴때주의할점은전체시뮬레이션시간을얼마로할것인가와 grid의단위이하의시간단위로는 waveform을그릴수가없으므로하나의 grid를몇 ns로할지를정하여야한다. 우리는대략 clock의반주기로 10ns정도, 그리고 setup time이 3ns 정도이므로 grid단위를 2ns로한다고가정하자. 시뮬레이션시간은메뉴중 File >> End Time 로, grid단위는 options >> Grid Size 를통하여정한다. 83
4ns [ 그림 7-7] setup time 이 4ns 이제 waveform 은완성이되었고이것을시뮬레이션시켜본다. 이부분을체크하면, 위와같은 setup/hold violation error 를볼수있다. [ 그림 7-8] simulatin 실행 setup time 이 4ns 이기때문에 setup time violation warning이뜨고, 시뮬레이션결과를보아도 (DOUT, REG) data load가일어나지않았음을알수있다. 84
setup time을 5ns 이상주면, 아래와같이데이터의로드와쉬프트가제대로되는것을알수있다. [ 그림 7-9] 성공한 simulatin 결과 4. VHDL 를이용한 shift-register 의기술 library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_signed.all; entity ShiftRegister is Port ( CLK: in STD_LOGIC; DIN: in STD_LOGIC; LOAD: in STD_LOGIC; LOAD_DATA: in STD_LOGIC_VECTOR(3 downto 0); DOUT: out STD_LOGIC ); end ShiftRegister; architecture Behavioral of ShiftRegister is signal REG: STD_LOGIC_VECTOR(3 downto 0); begin process (CLK) 85
begin if CLK'event and CLK='1' then if (LOAD='1') then REG <= LOAD_DATA; else REG <= DIN & REG(3 downto 1); end if; end if; DOUT <= REG(0); end process; end Behavioral; [ 표 7-2] shift register 의 vhdl 표현 module ShiftRegister(CLK, DIN, LOAD, LOAD_DATA, DOUT); input CLK; input DIN; input LOAD; input [3:0] LOAD_DATA; output DOUT; reg DOUT; reg [3:0] REG; always @(posedge CLK) begin if (LOAD == "1") begin REG <= LOAD_DATA; end else begin REG <= { DIN, REG[3:1] }; end DOUT <= REG[0]; end endmodule [ 표 7-3] shift register 의 verilog 표현 86
예비보고서 1-1 R-S latch 의진리표를작성하고 NOR 게이트만이용해서구현하여라. 1-2 [ 시뮬레이션 ] 그리고시뮬레이션을통하여동작을확인하여라. Forbidden state 에서의동작에대하여시뮬레이터는어떤결과값을내는지확인하여라. 2-1 위에서구현한 R-S latch 를이용해서 Level-sensitive D latch 를구현하여라. 2-2 [ 시뮬레이션 ] 위에서구현된 Level-sensitive D latch를 schematic로작성한후시뮬레이션하여라. 3-1 1.1 에서구현한 R-S latch 를이용해서 J-K latch 를구현하여라. 4-1 [ 시뮬레이션 ] Level Sensitive D latch 와 D Flip-flop 간의차이를시뮬레이션을통해 waveform 으로확인하여라 (74LS74 vs 74LS75). 어느경우에 level-sensitive latch 가 flip-flop 을대치할수있을것인가? 5-1 Clear입력을지원하는 D flip-flop 4개를이용하여 4-bit right shift register를구현하여오. 단, parallel input load가가능해야한다. 5-2 [ 시뮬레이션 ] 5.1 의 schematic 을그리고, waveform viewer 로결과를확인하여라. 5-3. [ 시뮬레이션 ] 1번과 4번 flip-flop 의출력을 XOR 하고이것을 shift register 의 shift-in 입력으로사용하였을때, shift register 의 shift-out 되는출력의파형을확인하여라. 어떤규칙성이있는가? 5-4. Serial-to-parallel, Parallel-to-serial conversion 이사용되는예를 3가지조사하여라. 6-1. [ 시뮬레이션 ] 실험도움자료 절에서주어진 VHDL 코드 /Verilog 코드를시뮬레이션하여라. 그리고, Universal shift register 가되도록코드를수정하여라. 87
실험및토론 1. 2-input NOR 게이트를이용하여 R-S latch 를구현하여라. ( 가 ) 진리표를실험을통하여확인하여라. Forbidden state 에서의동작을실험을통하여확인하여라. ( 나 ) RS latch 의입력을묶고함수발생기를이용하여구형파를인가한다. 클럭입력과 RS latch 의두출력 Q, Q 의값을오실로스코우프를이용하여 2개씩각각비교해본다. 이로인하여알수있는사실이있다면무엇인가? ( 다 ) Debouncing switch 를구현하고파형을관찰하여라. 2. 예비보고서 2-1 의회로를구현하고실험으로확인하여라. 3. 예비보고서 3-1 의회로의구현하고실험으로확인하여라. 4. D-latch와 D-FF에대하여다음을실험으로확인하여라. ( 가 ) D-latch와 D-FF의동작에차이가나타나도록입력과클럭을인가하고그결과를도시하여라. ( 나 ) D-FF의입력과클럭을묶고동시에구형파입력을인가하여보아라. 출력은어떻게되는가? Data sheet 를조사하여 D-FF 과 D-latch 의 setup-time 과 hold-time 을조사하여라. ( 다 ) D-FF 과 D-latch 에대하여 Setup-time 과 hold-time 의개념을간략히설명하여라. 5. 예비보고서 5-1 의회로에대하여 ( 가 ) 회로를구현하고동작을확인하여라. ( 나 ) 예비보고서 5-3 과같이연결을하고출력을확인하여라. ( 다 ) Parallel-to-serial converter 가되는것을확인하여라. 어떻게실험을하면좋을지설명하고그결과를구하여라. 88