보안회로설계 순차회로 Dong Kyue Kim Hanyang University dqkim@hanyang.ac.kr
조합과순차 조합회로 (combinational circuit) Memory가없다. 입력한값에따른출력 출력 = f ( 입력 ) 순차회로 (sequential circuit) Memory가있다. Memory에는회로의현상태가저장 출력은입력과현상태에의해결정 ( 출력, 다음상태 ) = f ( 입력, 상태 ) 2
순차회로 Sequential circuit Sequential circuit 의 output 은현재의 input 값과이전의 input 값에의해서결정된다. Latches 와 Flip-flops 가 sequential circuit 중메모리디바이스로많이사용된다. Input Gates Output State 3
다양한 Latch 와 Flip-Flops Latches and Flip-Flops Set-Reset Latch Gated D Latch Edge-Triggered D Flip-Flop S-R Flip-Flop J-K Flip-Flop T Flip-Flop Flip-Flops with Additional Inputs 4
Latch 와 Flip-Flops Latch E Flip-Flop 5
Latch 기초원리 Unstable State 아래와같은회로에서임의의시간에 inverter 입력이 0 이면 inverter 출력은 (b) 와같은진동 (Oscillation) 하게된다. 이회로가진동하는 rate 은 inverter 의전파지연에의해결정된다. (b) 와같은상황을출력이 0 또는 1 로정의되지않았기때문에 Unstable State (output undefined) 라한다. 6
Latch 기초원리 Stable State 아래 (a) 회로는두번째 inverter 의출력은 0 으로유지되고, (b) 회로의경우두번째 inverter 의출력은 1 로유지된다. -> Stable State (output defined when input is given) 7
Set-Reset Latch (SR Latch) SR Latch S=0 and R=0 인경우. P=1 and Q=0 인 stable state 이다. 위의상태에서 S 값을 0 에서 1 로바꾼다. P=1->0 and Q=0->1 로바뀐다. P=0 and Q=1 인 stable state 이된다. 8
Set-Reset Latch (SR Latch) SR Latch 앞의상태에서 S=1->0 로바꾼다. P=0 and Q=1 인상태가유지된다. 위의상태에서 R=0->1 로바꾼다. P=0->1 and Q=1->0 으로바뀐다. 9
Set-Reset Latch (SR Latch) SR Latch 앞의상태에서 R=1->0로바꾼다. P=1 and Q=0인상태가유지된다. 회로분석을시작한처음상태로돌아온다. 이회로는출력이현재의입력뿐만아니라과거일련의입력에도의존하므로, 메모리특성이있다고할수있다. 10
Set-Reset Latch (SR Latch) SR Latch S=1 and R=1 인경우는고려하지않는다. 두개입력이 (S=R=1) 상태에있으면 P=Q=0 이된다. 이러한경우두개의출력은서로보수관계가되어야하는 Latch 기본동작에위배된다. 또한 S=R=1 에서 S=R=0 으로동시에변하게되면출력이 1,0,1 반복되는불안한상태가된다. 11
Set-Reset Latch (SR Latch) SR Latch ( 정리 ) S=1, R=1인경우 : 고려하지않는다. S=0, R=0인경우 : 이전출력값을출력한다.(Q = 이전출력 ) S=1, R=0인경우 : Q = 1 <- Set S=0, R=1인경우 : Q = 0 <- Reset R S Q 0 0 Q 0 1 1 1 0 0 1 1 회로도와 symbol 의 Q 의위치가다른것에주의해야한다. 12
Set-Reset Latch(SR Latch) Timing Diagram for S-R Latch 입력이변화되면짧은시간 (ε) 후에출력값이변화한다. (ε은 Latch의딜레이를나타낸다.) latch의속도결정 13
Gated D Latch Gated D Latch SR-Latch에게이트로구성되어있다. Data input(d) 와 gate input(g) 두개의 input이있다. G=0일때 S=R=0이므로 Q값은바뀌지않는다. 14
Edge-Triggered D Flip-Flop Edge-Triggered D Flip-Flop Level-triggered D Latch 2개로구성 D Flip-Flop은 D(data) 과 Ck(clock) 으로구성 D 입력의변화에따라서가아니라 clock에반응하여변화 15
Edge-Triggered D Flip-Flop D Flip-Flop 출력이 clock 입력의 0 -> 1 전환시에변화한다면 rising-edge trigger 출력이 clock 입력의 1 -> 0 전환시에변화한다면 falling-edge trigger Clock 입력에 bubble이있는 flip-flop은 falling Edge-Triggered Bubble이없는 flip-flop은 rising Edge-Triggered flip-flop 16
Edge-Triggered D Flip-Flop D Flip-Flop Active edge 후의 D flip-flop의상태 (Q + ) 는 active edge에서의입력 (D) 와같다. D Q Q + 0 0 0 0 1 0 1 0 1 1 1 1 + Q = D Timing for D Flip-Flop (Falling-Edge Trigger) 17
Flip-Flops with Additional Inputs Flip-Flops with Additional Inputs FF 은 clock 과는독립적으로 FF 을어떤초기상태 (initial state) 로만들기위해부가적인입력을가질수있다. 여기서어떤초기상태란 0 의상태또는 1 의상태를나타낸다. 초기상태를 0 으로만드는입력신호 : Clear (Clr) 초기상태를 1 으로만드는입력신호 : Preset (Pre) Ck D PreN ClrN Q + x x 0 0 (not allowed) x x 0 1 1 x x 1 0 0 0 1 1 0 1 1 1 1 0,1, x 1 1 Q(no change) 18
Flip-Flops with Additional Inputs D Flip-Flop with clock Enable FF 의 clock 이나입력값에에관계없이이전데이터값을유지하고싶은경우 Clock 자체의동작을 gating 하는방식 ( 그림 a): clock 지연되어다른 FF 와의동기성을상실 Clock Enable (CE) 을사용하는방식 : CE=1 일때 Q + =D, CE=0 일때 Q + =Q + The characteristic equation : Q = Q CE + D CE + The MUX output ( 그림 c): Q = D = Q CE + D CE in 19
Flip-flop 사용법 Rising edge always@(posedge Clock) begin Falling edge always@(negedge Clock) begin 20
Synchronous vs Asynchronous Reset (Code) 정의 always @(posedge Clock) if(!synreset) Data_Out <= 0; else Data_Out <= Data_In; always @(posedge Clock or negedge AsynReset) if(!asynreset) Data_Out <= 0; else Data_Out <= Data_In; Synchronous Reset : clock 의 edge 에서 reset 의상태에따라 reset 발생 Asynchronous Reset : clock 의 edge 에서 reset 발생 reset 의 edge 에서도 reset 발생 edge condition 과 if 조건문의극성이일치해야함 always@(posedge clk or negedge AsynReset) if(!asynreset) always@(posedge clk or posedge AsynReset) if(asynreset) 21
Synchronous vs Asynchronous Reset (Circuit) Synchronous Reset Reset Data_In Clock D Q _ CK Q Data_Out Asynchronous Reset Data_In Clock D Q _ CK Q Data_Out Reset 22
Enable & Reset (Code) 정의 always @(posedge Clock) if(enable) Data_Out <= Data_In; always @(posedge Clock) if(!synreset) Data_Out <= 0; else Data_Out <= Data_In; Enable : Clock 의 edge 에서 Enable = 1 : Data Data_in Enable = 0 : Data 유지 ( 출력 입력피드백발생 ) Synchronous Reset : clock 의 edge 에서 reset 의상태에따라 reset 발생 23
Enable vs Reset (Circuit) Enable feedback 발생 Enable Data_In Clock D Q _ CK Q Data_Out Reset Reset Data_In Clock D Q _ CK Q Data_Out 24
실습 1
시계만들기 - 1 실습 1. 시계만들기 watch.v 파일생성 watch 모듈생성 watch 입출력상세 1-bit input clock 1-bit input reset 5-bit output hour 6-bit output minute 6-bit output second 1 clock = 1 second 를가정하고 hour, minute, second 생성 reset = 1 입력시모두초기화 26
시계만들기 코드 1 27
시계만들기 코드 2 28
실습 2
시계검증하기 실습 2. 시계검증 tb 만들기 tb_watch.v 파일생성 tb_watch 모듈생성 reset = 1 입력시 $display 이용하여아래와같은출력생성 ========= reset ========== minute 이변경될때마다 $monitor 이용하여아래와같은출력생성 시간 : 분 ex ) 03 : 30 30
Testbench 기본문법 [ 시스템태스크 ] Simulation 에서결과를 display 하는 system task Transcript 에출력됨 $time 시뮬레이션의현재시간을나타낸다. $display C언어의 printf와용법이비슷하다. 시뮬레이션실행시실행창에내용 1회출력한다. 변수값, 문자열, 수식등을출력하는용도로사용한다. ex) $display( i = %d,i ); $monitor 연결한레지스터나와이어의값이변할때마다그값을계속해서출력한다. ex) $monitor($time, %d%dmin %d%dsec, highm, lowm, highs, lows); 31
System Task Example display / monitor Test Stimulus 값이변할때마다계속출력 START 문구를한번출력 START 출력 값이변할때마다계속출력한다. 14
시계검증하기 코드예시 33
Blocking Assignment Blocking Assignment : = 사용 하나의대입이끝난후다음대입 ( 기술순서에영향 O) assignment 가바로발생 wire [3:0] A, B, C, D; always @(posedge CLK) begin C = B; B = A; A = D; 처리전의초기값 A=5; B=3; C=10; D=2; 처리결과 A=2; B=5; C=3; D=2; wire [3:0] A, B, C, D; always @(posedge CLK) begin A = D; C = B; B = A; 처리전의초기값 A=5; B=3; C=10; D=2; 처리전의초기값 A=2; B=2; C=3; D=2; 34
Non-Blocking Assignment Non-blocking Assignment : <= 사용 대입식의오른쪽처리후왼쪽에대입 ( 기술순서에영향 X) clock cycle 의끝단에서 assignment wire [3:0] A, B, C, D; always @(posedge CLK) begin C <= B; B <= A; A <= D; 처리전의초기값 A=5; B=3; C=10; D=2; 처리결과 A=2; B=5; C=3; D=2; wire [3:0] A, B, C, D; always @(posedge CLK) begin A <= D; C <= B; B <= A; 처리전의초기값 A=5; B=3; C=10; D=2; 처리전의초기값 A=2; B=5; C=3; D=2; 35
Blocking/Non-Blocking Assignment (Code) 실제사용시차이점 combination circuit 에서는차이점이없음 sequential circuit 에서두개이상의 assignment 가일어날때차이점발생 always @(posedge Clock) begin Intermediate_Variable = In_A & In_B; Data_Out <= Intermediate_Variable; blocking assignment Intermediate_Variable 바로갱신 갱신된값이 Data_Out 에저장 always @(posedge Clock) begin Intermediate_Variable <= In_A & In_B; Data_Out <= Intermediate_Variable; non-blocking assignment cycle 의끝에서할당 Data_Out 에갱신전 Intermediate_Variable 값이저장 36
Blocking/Non-Blocking Assignment (Circuit) 실제사용시차이점 blocking assignment In_A In_B Data_out Clock non-blocking assignment In_A In_B Intermediate_Variable Data_out Clock 37
Blocking/Non-Blocking Assignment Flip-Flop 의입 / 출력을분리하여사용 always @(posedge clock) begin if(sec == 6'd59) sec <= 0; else sec <= sec + 6'd1; if(sec == 6'd59 && min == 6'd59) min <= 0; else if(sec == 6'd59) min <= min + 6'd1; else min <= min; sec sec 해결방법 always @(posedge clock) begin c_sec <= n_sec c_min <= n_min always @ * if(c_sec == 6'd59) n_sec = 0; else n_sec = c_sec + 6'd1; if(c_sec == 6'd59 && c_min == 6'd59) n_min <= 0; else if(c_sec == 6'd59) n_min <= c_min + 6'd1; else n_min <= c_min; n_sec c_sec Clock Clock 38
실습 3
시계만들기 실습 3. 시계만들기 실습 1. 에서만든 watch 모듈을수정할것. 앞의예시에따라 Flip-Flop 의입 / 출력을분리하여사용 레지스터입 / 출력 n_hour, c_hour n_minute, c_minute n_second, c_second 40
Latch vs. Flip-flop Latch enable = 1 인동안 ( 또는 0 인동안 ) 현재상태유지 level sensitive Flip-flop clock 이변화하는순간 (0 1 또는 1 0) 에만입력신호를받아들임 2 개의 latch 로구성 edge sensitive D G Q _ Q D G Q _ Q X 0 1 0 1 1 Q 0 1 _ Q 1 0 D Latch D Q _ CK Q _ D CK Q Q 0 1 X X 0 1 D Flip-flip 0 1 Q Q 1 _ 0 Q_ Q 41
Latch Latch 의역할 현재값을유지해주어야할때발생한다. Example Clock 1 : 입력 D 가출력 Q 로전달 Clock 0 : 입력이출력에영향 X, 출력유지 42
Inferred Latch 정의 If/case 에서모든 branch 에대해정의되어있지않을때발생하는 Latch Asynchronous latch In_A Data_out Latch Enable clock 이없음 막아야하는이유 모든 flip-flop이같은 clock에서컨트롤되는 synchronous 선호 Difficulty with accurate timing analysis Unpredictable behavior 43
Solution of Inferred Latch : if If 문 모든 branch 에대해정의 초기값설정 always @(Enable or In_A) begin if(enable) begin Data_Out = In_A; 해결방법 if(enable) begin Data_Out = In_A; else begin Data_Out = In_B; Data_Out = In_B; if(enable) begin Data_Out = In_A; 44
Solution of Inferred Latch : Case Case 문 default 사용 초기값설정 always @(Data_In) begin case(data_in) 0 : Data_Out = In_A; 1 : Data_Out = In_B; case 해결방법 always @(Data_In) begin case(data_in) 0 : Data_Out = In_A; 1 : Data_Out = In_B; default : Data_Out = In_A; case always @(Data_In) begin Data_out = In_A; case(data_in) 0 : Data_Out = In_A; 1 : Data_Out = In_B; case 45
실습 4
시계만들기 실습 4. 시계만들기 실습 3. 에서만든 watch 모듈을수정할것. 앞의예시에따라 Inferred Latch 방지를위한초기값사용 47
시계만들기 최종코드 48