顺序电路设计实例:从猜谜游戏到交通灯控制器
1. 猜谜游戏状态机
1.1 游戏描述
猜谜游戏状态机是一个具有四个输入(G1 - G4)和四个输出(L1 - L4)的时钟同步状态机。输入连接到按钮,输出连接到靠近相应按钮的灯或 LED,还有一个 ERR 输出连接到红灯。在正常操作中,L1 - L4 输出呈现 1 出 4 的模式,每一个时钟周期,模式旋转一位,时钟频率约为 4Hz。玩家通过按下按钮进行猜测,当按下按钮时,如果按下的是“错误”按钮(即检测到的输入 Gi 与时钟周期前亮起的灯输出编号不同),ERR 输出将被置位。一旦做出猜测,游戏停止,ERR 输出保持相同值,直到 Gi 输入被取消,游戏恢复。
1.2 状态需求
该机器需要六个状态:四个状态对应四个灯亮起,另外两个状态分别对应正确或错误按下按钮后游戏停止的情况。为了提高机器的可测试性和健壮性,增加了一个 RESET 输入,用于将游戏强制到已知的起始状态,并且两个未使用的状态有明确的转换到起始状态的规则。
1.3 ABEL 程序实现
以下是猜谜游戏的 ABEL 程序:
module ggame
Title 'Guessing-Game State Machine'
GGAME device 'P16V8R';
" Inputs and outputs
CLOCK, RESET, G1..G4 pin 1, 2, 3..6;
L1..L4, ERR pin 12..15, 19 istype 'com';
Q2..Q