我通常是一名 C#/Java 程序员,但我仍然无法完全理解硬件描述。
我有一个加载值的寄存器。之后,比较器将寄存器的输出与值“16”进行比较。如果值小于或等于,我去State_0,如果它大于,我去State_3。
我有一个与我的可状态进程同时运行的“控制信号”进程。对于我的控制信号,我知道当我处于 State_2 时,我必须将寄存器的启用设置为高,所以:
controlsignals: PROCESS (Tstep_Q)
BEGIN
.... initialisation ...
CASE Tstep_Q IS
.... other states ....
WHEN T2 => --define signals in time step T2
enRegister = '1';
对于我的状态表:
statetable: PROCESS (Tstep_Q, regOutput)
BEGIN
CASE Tstep_Q IS
.... other states ....
WHEN T2 =>
IF ((regOutput - 16) > 0)
THEN Tstep_D <= T3;
ELSE Tstep_D <= T0;
END IF;
在我的代码接近尾声时,我有:
fsmflipflops: PROCESS (Clock)
BEGIN
IF Clock'EVENT AND Clock = '1' THEN
Tstep_Q <= Tstep_D;
END IF;
END PROCESS;
reg: regn PORT MAP (somevalue, enReg, Clock, regOutput);
由于我的状态表和我的控制信号是并发块,我的困惑是......我是否会首先启用寄存器然后运行比较器以确定我的下一个状态,就像我希望我的电路运行一样(因为状态表对 regOutput 很敏感)? 或者在我有比较器的 T2 之后创建一个新状态会更安全吗?先感谢您。