![人工智能硬件电路设计基础及应用](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=1739071270-99bRDH9smchOczXkJB8Y1hIYYBP9B5jv-0-d34ea9ce340667c43261f2d66a905614)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_122_1.jpg?sign=1739071270-nVqqfo47BuyS1mLWvsUUGmRlmlXp2WN0-0-20d7c348d9a9b53f832bb23d7eb01b7e)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_123_1.jpg?sign=1739071270-VX9ZccQSGckWayHXHuecQYIXcnFbG5X9-0-93a1f8696cb425190c96d2dd0036909b)
带同步清零端和装载端的模10计数器的RTL图如图6.3所示。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_123_2.jpg?sign=1739071270-tKAQnjbhdMCQ6uoX6rpitlun0r2piulO-0-800edc1f99305016a2d975cf4683656c)
图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=1739071270-TdGf2bKCizuICOn9N7GsICgSXQYyZhQG-0-3a9f5e839ee6f62d8c307862c146a53e)
图6.4 带同步清零端和装载端的模10计数器的仿真结果
6.2.2 带异步复位端的序列检测器
本示例设计的是带异步复位端的序列检测器,可实现对输入串行数据流中“10110”子序列的检测,输出当前检测结果,并且具有异步复位端。序列检测器使用独热码表示内部的状态,最大限度地在设计过程中降低延时和竞争的出现。序列检测器分为三个部分。第一个部分为下一状态生成电路,根据串行数据流输入端和当前状态生成下一个状态。第二部分为状态转移电路,实现异步复位,以及状态转换。第三部分为输出电路,根据序列检测器的当前状态输出检测结果。当检测到“10110”子序列时,检测器输出“1”。
本示例的VHDL代码如下。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_124_2.jpg?sign=1739071270-EYxfijF1bg3Ppj7ebk8LUBhiXJnswDE2-0-02f34f616fda0fe0809d66e73167f615)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_125_1.jpg?sign=1739071270-Vy0tDmswZojK8fZvU7GxGAfCWcRYkczQ-0-afe9a0e97b10efe21f381ba4c0dde1f0)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_126_1.jpg?sign=1739071270-tS5S89sJ7UoGy4obowQOVes27BptoMcr-0-7e794549cb9e131791e03cc98b7865af)
图6.5是带异步复位端的序列检测器的仿真结果。输入是周期为20ns的时钟信号,复位信号在150ns至160ns之间有效。在输入时钟上升沿,序列检测器根据相应规则自动进入下一个状态。当序列检测器进入“000001”状态时,输出变为“1”。复位信号有效时,序列检测器立即复位到初始状态,实现了异步复位。仿真结果验证了设计的正确性。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_126_2.jpg?sign=1739071270-anSoummgLdGL1TdERw24bLyta86gScvF-0-3b85bb2ac114bf319d9d12d055ca9ba7)
图6.5 带异步复位端的序列检测器的仿真结果