Process 问题:错误(10818):Can';t推断“的寄存器”;y[0]”;在FSM_LCD.vhd(42),因为它的值不在时钟边缘之外

Process 问题:错误(10818):Can';t推断“的寄存器”;y[0]”;在FSM_LCD.vhd(42),因为它的值不在时钟边缘之外,process,vhdl,clock,fsm,Process,Vhdl,Clock,Fsm,我正在尝试实现一个有限状态机,它在每个状态转换之间有一个延迟(500ns),有一个50Mhz的时钟,所以有25个时钟周期的延迟。 请注意: EA=当前状态 PE=下一个状态 重置0时“重置” 我正在从y=0到y=M进行计数,但它给出了相同的错误: 错误(10818):无法推断FSM_LCD.vhd(42)上“y[0]”的寄存器,因为它的值不在时钟边缘之外 有人知道如何解决这个问题吗? 下面是一些代码(它还有一个使用S0到S14的过程): FSM\u-LCD的架构自动机是 类型状态为(S0、S1

我正在尝试实现一个有限状态机,它在每个状态转换之间有一个延迟(500ns),有一个50Mhz的时钟,所以有25个时钟周期的延迟。 请注意: EA=当前状态 PE=下一个状态 重置0时“重置”


我正在从y=0到y=M进行计数,但它给出了相同的错误: 错误(10818):无法推断FSM_LCD.vhd(42)上“y[0]”的寄存器,因为它的值不在时钟边缘之外

有人知道如何解决这个问题吗? 下面是一些代码(它还有一个使用S0到S14的过程):

FSM\u-LCD的架构自动机是 类型状态为(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); 信号EA,PE:状态; 信号时钟:标准逻辑; 信号复位:标准逻辑; 信号y:整数:=0--你的辛辣吃了我一顿饭 常数M:整数:=5--差分valor ao simular e ao executar por硬件 信号n:整数:=0; 开始
时钟将P2重写为正常的同步(时钟)进程形式

顺便说一句,格式要好得多;比上一个问题更容易阅读

    P2: process(clock)
        begin
            if rising_edge(clock) then
               if y = m then
                  y <= 0;
               else 
                  y <= y + 1;
               end if;
            end if;
        end process;
P2:进程(时钟)
开始
如果上升沿(时钟),则
如果y=m,则

y(当我按enter键时,它会添加注释而不是跳线)我按照你说的做了,但现在我得到了以下错误:错误(10028):无法在FSM_LCD.vhd(29)上解析网络“EA.S0”的多个常量驱动程序图片:那是因为“EA”有多个驱动程序。另一个就在过程之上,不应该在那里。好吧,modelsim不想运行它,它说“Case语句选择只覆盖81个案例中的4个”,我发现这毫无意义,因为“Operaco”只有2个位,远远不是所说的81个组合……Operaco有2个位,每个位都有9个可能的值(包括“Z”、“X”等。所以9**2=81个可能的案例……干得好modelsim!添加一个“when others”条款涵盖其他人。我建议
when others=>报告“Operacao问题!”严重故障
    P2: process(clock)
        begin
            if rising_edge(clock) then
               if y = m then
                  y <= 0;
               else 
                  y <= y + 1;
               end if;
            end if;
        end process;
    signal delay : integer;

    P1: process(clock, reset)
        begin
           if reset = '0' then 
              -- reset actions here
           elsif rising_edge(clock) then 
              if delay = 0 then
                 EA <= PE;
                 delay <= M;
              else 
                 delay <= delay - 1;
              end if;
           end if;
        end process;