2.有限状态机——售货机,序列检测

1. 标准三段式写法:

1.一段代表当前状态赋值;

2.一段代表下一个状态如何跳变

3.一段代表输出控制

一定要带上复位

前两段模板集合一样,第三段取决于具体需求

parameter IDLE_ST = 4'b0000;
parameter TEST_ST = 4'b0001;
...
reg [3:0] current_st, next_st
always@(posedge clk or negedge rst)
begin
if(rst)
current_st <= IDLE_ST;
else
current_st <= next_st ;

always@(*)begin
case(current_st)
IDLE_ST: next_st = TEST_ST;
...
default: next_st = IDLE_ST;
endcase
end
reg out_valid;

always@(posedge clk or posedge rst) begin//可以是组合也可以是时序,取决于具体需求
if(rst)
out_valid <= IDLE_ST;
else begin
case(current_st)
IDLE_ST: out_valid <= TEST_ST;
end
end

2. 设计-1(售货机)

2.1 设计要求

输入只识别5毛和一元两种硬币。饮料价格为1.5元,超过不找零

输入有三种:

5角 2'b01

1元 2'b10

其他 2'b00/11

状态定义及输出:

没有投入硬币,不掉出饮料

一共投入5角,不掉出饮料

一共投入1元,不掉出饮料

一共投入1.5元,掉出饮料

2.2 思路

重点:第一步:判断共有几个状态,共有哪些输入和输出

第二步:画状态转换图(每个状态需要表示出所有输入输出组合)

状态定义及输出:

S0,Drink_out = 0

S1,Drink_out = 0

S2,Drink_out = 0

S3,Drink_out = 1

2.3 设计代码

第一段:定义参数,确定状态

第二段:状态跳转

第三段:根据状态,输出结果,根据实际需求确定写组合逻辑或者时序逻辑

3. 设计-2(序列检测)

2.1 设计要求

使用FSM有限状态机设计一个电路,它检测单比特输入引脚in,当输入序列为10011时,输出match为高,其余输入组合match输出为0(可以复用已有bit)。并设计一个测试环境测试改序列检测电路。输入in前10bit为0011001100,之后再随机输入50bit in,检查输出结果。

2.2 思路

输入有两种:0和1

状态转换图

S0:初始状态,输入为0

S1:累计输入为1,输出为0

S2:累计输入为10,输出为0

S3:累计输入为100,输出为0

S4:累计输入为1001,输出为0

S5:累计输入为10011,输出为1

2.3 设计代码

第一段:

第二段:

第三段:

2.4 仿真代码:

2.5 波形

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值