Я пытаюсь реализовать конечный автомат с задержкой (500 нс) между каждым переходом состояния с тактовой частотой 50 МГц, поэтому задержка составляет 25 тактов. Обратите внимание, что: EA=текущее состояние PE=сброс следующего состояния "сбрасывается" при 0
Я производил подсчет от y=0 до y=M, но выдает ту же ошибку: «Ошибка (10818): невозможно вывести регистрацию для «y[0]» в FSM_LCD.vhd(42), потому что это не так. удерживать свое значение за пределами часов"
Кто-нибудь знает, как это исправить? Вот немного кода (у него есть еще один процесс, использующий S0 до S14):
architecture automat of FSM_LCD is
type states is (S0, S1, S2, S3, S4, S5, S6_00, S6_01, S6_10, S6_11, S7_0, S7_1, S8, S9, S10, S11, S12, S13, S14);
signal EA, PE: states;
signal clock: std_logic;
signal reset: std_logic;
signal y : integer := 0;--y sera' acrescido ate' M de modo a criar um delay
constant M : integer := 5;--diferenciar valor ao simular e ao executar por hardware
signal n : integer := 0;
begin
clock <= Clk;
reset <= Rst;
EA <= S0;--apenas ao ativar o FSM pela primeira vez
P1: process(clock, reset)
begin
if reset = '0' then
EA <= S3;--S0,S1 e S2 sao setup, ignorar-los ao resetar?
elsif clock'event and clock = '1' and y = 0 then
EA <= PE;
-- elsif y = M then
-- y <= 0;--estados so' mudarao se n = 0
end if;
end process;
P2: process(clock)
begin
if clock = '1' then
y <= (y+1);
elsif y = M then
y <= 0;
end if;
n <=y;
end process;