Je sais que cette erreur a été rencontrée plusieurs fois sur SO, mais en tant que débutant Je suis toujours incapable de voir comment résoudre cette erreur dans mon propre code. L'erreur et le code sont tous deux imprimés ci-dessous, merci à tous pour leur contribution. L'erreur est répétée pour chaque bit de 'compte' et se réfère à la ligne notée dans le code.Erreur de code VHDL: "Erreur (10818): Impossible de déduire le registre pour <name> à <location> car il ne détient pas sa valeur en dehors du bord de l'horloge"
ARCHITECTURE behavioral OF 5bit_PHreg_vhdl IS
SIGNAL count : STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
PROCESS(reset, clk, SHR_EN)
BEGIN
-- Check if asynchronous reset is 0
IF reset = '0' THEN --ERROR OCCURS HERE
count <= "00000";
-- Check if rising edge
ELSIF (clk'EVENT AND clk = '1') THEN
IF LD_EN = '1' THEN
count <= FA_in;
END IF;
-- Check if SHR_EN is active
ELSIF (SHR_EN = '1') THEN
count(4) <= c_in;
count(3) <= count(4);
count(2) <= count(3);
count(1) <= count(2);
count(0) <= count(1);
c_out <= count(0);
END IF;
END PROCESS;
PH_reg_out <= count;
END behavioral;
N'utilisez pas 'else' ou' elsif' après 'IF (clk'EVENT AND clk = '1')'. De plus, utilisez 'rising_edge (clk)' au lieu de 'clk'EVENT AND clk = '1''. Lire [HERE] (http://vhdlguru.blogspot.com/2010/04/difference-between-risingedgeclk-and.html) pourquoi. Je ne peux pas vous donner de réponse détaillée, parce que vous n'avez fourni qu'une partie du code, et je n'ai pas expliqué ce qu'il devrait faire. Fournissez [mcve]. – Staszek
'ELSIF (SHR_EN = '1') THEN' est en dehors des conditions de réinitialisation et de bord d'horloge, sa forme n'est pas reconnue pour la synthèse. Déplacez-le et les affectations suivantes à l'intérieur de la fin précédente si c'est enregistré. Supprimez SHR_EN de la liste de sensibilité du processus. – user1155120
Merci à tous ceux qui ont commenté. Je me rends compte maintenant que j'ai posté impulsivement et n'a pas adhéré à fournir une question "minime, complète et vérifiable". –