非对称1位锁存器(VHDL)

非对称1位锁存器(VHDL),vhdl,state-machine,flip-flop,Vhdl,State Machine,Flip Flop,我正在编程一个N位非恢复除法器,但我遇到了一个小问题 我有一个操作部分(组合)和一个控制部分(有限状态机)。 控制部分有2个进程FSM,1个用于更新下一个状态,1个用于“状态序列” 更新:进程(clk\U in,下一个\U状态) 开始 如果上升沿(clk_in),则 当前状态您缺少的是您描述的闩锁行为。任何带有内存的东西(例如:“在其他状态下,我不改变它的值”)要么是锁存器,要么是寄存器(触发器)。如果不需要锁存器或寄存器,则需要为每个代码路径中的信号指定一个特定值,而不是让它“记住”以前的状态

我正在编程一个N位非恢复除法器,但我遇到了一个小问题

我有一个操作部分(组合)和一个控制部分(有限状态机)。 控制部分有2个进程FSM,1个用于更新下一个状态,1个用于“状态序列”

更新:进程(clk\U in,下一个\U状态)
开始
如果上升沿(clk_in),则

当前状态您缺少的是您描述的闩锁行为。任何带有内存的东西(例如:“在其他状态下,我不改变它的值”)要么是锁存器,要么是寄存器(触发器)。如果不需要锁存器或寄存器,则需要为每个代码路径中的信号指定一个特定值,而不是让它“记住”以前的状态

update:     process(clk_in, next_state)
        begin
            if rising_edge(clk_in) then
                current_state <= next_state;
            end if;
        end process;
control:    process(current_state, start, S_in, counted)
            variable sub_tmp : STD_LOGIC := '0';
        begin
                            [...]
            sub <= sub_tmp; -- sub is an output signal of my entity that goes in the Operative Part

            case current_state is
                when idle =>
                    if start='1' then
                        next_state <= init;
                    else
                        next_state <= idle;
                    end if;

                when init =>
                                            -- [...]
                    next_state <= subtract;

                when subtract =>
                    en_A <= '1';
                    sub_tmp := '1';
                    next_state <= test;

                when test => -- shift
                    en_Q <= '1';

                    if S_in='0' then
                        sub_tmp := '1';
                    else
                        sub_tmp := '0';
                    end if;

                    if counted=N/2-1 then
                        next_state <= finished;
                    else
                        next_state <= operation;
                    end if;

                when operation =>
                    en_A <= '1';
                    next_state <= test;

                when finished =>
                    stop <= '1';
                    next_state <= idle;
            end case;
        end process;