快速入门数字芯片设计,UCSD ECE111(四)深入理解状态机(上)

简介: 快速入门数字芯片设计,UCSD ECE111(四)深入理解状态机

这篇文章带来ECE111第四节课的Slides以及自己的一些补充。

该课程的网站如下:

首先回顾了一下状态机的概念。我个人理解:状态机和人的思维非常类似,同时软件的执行也可以看作一个状态机。将一个任务划分为不同的状态,定义状态之间的跳转逻辑,不同的状态实现怎样的功能等,可以实现大多数的典型算法。但是状态机实现并不一定是个好的实现,基于状态机实现实际上跟软件思维已经差不多了,但实际上硬件之间是并行的,这和人的逻辑思维是不一样的。所以采用状态机实现一些逻辑功能的话,很大概率没有很好的利用并行运算这一特点,导致并行度不够高,吞吐量不够大等。当然,对于初学者,掌握状态机是非常重要的,状态机在实现控制逻辑上具有非常重要的作用。

然后回顾了一下状态机的电路图,状态机电路有三部分

  • 用于计算下一状态的状态计算逻辑,通常有当前状态和当前输入,决定了下一个状态
  • 用于寄存状态逻辑的D触发器。状态机核心”存储+反馈“。因此D触发器就起到了存储的作用
  • 输出逻辑。根据当前的状态计算此刻的输出

上述所说的是摩尔型状态机,也就是输出与输入无关,只取决于当前状态。希望大家在设计的时候都是用该状态机,不要使用mealy型状态机。原因非常简单,state信号变量由寄存器进行输出,因此计算输出逻辑的时候有很好的时序,如果采用输入加状态共同计算,如果输入是触发器直接输出倒还好。部分情况可能已经经过了很长的组合逻辑,时序会变得很差,并且还会产生毛刺。所以直接按照上图那样设计即可。

然后介绍了一个典型的状态机代码实现。给出的是二段式状态机。其中的enum是枚举变量。下面的代码将计算下一逻辑状态和寄存逻辑状态放到了同一个always块当中,也就是状态机三部分的前两部分。最后采用assign语句,实现了状态机的输出逻辑。我个人并不喜欢这种风格,在我自己做设计的时候,都是采用三段式状态机,也就是采用两个always块,显式的区分当前状态和下一状态,这么做的好处是代码可控,不然state指的是触发器的D端还是Q端呢(这段代码是Q端)?这其实会对初学者产生一些困难。下图是《数字设计.系统方法》的附录,大家可以仔细看一下,应该能有所体会。有关三段式的写法,请参考我的这篇文章:带带大师兄:HDLBits: 在线学习Verilog(Problem 120-126)

然后是代码和电路图的对应,配套的文字告诉我们这段代码实际上是模板,目前的编译器能够很好的识别这段代码了(这段If/else可以很好的综合成带复位的寄存器了)。

然后说明了一下什么是下降沿异步复位,大家看图理解一下吧。

然后说明了,如果我们想全部写在一个always块应该怎么办。我们仍然希望在状态“s0”的时候输出1,这就需要我们在S2状态的时候,写下一个时钟上升沿的逻辑输出q为1。这样的话,输出和S0状态是一起到来的,也就达到了我们的目的。(其实这里蕴含着next_state和current_state作为不同的状态判断,进行逻辑输出是一个道理,大家理解清楚对应的电路图,应该很好判断,无非是差了一个时钟周期而已)


目录
相关文章
|
存储 安全 区块链
快速入门数字芯片设计,UCSD ECE111(十)比特币加密(一)
快速入门数字芯片设计,UCSD ECE111(十)比特币加密
94 0
|
C语言 芯片 SoC
快速入门数字芯片设计,UCSD ECE111(一)Introduction(下)
快速入门数字芯片设计,UCSD ECE111(一)Introduction(下)
124 1
|
算法 编译器 C语言
快速入门数字芯片设计,UCSD ECE111(八)更深入了解SystemVerilog(一)
快速入门数字芯片设计,UCSD ECE111(八)更深入了解SystemVerilog
105 0
|
芯片
快速入门数字芯片设计,UCSD ECE111(八)更深入了解SystemVerilog(二)
快速入门数字芯片设计,UCSD ECE111(八)更深入了解SystemVerilog(二)
89 0
|
编译器 芯片
快速入门数字芯片设计,UCSD ECE111(二)SystemVerilog(下)
快速入门数字芯片设计,UCSD ECE111(二)SystemVerilog(下)
99 0
|
算法 芯片
快速入门数字芯片设计,UCSD ECE111(十二)Testbench和VHDL(三)
快速入门数字芯片设计,UCSD ECE111(十二)Testbench和VHDL(三)
88 0
|
算法 芯片
快速入门数字芯片设计,UCSD ECE111(十二)Testbench和VHDL(一)
快速入门数字芯片设计,UCSD ECE111(十二)Testbench和VHDL
118 0
|
存储 芯片 异构计算
快速入门数字芯片设计,UCSD ECE111(三)System Verilog时序逻辑(上)
快速入门数字芯片设计,UCSD ECE111(三)System Verilog时序逻辑
103 0
|
存储 芯片
快速入门数字芯片设计,UCSD ECE111(三)System Verilog时序逻辑(下)
快速入门数字芯片设计,UCSD ECE111(三)System Verilog时序逻辑(下)
97 0
|
存储 安全 编译器
快速入门数字芯片设计,UCSD ECE111(五)Project1&2(二)
快速入门数字芯片设计,UCSD ECE111(五)Project1&2(二)
80 0