Vhdl 为什么我会得到一个推断的闩锁错误?

Vhdl 为什么我会得到一个推断的闩锁错误?,vhdl,Vhdl,我得到了一个错误:[Synth 8-327]推断行地址处变量“d_reg”的锁存1当您没有在进程中的if/else或case语句的所有可能变体中为信号提供更新的分配时,通常会得到推断的锁存 在您的例子中,流程语句包括5个信号,但只有两个事项(clk和address1)。对于“IF(clk='1'和clk'event)THEN”,您有一个格式良好的同步条件语句,但是有一个ELSE子句可能是问题的原因。VHDL将使信号的值保持在以前的状态,除非您显式修改它,因此不需要: ELSE addres

我得到了一个错误:[Synth 8-327]推断行地址处变量“d_reg”的锁存1当您没有在进程中的if/else或case语句的所有可能变体中为信号提供更新的分配时,通常会得到推断的锁存

在您的例子中,流程语句包括5个信号,但只有两个事项(clk和address1)。对于“IF(clk='1'和clk'event)THEN”,您有一个格式良好的同步条件语句,但是有一个ELSE子句可能是问题的原因。VHDL将使信号的值保持在以前的状态,除非您显式修改它,因此不需要:

ELSE
   address1 <= address1;
ELSE

address1您已经在时钟部分之外进行了检查,所以如果检查为0,则address保留其值—一个闩锁@棘手的是,我改变了检查,以内时钟部分,我仍然得到相同的错误。谢谢你的帮助。我已经更新了操作码。
SIGNAL address1 : STD_LOGIC_VECTOR(31 DOWNTO 0) := "00000000000000000000000000000000";
SIGNAL check : STD_LOGIC_VECTOR(0 DOWNTO 0) := "0";
writeprocess:PROCESS(clk, ce_l,we_l, address1, check)
   begin
      IF (clk = '1' AND clk'event) THEN
          IF(check = "1") THEN
             IF (ce_l = '0' AND we_l = '0') THEN
                address1 <= d(31 DOWNTO 0); 
             ELSE
                address1 <= address1;
             END IF;
           ELSE
                address1 <= address1;
           END IF;
       ELSE
           address1 <= address1;
       END IF;
   END PROCESS writeprocess ;
ELSE
   address1 <= address1;
writeprocess:PROCESS(clk)
   begin
      IF (clk = '1' AND clk'event) THEN
          IF(check = "1") THEN
             IF (ce_l = '0' AND we_l = '0') THEN
                address1 <= d(31 DOWNTO 0); 
             ELSE
                address1 <= address1;
             END IF;
           ELSE
                address1 <= address1;
           END IF;
       END IF;
   END PROCESS writeprocess ;