vhdl - VHDL:FSM 输出延迟 1 个时钟周期
问题描述
我目前正在编写一些 vhdl 代码,但我遇到了 FSM 问题。特别是,FSM 非常简单,它只有 3 个状态,S0、S1、S2。这是代码:
type state is (S0,S1,S2);
signal state_curr, state_next : state;
begin
process(i_clk,i_rst)
begin
if i_rst = '1' then
state_next <= S0;
state_curr <= state_next;
elsif rising_edge(i_clk) then
state_curr <= state_next;
case state_curr is
when S0 =>
out_sample_first = '0'
out_sample_second = '0'
if first_input = '1' then
state_next <= S1;
else
state_next <= S0;
end if;
when S1 =>
out_sample_first = '1'
out_sample_second = '0'
if second_input = '1' then
state_next <= S2;
else
state_next <= S1;
end if;
when S2 =>
out_sample_first = '0'
out_sample_second = '1'
if first_input = '0' and second_input = '0' then
state_next <= S0;
else
state_next <= S2;
end if;
end case;
end if;
end process;
状态之间的转换工作正常,但这是我遇到问题的两个输出信号。具体来说,“更新”这些信号需要一个完整的时钟周期。这是一个示例(取自我编写的测试平台)。
在前几个时钟周期,我的 FSM 位于 S0 中,out_sample_first 为 0,而 out_sample_second 为 0,应该是这样。在时钟周期数 10 处,first_input 变为 1。自然,需要 1 个时钟周期才能转换到 S1,并且正确地,在时钟周期 11 的上升沿,FSM 处于状态 S1。我的问题在这里:我预计 out_sample_first 为 1,out_sample_second 为 0(这是 S1 状态下 FSM 的预期输出),但在此时钟周期数 11 中,信号与前一个周期相同。然后,在时钟周期 12 处,信号发生变化,并且正确地变为 out_sample_first = 1 和 out_sample_second = 0。
我想了解为什么会发生这种情况,并且由于 FSM 与计数器一起工作,因此不会发生这种延迟至关重要。我能做些什么呢?
我的第一个“解决方案”是改变case state_curr is
其中case state_next is
,正如测试台所显示的那样,工作正常。我不确定这是“最佳解决方案”还是根本解决方案。
解决方案
推荐阅读
- amazon-web-services - 尝试在后确认功能中使用模型
- r - 因子查找中 NA 的意外回报
- javascript - /v2/search/SARS_CoV_2/GID1716 处的 NoReverseMatch
- python-3.x - Python - 带参数的 pypsexec 命令
- java - mediaRecorder.prepare(); 尝试创建文件时出现错误Getting file not found异常
- api - 我的 api 项目没有达到我的断点
- javascript - 自动显示隐藏 DIV Javascript 语法
- asp.net - Body 如何应用于 HTTP 请求?
- python - 在某个类别中创建频道
- python - 如何使用 python 从给定文本生成问题 True/False?