디지털 기초설계 및 실습

[디지털 논리회로] 블랙잭 19 게임 설계

주연시 2026. 5. 29. 19:20

프로젝트 개요

본 프로젝트는 TTL 디지털 논리회로를 활용하여 카지노 카드 게임인 블랙잭(Blackjack)을 구현하는 것을 목표로 한다. 일반적인 디지털 시계나 카운터와 같은 단순 순차회로를 넘어, 사용자의 선택에 따라 게임이 진행되고 결과가 달라지는 상호작용형 디지털 시스템을 설계하고자 하였다. 이를 위해 카운터, 레지스터, 가산기, 비교기, 조합논리회로 및 유한상태기계(FSM)를 활용하여 블랙잭의 핵심 규칙을 하드웨어적으로 구현하였다.

설계 가능한 수준으로 회로를 구현하기 위해 블랙잭 규칙을 단순화시켰다. 플레이어는 19에 가까운 수를 만드는 것을 목표로 하며, 카드는 A, 2~10, J, Q, K가 아닌 0~9를 사용한다. A는 1 또는 11 중 하나로 계산하지 않으며, 각 숫자가 나올 확률은 동일한다. 덱이 무한히 많다는 가정 하에 카드 카운팅 요소는 존재하지 않는다.

게임은 플레이어와 딜러가 각각 카드를 부여받아 점수를 비교하는 방식으로 진행된다. 플레이어는 HIT 버튼을 통해 새로운 카드를 받을 수 있으며, STAND 버튼을 통해 현재 점수로 게임을 종료할 수 있다. 이때, STAND 동작은 플레이어 점수의 십의 자리가 1일 때만 유효하게 설계하여 일의 자리로만 플레이어와 딜러의 점수를 비교 가능하게 한다. 플레이어의 카드 값은 카운터를 이용하여 생성되며, 새 카드가 생성될 때마다 현재 점수에 누적된다. 점수 계산 과정에서는 4비트 가산기와 BCD 보정 회로를 사용하여 올바른 십진수 연산이 가능하도록 설계하였다. 또한 점수가 특정 범위를 초과할 경우 Bust 판정을 수행하여 게임 진행에 반영한다.

딜러는 플레이어와 다른 방식으로 구현하였다. 게임 시작 전 카운터를 빠르게 동작시켜 카드 값을 생성하고, 게임이 시작되면 해당 값을 고정하여 사용한다. 카운터에서 0~9를 조합 논리를 거쳐 14~23으로 카드 값을 매핑한다. 이는 딜러의 점수가 13 이하면 히트, 14 이상이면 스테이하는 논리를 의도한 것이다. 생성된 카드 값은 조합논리회로를 통해 실제 게임에 사용되는 점수 범위로 변환되며, 이를 바탕으로 딜러 점수가 결정된다. 플레이어와 딜러의 점수는 비교기를 통해 실시간으로 비교되며, 승리(WIN), 패배(LOSE), 무승부(DRAW) 여부를 판단하는 논리회로에 입력된다.

게임의 전체 진행은 FSM(Finite State Machine)을 이용하여 제어한다. FSM은 대기(WAIT), 카드 선택(HIT), 결과 판정(STAND), 결과 표시(RESULT) 등의 상태를 관리하며, 사용자 입력과 게임 결과에 따라 상태를 전이한다. 이를 통해 복잡한 게임 진행 절차를 체계적으로 구현하고, 각 블록 간의 동작 순서를 일관되게 유지할 수 있도록 하였다.

최종적으로 플레이어 점수와 딜러 점수는 7-세그먼트 디스플레이를 통해 표시되며, 승패 결과는 LED를 이용하여 직관적으로 출력된다. 또한 연승 횟수를 기록하는 스트릭(Streak) 카운터를 추가하여 게임의 재미 요소를 강화하였다. 본 프로젝트는 단순한 카운터 응용을 넘어, 순차논리회로와 조합논리회로를 통합적으로 활용하여 실제 게임 시스템을 구현한 사례로서 의의를 가진다. 이를 통해 디지털 시스템 설계 과정에서 필요한 상태 제어, 데이터 처리, 논리 최적화 및 하드웨어 구현 능력을 종합적으로 학습할 수 있다.

 

회로 설계할 때 이용한 사이트: https://virtual-graph-paper.com/
회로 설계하기 전에 만든 논리함수 표

1. 사용자 입력부: 택트 스위치 3, on/off 스위치 1, 10kΩ 저항 7, 커패시터 3, 슈미트 트리거 1(74LS14). AND 1(3)
2. 제어부: D 플립플롭 1(74LS74), Pstand 또는 Pburst 입력받는 OR 1(1), AND 1(2)
3. 클록 및 점수 생성부: 1MHz 크리스탈 오실레이터(sco-020) 1, 커패시터 1, divider 1(74LS390), 카운터 2(74LS90)
4. 연산부: 4비트 가산기 2(74LS283), BCD 가산기로 만들고 십의 자리 카운팅용 AND 1(3), OR 1(2)
5. 점수 저장부: 4비트 레지스터 1(74LS175), 카운터 3(74LS90), AND 2(5), OR 1(2), NOT 1(3)
6. 점수 비교부: 4비트 비교기 1(74LS85)
7. 점수 표시부: BCD 디코더 5(4511), 7-segment 5(Cathode)
8. 결과 출력부: AND 2(6), OR 2(5), NOT 1(3), LED 3, 부저 1(TMB12A05)

총 필요 소자 개수: 19 + 7~10 = 24~27
특히 AND 4~5(13), OR 2~3(8), NOT 1~2(4)


약 20시간 동안 열심히 만들었지만 결국 기말 프로젝트로는 디지털 시계를 만들기로 결정해서 만들 일이 없어졌다. 그렇다고 그냥 지워버리기엔 아쉬워서 기록으로 남겨둔다.