我目前正在使用Vivado Suite作为我的环境编写控制Sitronix ST7066U和LCD模块1602A-1(用于Xilinx Virtex-7)的设备的VHDL描述。
消息处理单元采用2状态(下一状态和输出/条件)FSM建模,但我有一个很大的问题。
由于显示器有自己的"操作时间",如数据表中所示,当我的FSM到达显示器本身正在做的事情的状态时,我需要实现FSM内部的可合成延迟,而我们不能继续进行更多的角色发送。
这部分原本是这样写的:
when count_i => --waits for I_MAX cycles for the internal setup of the display
if (I = I_MAX_tb) then
I <= 0;
TRIGGER <= '1';
op_flag <= '1';
else
I <= I + 1;
end if;
if op_flag = '1' then
op_flag <= '0';
next_state <= init_state;
else
next_state <= count_i;
end if;
但是,在模拟中,状态机保持在count_i状态,并且没有意识到发生了新的状态分配。
我尝试过以下构造
if (state'event) then
I<=I+1;
if (I = I_MAX_tb) then
I <= 0;
TRIGGER <= '1';
op_flag <= '1';
end if;
end if;
但它并没有接近工作。
我很确定这是一个简单的实现问题,但仍然......
(可能与我的流程&#39;敏感度列表有关?)