21.根据状态转移表实现时序电路
- 状态机三段式:
- 第一段:时序逻辑,次态赋给现态
- 第二段:组合逻辑,现态和输入决定输出
- 第三段:时序逻辑,输出判断
三段式寄存器输出,不产生毛刺(两段式容易出现竞争冒险,产生毛刺),有利于时序约束。
状态编码:二进制(适用于CPLD)和独热码(适用于FPGA)
独热码:S0=3'b001,S1=3'b010,S2=3'b100
二进制编码、格雷码编码使用最少的触发器,消耗较多的组合逻辑,而独热码编码反之。
default 防止锁存器的产生
reg [1:0] curr_state;
reg [1:0] next_state;
always @(posedge clk or negedge rst_n)
begin
if(~rst_n)begin
curr_state<=2'b00;
next_state<=2'b00;
end
else begin
curr_state <= next_state;
end
end
always@(*)
begin
case(curr_state)
2'b00:next_state=(A == 1'b1) ? 2'b11:2&