![人工智能硬件电路设计基础及应用](https://wfqqreader-1252317822.image.myqcloud.com/cover/533/43738533/b_43738533.jpg)
6.2 状态机设计实例
6.2.1 带同步清零端和装载端的模10计数器
本示例设计的是带同步清零端和装载端的模10计数器,可实现对输入时钟计数,输出当前计数结果和进位,并且具有使能端、同步清零端和同步装载端。计数器有“0000”~“1001”共10种计数状态和“0”、“1”两种进位状态。计数器分为三个部分。第一个部分为下一状态生成电路,根据复位端输入、装载端输入和当前状态生成下一计数状态和下一进位状态。第二部分为状态转移电路,在使能端为高电平时,计数器在时钟信号上升沿到来时,改变计数器的状态。第三部分为输出电路,根据计数器的当前状态输出计数结果和进位。
本示例的VHDL代码如下。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_121_2.jpg?sign=1738911929-HfumpId7HvuUaiTDZd6Cf3mLcMbUumJ6-0-67ef2f30139905d1d5afb404da90fa9e)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_122_1.jpg?sign=1738911929-obT3N1eqKiYBn9AM66blNsMIvHC5dKzS-0-00fe2dfef0fc71c2ef9a2b48c078587b)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_123_1.jpg?sign=1738911929-sdfLFv1hUrgIOn48zDrsY14P48CJFni1-0-b12a000b0ff7d7225bde8e8a51e35b79)
带同步清零端和装载端的模10计数器的RTL图如图6.3所示。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_123_2.jpg?sign=1738911929-wYZdWw5cKxICdc122wOOQaR3n21ndDPT-0-d84b7505f5724d6c530709d13096b6ff)
图6.3 带同步清零端和装载端的模10计数器的RTL图
图6.4是带同步清零端和装载端的模10计数器的仿真结果。输入是周期为20ns的时钟信号,使能信号在0ns至200ns及230ns后始终有效,清零信号在105ns至145ns有效。计数器使能有效时,在输入时钟上升沿时,计数器自动进入下一状态。当计数器的计数状态由“1001”状态进入“0000”状态时,进位状态变为高电平;计数器由“0000”进入“0001”,进位变为低电平。清零信号有效时,计数器输出没有立即清零,而是在下一个时钟上升沿才做出响应,实现了同步清零。装载信号有效时,计数器输出同样没有立即响应,而是在下一个时钟上升沿将状态转换为输入数据。仿真结果验证了设计的正确性。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_124_1.jpg?sign=1738911929-F3xFVduz6yMquOktCBZYRYFIafMqxjhj-0-6254a8cb5b0eeb5ce7014438d1fac61b)
图6.4 带同步清零端和装载端的模10计数器的仿真结果
6.2.2 带异步复位端的序列检测器
本示例设计的是带异步复位端的序列检测器,可实现对输入串行数据流中“10110”子序列的检测,输出当前检测结果,并且具有异步复位端。序列检测器使用独热码表示内部的状态,最大限度地在设计过程中降低延时和竞争的出现。序列检测器分为三个部分。第一个部分为下一状态生成电路,根据串行数据流输入端和当前状态生成下一个状态。第二部分为状态转移电路,实现异步复位,以及状态转换。第三部分为输出电路,根据序列检测器的当前状态输出检测结果。当检测到“10110”子序列时,检测器输出“1”。
本示例的VHDL代码如下。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_124_2.jpg?sign=1738911929-l3Blgmhhy3aqEeDJIWwaMOl6hIR6iN7N-0-a830a47e970347b589c32915a9ca56d6)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_125_1.jpg?sign=1738911929-gBVBGDY7wkDobWt1BgOOXZU1uNwv9J8Q-0-25e3dbcfb7fdb0da967248e21367b550)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_126_1.jpg?sign=1738911929-6LhU0YbriFQVRS6toU5e4iDWlSVdtO6d-0-6c836cf7b1102ea7027baf7a0af6bdec)
图6.5是带异步复位端的序列检测器的仿真结果。输入是周期为20ns的时钟信号,复位信号在150ns至160ns之间有效。在输入时钟上升沿,序列检测器根据相应规则自动进入下一个状态。当序列检测器进入“000001”状态时,输出变为“1”。复位信号有效时,序列检测器立即复位到初始状态,实现了异步复位。仿真结果验证了设计的正确性。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_126_2.jpg?sign=1738911929-C5v4bmKefaJgNYPsX93zLTcjSEGq9SJF-0-cae2679c593d8bd259c531a28d0745c4)
图6.5 带异步复位端的序列检测器的仿真结果