前言
本篇博客主要基于一些状态机书写的规范以及其构成结构進行相应的简单分析,同时依据HDLBits中两道典型的题目(HDLBits第139题:简单Moore状态机的实现和HDLBits第140题:简单Mealy状态机的实现)分析两種状态机的异同和电路描述特点。
一、状态机及其描述
- 输入组合逻辑电路(State transition logic of the input):这一段电路位与D触发器的输入端,它根据外部输入信号和当前D触发器的输出状态机(current_state)来计算出下一个状态next_state: next_state=f(in,current_state) 。其中f就是它的输入计算逻辑,根据电路功能要求需要设计者自行设计。
- 输出组合逻辑电路 (transition logic of the output):根据电路当前状态(和 当前输入 )计算电路的输出状态。
- D触发器(D flip - flop):这一部分用来保存输入组合逻辑电路计算出的状态:
- 【1】它的输出d_out表示电路的当前状态current_state ;
- 【2】它的输入d_in 表示电路的下一个状态next_state =f(in,current_state) ;
- 【3】在时钟沿到來之後,D触发器输出就是下一个状态: current_state <= <= next_state ;
因此状态机flip-flop部分的书写格式较为固定,考虑到复位信号的影响,通常参照以下模板即可:
always @(posedge clk or posedge areset) begin//异步复位
if(areset)
current_state <= state_0; //复位时恢复到状态0,恢复到的状态依具体电路而定
else
current_state <= next_state;
end
4. 时序逻辑电路的设计步骤
- No1:确定输入和输出;
- No2:确定状态个数以及状态转移关系;
- No3:根据电路需要选择合适的状态机模型(Moore或者Mealy)
- No4:画出电路结构图;
- No5:進行代码的书写,描述电路
二、Moore状态机和Mealy状态机
设计对象描述及其原理
- 题目希望分别使用Moore状态机和Mealy状态机设计一个八位的补码器,由于正数的补码就是其本身,因此设计对象主要是针对负数的补码,且根据题目要求可以推测操作对象是除去符号位的低八位。
- 负数补码的原理为:符号位不变,余下位数取反再加1 我们观察几个例子: