![人工智能硬件电路设计基础及应用](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=1739511122-7S3xQYdFupAzGoDXYowOKXt4gGafedPy-0-98d730c0566db1c0ebdcd8619db47045)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_122_1.jpg?sign=1739511122-5Op094dx1IejSsgSKD2KCSiNhPportNt-0-81578fb95f6e9e470d5e4b8b58c98910)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_123_1.jpg?sign=1739511122-RAvVl2SWdx20sB60o35knUnrfv60BEkP-0-ecba9f57f88e9510e4a0cd8b72c32134)
带同步清零端和装载端的模10计数器的RTL图如图6.3所示。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_123_2.jpg?sign=1739511122-jT2Dr6TvC2Wxb85wdF2oVPnKmTCIqLsi-0-2f43fb691c147f47ce43274c3864aff8)
图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=1739511122-ZedVRFOEntMH5V9vzDpe6uTg0qkE4K6T-0-cae4b81a23b47a263751e1c5e1aa63fb)
图6.4 带同步清零端和装载端的模10计数器的仿真结果
6.2.2 带异步复位端的序列检测器
本示例设计的是带异步复位端的序列检测器,可实现对输入串行数据流中“10110”子序列的检测,输出当前检测结果,并且具有异步复位端。序列检测器使用独热码表示内部的状态,最大限度地在设计过程中降低延时和竞争的出现。序列检测器分为三个部分。第一个部分为下一状态生成电路,根据串行数据流输入端和当前状态生成下一个状态。第二部分为状态转移电路,实现异步复位,以及状态转换。第三部分为输出电路,根据序列检测器的当前状态输出检测结果。当检测到“10110”子序列时,检测器输出“1”。
本示例的VHDL代码如下。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_124_2.jpg?sign=1739511122-Vt1AaYJxRcNJAaJiNbRiY88kbTEWlob5-0-466dac3a3416651cf7747c040b605468)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_125_1.jpg?sign=1739511122-QheaG5YhpIcN6l549YEnhg0jZ0LzzFge-0-0af5b7cd386c4c538c1218386459a1b1)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_126_1.jpg?sign=1739511122-4Y5ryl0LPoKh2pajX0pbtWTttEHGYsoC-0-902416254b60af88326cf4de030cd47f)
图6.5是带异步复位端的序列检测器的仿真结果。输入是周期为20ns的时钟信号,复位信号在150ns至160ns之间有效。在输入时钟上升沿,序列检测器根据相应规则自动进入下一个状态。当序列检测器进入“000001”状态时,输出变为“1”。复位信号有效时,序列检测器立即复位到初始状态,实现了异步复位。仿真结果验证了设计的正确性。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_126_2.jpg?sign=1739511122-Fw9DTxIuE2yPuCzkEYSzRv9FcHv1ZDiy-0-99766adb5950f4173a4a409244ab5720)
图6.5 带异步复位端的序列检测器的仿真结果