数字逻辑试卷-有限状态机设计自动售货机
时间: 2024-12-31 16:20:53 浏览: 9
### 数字逻辑考试卷中的有限状态机设计题目解析
#### 使用有限状态机设计自动售货机的示例题目
在数字逻辑课程中,常见的考题之一是使用有限状态机(FSM)来设计特定的应用场景。对于自动售货机的设计,通常会涉及到输入信号、输出信号以及内部状态的变化。
#### 题目描述
假设有一个简单的自动售货机,可以接受两种硬币:1元和2元。该机器只出售一种商品,价格为3元。当投入足够的金额时,机器将释放一件商品并找零(如果有)。如果投币不足,则等待更多投币直到满足条件为止。请用Moore型有限状态机构建此系统的模型,并给出相应的真值表与电路实现方案[^1]。
#### 解析过程
##### 1. 定义状态变量
为了表示不同阶段的状态变化情况,定义三个二进制位作为状态编码S0, S1 和 S2 来区分各个可能的情况:
| 状态 | 描述 |
| --- | ---- |
| S0 (00) | 初始/无钱投入 |
| S1 (01) | 已经收到1元 |
| S2 (10) | 收到至少两枚一元或一枚两元 |
##### 2. 输入输出设定
- **输入**:两个按钮分别代表1元(`I_1`)和2元(`I_2`)
- **输出**:
- `O_G` 表示是否给予货物;
- `O_C` 表示是否有找零;
##### 3. 转移函数构建
根据上述定义的状态转换关系绘制状态转移图如下所示:
```plaintext
I_1=1,I_2=0 I_1=0,I_2=1 I_1=1,I_2=0 I_1=0,I_2=1
S0 --> S2 -----------\ /------------\
^ | X |
| v \ /
+--<-------------/
```
其中箭头上的标签指明了触发相应转变所需的输入组合。例如,“I_1=1, I_2=0”意味着只有当按下价值1元的按键而未按压其他键时才会发生这种变迁。
##### 4. 输出函数确定
基于每种状态下应该产生的行为来决定输出信号的具体取值:
| 当前状态 | 下一步骤 | O_G | O_C |
| -- | ----------------- | --- | --- |
| S0 | 接受任何面额 | 0 | 0 |
| S1 | 若再加1则转至S2; 否则保持不变 | 0 | 0 |
| S2 | 发放物品并将剩余退还给顾客 | 1 | 可能有也可能没有|
##### 5. 实现方式
通过卡诺图简化得到最简表达式之后可以用基本门电路搭建整个系统。这里省略具体化简步骤直接展示最终结果的一部分伪代码形式:
```verilog
module vending_machine(
input wire clk,
input wire reset_n,
input wire i1,
input wire i2,
output reg o_give_goods,
output reg o_change
);
// ... 中间部分省略 ...
always @(posedge clk or negedge reset_n)
begin
if (!reset_n)
state <= IDLE;
else case(state)
IDLE : begin
if(i1 || i2){
next_state = ONE_COIN;
}else{
next_state = IDLE;
}
end
// 更多case分支...
end
endmodule
```
以上就是利用有限状态机制作简单版自动售卖机设计方案的一个概述。
阅读全文