디지털 논리 -순차회로 설계-
1. 문제 개요
- 교재 연습문제 5.19 3개의 플립플롭 A, B, C, 한 개의 입력 x와 한 개의 출력 y를 가진 순차회로를 설계한다. 이 회로의 상태도는 교재에 있으며 무정의 조건, 즉 사용되지 않는 상태를 이용해 설계한다. 사용되지 않는 상태가 미치는 영향을 알아보기 위한 설계를 통해 얻어진 이 회로를 분석한다. 단, 사용하는 플립플롭은 JK FF를 사용한다.
- Verilog 를 이용하여 교재 HDL 예제 6.4 Ripple Counter를 직접 코딩해보고 그 결과를 살펴본다.
2. 문제 분석(알고리즘 및 해결방안)
① 연습문제의 내용은 JK Flip-Flop을 이용하여 조건에 맞는 회로를 설계하는 내용이
다. 회로의 설계는 (1) 주어진 조건(기술된 내용 등)으로부터 상태도를 유도하고,
(2) 상태 축소, (3) 상태 할당, (4) 상태표를 작성하고, (5) Flip-Flop을 선택 후,
(6) Flip-Flop 의 입출력식을 유도, (7) 논리도를 작성하는 단계로 진행된다. 이
문제의 경우 JK Flip-Flop으로 정해졌으며 D Flip-Flop 에 비해 입출력식 유도 과
정이 하나 추가된다는 점 이외엔 큰 문제는 없다.
② 예제의 내용 그대로 코딩 하되, 본문의 코딩 내용에 컴파일 오류가 발생한다. 이를
수정하고 내용을 확인한다.
3. 결과(소스 및 스크린샷)
<<1번 과제, 연습문제 5.19>>
① 상태도가 교재에 있고, 상태 축소와 상태 할당은 대상이 없으므로 생략한다.
② 상태표
현재 상태 |
입력 |
차기 상태 |
출력 |
JK Flip-Flop |
|||||||||
A |
B |
C |
X |
A+ |
B+ |
C+ |
Y |
Ja |
Ka |
Jb |
Kb |
Jc |
Kc |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
x |
1 |
x |
1 |
x |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
x |
0 |
x |
0 |
x |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
x |
0 |
x |
x |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
x |
0 |
x |
x |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
x |
x |
0 |
0 |
x |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
x |
x |
1 |
0 |
x |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
x |
x |
1 |
x |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
x |
x |
0 |
x |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
x |
1 |
1 |
x |
0 |
x |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
x |
1 |
1 |
x |
1 |
x |
1 |
0 |
1 |
0 |
|
|
|
|
|
|
|
|
|
|
1 |
0 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
1 |
1 |
0 |
0 |
|
|
|
|
|
|
|
|
|
|
1 |
1 |
0 |
1 |
|
|
|
|
|
|
|
|
|
|
1 |
1 |
1 |
0 |
|
|
|
|
|
|
|
|
|
|
1 |
1 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
③ FF 식, 출력식 유도
AB/CX
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
1 |
1 |
x |
x |
1 |
0 |
0 |
0 |
x |
x |
x |
x |
x |
x |
x |
x |
1 |
1 |
x |
x |
x |
x |
x |
x |
0 |
1 |
0 |
1 |
x |
x |
x |
x |
x |
x |
x |
x |
1 |
0 |
x |
x |
0 |
0 |
x |
x |
x |
x |
x |
x |
0 |
1 |
x |
x |
x |
x |
1 |
0 |
x |
x |
1 |
0 |
x |
x |
x |
x |
x |
x |
x |
x |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
x |
x |
x |
x |
0 |
0 |
x |
x |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
x |
x |
x |
x |
1 |
1 |
x |
x |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
x |
x |
x |
x |
0 |
1 |
x |
x |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
x |
x |
x |
x |
0 |
0 |
x |
x |
⑤ 이 회로는 Ka = 1 로, A+ = 0 의 결과를 항상 갖게 되는 보정의 효과를 갖는다.
<<2번 과제, Verilog Ripple Counter>>
① 책의 내용대로 코딩 후(테스트 벤치부는 삭제) 컴파일을 실행하면 에러가 발생한다.
② 이는 코딩 부의 쉼표가 아닌 or 로 바꾸어 주면 해결된다.
always @ (negedge CLK, posedge Reset) -> always @ (negedge CLK or posedge Reset)
③ 또한 설정 하나를 바꾸어주어야 하는데 클럭폭의 영향으로 Grid 설정을 10.0ns로 변경해야 한다.
④ 웨이브폼 생성 후 시뮬레이터를 실행시킨다. (클럭값을 count 에 별도로 지정해주어야 한다.)
⑤ 좀 더 상세히 분석해보자.
count 는 20ns 의 주기로 반복되는 클럭으로, 주기의 반복에 따라 A0 가 그 펄스
에 반응함을 볼 수 있다. 이 구조는 리플 카운터의 각 플립플롭의 출력이 다음 상
위 FF의 Clk에 연결되어 보수화 FF 로 인해 반응하는 구조와 동일하다. 순서는
0000 -> 0001 -> 0010 -> 0011 -> ..... -> 1110 -> 1111 -> 0000 -> ....
순이다. (부-에지)
이하 내용은 코딩이다.
`timescale 1ns / 100 ps
module Ripple_Counter_4bit (A3,A2,A1,A0, Count, Reset);
output A3,A2,A1,A0;
input Count,Reset;
//Instantiate complementing flip-flop
Comp_D_flip_flop F0 (A0, Count, Reset);
Comp_D_flip_flop F1 (A1, A0, Reset);
Comp_D_flip_flop F2 (A2, A1, Reset);
Comp_D_flip_flop F3 (A3, A2, Reset);
endmodule
//Complementing flip-flop with delay
//Input to D flip-flop = Q'
module Comp_D_flip_flop (Q, CLK, Reset);
output Q;
input CLK, Reset;
reg Q;
always @(negedge CLK or posedge Reset)
if (Reset) Q <= 1'b0; else Q <= #2 ~Q;
endmodule
'Track 1 (Senior) > Major : CE (etc.)' 카테고리의 다른 글
pi 값 유도 및 증명 (0) | 2011.06.20 |
---|---|
n명의 사람들 중 적어도 두 사람의 생일이 같을 확률 (0) | 2011.06.20 |
Python Graphic 자료 관련 추가 내용 (0) | 2011.06.20 |
Python을 이용한 비트맵 그래픽 (0) | 2011.06.20 |
Assembler Detail (Algorithms) (0) | 2011.06.20 |