Ich habe einige Probleme mit der conv_std_logic_vector
Funktion in Quartus. Ich verwende die Funktion, um eine Integer-Variable in eine std_logic_vector
zu konvertieren. Wenn i den Code zu kompilieren, Quartus zeigt die folgende Fehlermeldung:VHDL: conv_std_logic_vector Parameter Fehler
Error (10344): Fehler VHDL-Expression bei counter_Wbits.vhd (32): expression hat 3 Elemente, sondern muss 4 Elemente hat.
Ich habe diese Funktion im Internet gesucht und die Leute benutzen immer 2 Parameter, was passiert?
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;
use IEEE.std_logic_arith.ALL;
ENTITY counter_Wbits IS
GENERIC(W : NATURAL := 4);
PORT (portae : IN BIT;-- data input
portas : IN BIT;-- data input
clk : IN BIT; -- clock
clrn: IN BIT; -- clear
ena : IN BIT; -- enable
q : BUFFER STD_LOGIC_VECTOR(W-1 DOWNTO 0));-- data output
END counter_Wbits;
ARCHITECTURE arch_1 OF counter_Wbits IS
BEGIN
PROCESS(clk,clrn)
variable cont : integer range 0 to 15;
BEGIN
IF (clrn='0') THEN
q <= (OTHERS => '0');
ELSIF (clk'EVENT AND clk='1') THEN
IF (ena='1') THEN
IF(portae='1') THEN
cont := cont+1;
ELSIF (portas='1') THEN
cont := cont-1;
END IF;
END IF;
END IF;
q <= conv_std_logic_vector(cont, W-1); -- LINE 32
END PROCESS;
END arch_1;
W = 4 also W-1 = 3. Sie können nicht passen (Bereich 0 bis 15) in 3 Bits, was genau die Fehlermeldung an erster Stelle ist. (Beachten Sie auch, wenn Sie diese Entity mit einem anderen Wert des Generics instanziieren, wird es gebrochen. Fix das auch) –
Danke Mann, ich dachte, das war ein Parameterfehler! Es funktioniert jetzt! –
Ich bin ständig überrascht von der Anzahl der Beispiele auf SO, die 'std_logic_arith' verwenden. 'Die numeric_std'-Bibliothek ist seit mehr als einem Jahrzehnt verfügbar, und unser interner Kodierungsstandard hat es seit 2002 benötigt. Jeder Synthesizer, der mir seit 2002 einfällt, hat ihn unterstützt. Wer unterrichtet dieses Zeug? – PlayDough