Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
조합과 순차
• 조합 회로(combinational circuit)
– Memory가 없다.
– 입력한 값에 따른 출력
• 출력 = f (입력)
• 순차 회로(sequential circuit)
– Memory가 있다.
– Memory에는 회로의 현 상태가 저장
– 출력은 입력과 현 상태에 의해 결정
• (출력, 다음 상태) = f (입력, 상태)
2
순차 회로
• Sequential circuit
– Sequential circuit의 output은 현재의 input 값과 이전의 input 값에 의해서 결정된다.
– Latches와 Flip-flops가 sequential circuit 중 메모리 디바이스로 많이사용된다.
3
Gates
State
InputOutput
다양한 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
5
Latch
Flip-Flop
E
• Unstable State
– 아래와 같은 회로에서 임의의 시간에 inverter 입력이 0이면 inverter 출력은 (b)와 같은 진동(Oscillation)하게 된다.
– 이 회로가 진동하는 rate은 inverter의 전파 지연에 의해 결정된다.
– (b)와 같은 상황을 출력이 0 또는 1로 정의되지 않았기 때문에 Unstable State (output undefined) 라 한다.
Latch 기초원리
6
Latch 기초원리
• Stable State
– 아래 (a) 회로는 두 번째 inverter의 출력은 0 으로 유지 되고, (b)회로의경우 두 번째 inverter의 출력은 1로 유지된다. -> Stable State (output defined when input is given)
7
• 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이 된다.
Set-Reset Latch (SR Latch)
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
12
R S Q
0 0 Q
0 1 1
1 0 0
1 1
회로도와 symbol의Q의 위치가 다른 것에 주의해야한다.
• Timing Diagram for S-R Latch
– 입력이 변화되면 짧은 시간(ε) 후에 출력 값이 변화한다.
(ε은 Latch의 딜레이를 나타낸다.)
➔ latch의 속도 결정
Set-Reset Latch(SR 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
• D Flip-Flop
– Active edge 후의 D flip-flop의 상태 (Q+)는 active edge에서의 입력(D)와 같다.
– Timing for D Flip-Flop (Falling-Edge Trigger)
Edge-Triggered D Flip-Flop
17
D Q Q+
0 0 0
0 1 0
1 0 1
1 1 1
DQ =+
Flip-Flops with Additional Inputs
• Flip-Flops with Additional Inputs
– FF은 clock과는 독립적으로 FF을 어떤 초기 상태(initial state)로 만들기위해 부가적인 입력을 가질 수 있다.
– 여기서 어떤 초기 상태란 0의 상태 또는 1의 상태를 나타낸다.
– 초기상태를 0으로 만드는 입력신호: Clear (Clr)
– 초기상태를 1으로 만드는 입력신호: Preset (Pre)
18
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)
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 :
– The MUX output (그림 c):
19
CEDECQQ +=+
CEDECQDQ in +==+
Flip-flop 사용법
• Rising edge
• Falling edge
always@(posedge Clock)begin
…end
always@(negedge Clock)begin
…end
2020
Synchronous vs Asynchronous Reset (Code)
• 정의
– 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)
always @(posedge Clock)if(!SynReset)
Data_Out <= 0;else
Data_Out <= Data_In;end
always @(posedge Clock or negedge AsynReset)if(!AsynReset)
Data_Out <= 0;else
Data_Out <= Data_In;end
2121
Synchronous vs Asynchronous Reset (Circuit)
• Synchronous Reset
• Asynchronous Reset
D Q
_ CK Q
Clock
Data_In
Data_Out
Reset
2222
D Q
_ CK Q
Clock
Data_InData_Out
Reset
Enable & Reset (Code)
• 정의
– Enable : Clock의 edge에서Enable = 1 : Data ← Data_inEnable = 0 : Data 유지 (출력 → 입력 피드백 발생)
– Synchronous Reset : clock의 edge 에서reset의 상태에 따라 reset발생
23
always @(posedge Clock)if(Enable)
Data_Out <= Data_In;end
always @(posedge Clock)if(!SynReset)
Data_Out <= 0;else
Data_Out <= Data_In;end
Enable vs Reset (Circuit)
• Enable
• Reset
D Q
_ CK Q
Clock
Enable
Data_In
Data_Out
D Q
_ CK Q
Clock
Data_In
Data_Out
Reset
feedback 발생
2424
실습 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
14
System Task – Example display / monitor
• Test Stimulus
값이 변할 때마다 계속출력
START 문구를 한번 출력
START 출력
값이 변할 때마다계속 출력한다.
시계 검증하기 – 코드 예시
33
Blocking Assignment
• Blocking Assignment :‘=’ 사용
– 하나의 대입이 끝난 후 다음 대입 (기술순서에 영향 O)
– assignment가 바로 발생
3434
wire [3:0] A, B, C, D;always @(posedge CLK)begin
C = B;B = A;A = D;
end
wire [3:0] A, B, C, D;always @(posedge CLK)begin
A = D;C = B;B = A;
end
처리 전의 초기값 처리 전의 초기값
A=5; B=3; C=10; D=2; A=5; B=3; C=10; D=2;
처리 결과 처리 전의 초기값
A=2; B=5; C=3; D=2; A=2; B=2; C=3; D=2;
Non-Blocking Assignment
• Non-blocking Assignment :‘<=’ 사용
– 대입식의 오른쪽 처리 후 왼쪽에 대입 (기술순서에 영향 X)
– clock cycle의 끝 단에서 assignment
3535
wire [3:0] A, B, C, D;always @(posedge CLK)begin
C <= B;B <= A;A <= D;
end
wire [3:0] A, B, C, D;always @(posedge CLK)begin
A <= D;C <= B;B <= A;
end
처리 전의 초기값 처리 전의 초기값
A=5; B=3; C=10; D=2; A=5; B=3; C=10; D=2;
처리 결과 처리 전의 초기값
A=2; B=5; C=3; D=2; A=2; B=5; C=3; D=2;
Blocking/Non-Blocking Assignment (Code)
• 실제 사용시 차이점
– combination circuit에서는 차이점이 없음
– sequential circuit에서 두 개 이상의 assignment가 일어날 때 차이점 발생
3636
always @(posedge Clock)begin
Intermediate_Variable = In_A & In_B;Data_Out <= Intermediate_Variable;
end
always @(posedge Clock)begin
Intermediate_Variable <= In_A & In_B;Data_Out <= Intermediate_Variable;
end
blocking assignment→ Intermediate_Variable 바로 갱신→ 갱신된 값이 Data_Out에 저장
non-blocking assignment→ cycle의 끝에서 할당→ Data_Out에 갱신 전
Intermediate_Variable 값이 저장
Blocking/Non-Blocking Assignment (Circuit)
• 실제 사용시 차이점
– blocking assignment
– non-blocking assignment
Data_outIn_A
Clock
In_B
Data_outIn_A
Clock
In_B
Intermediate_Variable
3737
Blocking/Non-Blocking Assignment
• Flip-Flop의 입/출력을 분리하여 사용
38
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;
elsemin <= min;
end
always @(posedge clock)begin
c_sec <= n_secc_min <= n_min
end
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;
elsen_min <= c_min;
end
sec
Clock
sec
해결방법
c_sec
Clock
n_sec
실습 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 Q
_ G Q
D Q
_ CK Q
D G Q Q
X01
011
Q01
Q10
D CK Q Q
01XX
↑↑01
01QQ
10QQ
_
_
__
_
D Latch D Flip-flip
4141
Latch
• Latch의 역할
– 현재 값을 유지해 주어야 할 때 발생한다.
• Example
– Clock 1 : 입력 D가 출력 Q로 전달
– Clock 0 : 입력이 출력에 영향 X, 출력 유지
42
Inferred Latch
• 정의
– If/case에서 모든 branch에 대해 정의되어 있지 않을 때 발생하는 Latch
• Asynchronous latch
• 막아야 하는 이유
– 모든 flip-flop이 같은 clock에서 컨트롤 되는 synchronous 선호
• Difficulty with accurate timing analysis
• Unpredictable behavior
4343
Latch
Data_outIn_A
Enable→ clock이 없음
Solution of Inferred Latch : if
• If 문
– 모든 branch에 대해 정의
– 초기값 설정
always @(Enable or In_A)begin
if(Enable)begin
Data_Out = In_A;end
end
if(Enable)begin
Data_Out = In_A;end
elsebegin
Data_Out = In_B;end
end
Data_Out = In_B;if(Enable)
beginData_Out = In_A;
endend
해결방법
4444
Solution of Inferred Latch : Case
• Case 문
– default 사용
– 초기값 설정
4545
always @(Data_In)begin
case(Data_In)0 : Data_Out = In_A;1 : Data_Out = In_B;default : Data_Out = In_A;
endcaseend
always @(Data_In)beginData_out = In_A;
case(Data_In)0 : Data_Out = In_A;1 : Data_Out = In_B;
endcaseend
always @(Data_In)begin case(Data_In)
0 : Data_Out = In_A;1 : Data_Out = In_B;
endcaseend 해결방법
실습 4
시계 만들기
• 실습 4. 시계 만들기
– 실습 3.에서 만든 watch 모듈을 수정할 것.
– 앞의 예시에 따라 Inferred Latch 방지를 위한 초기값 사용
47
시계 만들기 – 최종 코드
48