![人工智能硬件电路设计基础及应用](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=1739339118-vMrTgoQtjKGkrDBXO8gNHMsw3KD1EZQf-0-7a587a0c8810553d476f9a0a706633f8)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_122_1.jpg?sign=1739339118-4hEi6Uvr83CQPiTt3cacMpADCVUujJWr-0-6cf0c39951833f9cf49e71b9957c4d7d)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_123_1.jpg?sign=1739339118-KWLNEh4KkOIf7nnWui8aLsg3Fhkjy4aK-0-94e79c84f662ac23cec7e9ee4ecec81c)
带同步清零端和装载端的模10计数器的RTL图如图6.3所示。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_123_2.jpg?sign=1739339118-DWDvNKD7NBBjxSeCAdYBrQgSvBp10YKy-0-eb555047e5a34716aeadbbad2645cbed)
图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=1739339118-9NRnyr8rWz1K61MG5ok24UGQKtOBvXte-0-2ea6ec5c31116a9b3aef2602b10c18c6)
图6.4 带同步清零端和装载端的模10计数器的仿真结果
6.2.2 带异步复位端的序列检测器
本示例设计的是带异步复位端的序列检测器,可实现对输入串行数据流中“10110”子序列的检测,输出当前检测结果,并且具有异步复位端。序列检测器使用独热码表示内部的状态,最大限度地在设计过程中降低延时和竞争的出现。序列检测器分为三个部分。第一个部分为下一状态生成电路,根据串行数据流输入端和当前状态生成下一个状态。第二部分为状态转移电路,实现异步复位,以及状态转换。第三部分为输出电路,根据序列检测器的当前状态输出检测结果。当检测到“10110”子序列时,检测器输出“1”。
本示例的VHDL代码如下。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_124_2.jpg?sign=1739339118-MMOwlg8dxmSshXKlUOe1MSn3XxX4Wiwk-0-8d39ac21542fd2ddec2dbd4bf42a9748)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_125_1.jpg?sign=1739339118-Pl8jVIpswp2dg2B6dQhlPqCesYv70WtM-0-43b247642aecac101b4b939b84e8f9f7)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_126_1.jpg?sign=1739339118-YjdiMeNobxORmF1VNg4ibfVeLJRedLeB-0-575d1e96001ea2930fb6ede0845d1b3f)
图6.5是带异步复位端的序列检测器的仿真结果。输入是周期为20ns的时钟信号,复位信号在150ns至160ns之间有效。在输入时钟上升沿,序列检测器根据相应规则自动进入下一个状态。当序列检测器进入“000001”状态时,输出变为“1”。复位信号有效时,序列检测器立即复位到初始状态,实现了异步复位。仿真结果验证了设计的正确性。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_126_2.jpg?sign=1739339118-1xte7vKfiv2mOZTDFAmiQ3ATr6Xl3maH-0-325136cc9f22691d1eba266fcff1e29f)
图6.5 带异步复位端的序列检测器的仿真结果