状态机详解(SpinalHDL编写状态机)(二)

在之前的文章中使用了verilog来编写了状态机,本篇文章将使用SpinalHDL来编写一个相同的状态机。在此之前我们先要知道spinal中的状态机是怎么工作的。

1. SpinaHDL怎么编写状态机

下面我们来看SpinalHDL中对状态机的描述

名称描述
onEntry{语句}在进入当前状态之前执行语句
onExit{语句}在进入下一个状态之前执行语句
whenIsActive{语句}当前状态所需要执行的语句
whenIsNext{语句}在nextstate等于当前的这个状态的时候执行
goto(next state)跳转到下一个状态
exit()设置一个起始状态(暂时不确定它的作用)

2. 编写之前写过的计数状态机

verilog中编写的状态机的关键步骤

case(state)
      stateA: begin
        state <= #1 stateB;
        cnt <= #1 'h2;
      end
      stateB: begin
        cnt <= #1 cnt + 1'b1;
        if(cnt == 'h6) begin
          state <= #1 stateC;
        end else begin
          state <= #1 stateB;
        end
      end
      stateC: state <= #1 stateA;
      default: begin
        state <= #1 stateA;
        cnt <= #1 'h0;
      end
    endcase

我们来对着上面verilog的代码使用SpinaHDL写一个相同的状态机

stateA
	.whenIsActive(goto(stateB)) //stateA当前状态所要执行的语句就是跳转到stateB
stateB
	.onEntry(cnt := 2) //由前面的表格知道这条语句会在上一个状态进入这个状态之前执行
	.whenIsActive{
		cnt := cnt + 1
		when(cnt === 6){
			goto(stateC)
		}
	}
	.onExit(io.result := True) //在stateB跳转到stateC之间执行
stateC
	.whenIsActive(goto(stateA))
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值