4 Bit U/D-Zähler in VHDL

Ich versuche, in VHDL einen 4-Bit-Zähler zu programmieren, der von "0000" bis "1111" oder von "1111" bis "0000" zählt, abhängig vom Wert meiner UD-Variablen (wenn UD = '1' sollte es rückwärts zählen) und wenn es = 0 ist). Es gibt auch ein Signal RCO_L, das den Wert = '0' erhält, wenn mein Zähler eine der Seiten des Zählers erreicht (0 oder 15). Schließlich gibt es ein ENP_L-Signal, das meinen Zähler blockiert, wenn er auf 1 gesetzt ist.

Ich finde es schwer zu programmieren, da ich neu in VHDL bin und viele Fehler bekomme. Wenn mir jemand helfen könnte, würde ich es sehr schätzen.

Das habe ich bisher gemacht:

*entity contador is
    Port ( A : in  STD_LOGIC_VECTOR(3 downto 0);
           CLK : in  STD_LOGIC;
           LOAD_L : in  STD_LOGIC;
           UD : in  STD_LOGIC;
           ENP_L : in  STD_LOGIC;
              Q : out  STD_LOGIC (3 downto 0);
           RCO_L : out  STD_LOGIC);
end contador;
architecture Behavioral_contador of contador is
signal contador : STD_LOGIC_VECTOR(3 downto 0);
begin
process (CLK,UD,LOAD_L,ENP_L)
    begin
    if (CLK'event AND LOAD_L='0') then
        Q <= A;
    elsif (CLK'event AND LOAD_L='1') then
        if (UD='0') then
            contador <= contador + 1;
        elsif (UD='1') then
            contador <= contador - 1;
        end if;
        if (contador="0000" and ENP_L='0') then
            RCO_L='0';
            if (UD='0') then
                contador="0001";
            elsif (UD='1') then
                contador="1111";
            end if;
        else
        RCO='1';
        end if;
    end if;
end process;
Q <= contador;
end Behavioral_contador;*

PD, wenn es hilft, ist die Fehler Konsole Ergebnisse:

*ERROR:HDLCompiler:535 - "/home/edig/Escritorio/vhdl/contador.vhd" Line 40: Index constraint prefix std_logic should be an array type
ERROR:HDLCompiler:854 - "/home/edig/Escritorio/vhdl/contador.vhd" Line 34: Unit  ignored due to previous errors.
ERROR:HDLCompiler:374 - "/home/edig/Escritorio/vhdl/contador.vhd" Line 44: Entity  is not yet compiled.
ERROR:HDLCompiler:69 - "/home/edig/Escritorio/vhdl/contador.vhd" Line 46:  is not declared.
ERROR:HDLCompiler:69 - "/home/edig/Escritorio/vhdl/contador.vhd" Line 53:  is not declared.
ERROR:HDLCompiler:69 - "/home/edig/Escritorio/vhdl/contador.vhd" Line 56:  is not declared.
ERROR:HDLCompiler:69 - "/home/edig/Escritorio/vhdl/contador.vhd" Line 58:  is not declared.
ERROR:HDLCompiler:69 - "/home/edig/Escritorio/vhdl/contador.vhd" Line 57:  is not declared.
ERROR:HDLCompiler:69 - "/home/edig/Escritorio/vhdl/contador.vhd" Line 55:  is not declared.
ERROR:HDLCompiler:806 - "/home/edig/Escritorio/vhdl/contador.vhd" Line 61: Syntax error near "=".
ERROR:HDLCompiler:806 - "/home/edig/Escritorio/vhdl/contador.vhd" Line 63: Syntax error near "=".
ERROR:HDLCompiler:837 - "/home/edig/Escritorio/vhdl/contador.vhd" Line 63: Type  void does not match with a string literal
ERROR:HDLCompiler:806 - "/home/edig/Escritorio/vhdl/contador.vhd" Line 65: Syntax error near "=".
ERROR:HDLCompiler:837 - "/home/edig/Escritorio/vhdl/contador.vhd" Line 65: Type  void does not match with a string literal
ERROR:HDLCompiler:69 - "/home/edig/Escritorio/vhdl/contador.vhd" Line 64:  is not declared.
ERROR:HDLCompiler:69 - "/home/edig/Escritorio/vhdl/contador.vhd" Line 62:  is not declared.
ERROR:HDLCompiler:806 - "/home/edig/Escritorio/vhdl/contador.vhd" Line 68: Syntax error near "=".
ERROR:HDLCompiler:69 - "/home/edig/Escritorio/vhdl/contador.vhd" Line 60:  is not declared.
ERROR:HDLCompiler:69 - "/home/edig/Escritorio/vhdl/contador.vhd" Line 54:  is not declared.*
0

2 Antworten

Zuerst sollte Ihre Zählvariable vom Typ unsigned nicht std_logic_vector sein. Wenn ein Vektor eine Zahl darstellen soll, wählen Sie den richtigen Typ .

Zweitens, haben Sie nur eine einzelne clk'event -Zeile. In der Tat ist das Idiom in diesen Tagen, stattdessen die Funktion rising_edge (clk) zu verwenden. Sie brauchen nicht alle diese Signale in Ihrer Empfindlichkeitsliste, nur die Uhr.

Dann haben Sie alle Ihre Steuerlogik innerhalb der wenn rising_edge (clk) dann .

Sobald Sie alle Syntaxfehler behoben haben (verwenden Sie den Compiler oder einen Editor wie Sigasi ), bauen Sie eine Testbench Das stellt die Takt- und andere Eingangssignale her, so dass Sie sehen können, ob es funktioniert.Für zusätzliche Leistung stellen Sie sicher, dass die Ausgänge genau das tun, was Sie wollen, anstatt selbst auf die Signale zu starren - das wird sehr schnell langweilig!

Auch Ratschläge für die Zukunft - wenn Sie Fragen hier stellen, bitte Postleitzahl, die ist

  • eingerückt (wieder, verwenden Sie Sigasi, es ist frei für kleinen Code und macht einfach den Job)
  • frei von Syntaxfehlern.

Sloppily gestellte Fragen werden kaum Antworten liefern, sorry!

0
hinzugefügt

Most of them are syntax errors. For example Q should be std_logic_vector. Also when you need to write something at output, you mention like this: output <= input instead of RCO_L='0'; . Signal contador is of std_logic_vector and you can not increment/decrement 1 in std_logic_vector in this way. First you have to convert them to unsigned values, just mentioned here

0
hinzugefügt
Für weitere Informationen überprüfen Sie Xilinx XST Handbuch.
hinzugefügt der Autor Digeek, Quelle