Was VHDL-Bibliotheken zu verwenden, für decimal-Modul
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--use IEEE.STD_LOGIC_ARITH.ALL;
--use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.NUMERIC_STD.ALL;
entity two_number_split is
Port ( number : in integer range 0 to 99;
position0 : out STD_LOGIC_VECTOR (3 downto 0);
position1 : out STD_LOGIC_VECTOR (3 downto 0));
end two_number_split;
architecture Behavioral of two_number_split is
signal pos0, pos1 : STD_LOGIC_VECTOR(3 downto 0);
begin
convert: process(number, pos0, pos1)
begin
pos1 <= number/10;
pos0 <= number mod 10;
position0 <= std_logic_vector(pos0);
position1 <= std_logic_vector(pos1);
end process convert;
end Behavioral;
Fehler:
ERROR:HDLCompiler:1638 - "C:\Users\XXX\Documents\SS\ISE_Ex\seven_segment\two_numbers.vhd" Line 19: found '0' definitions of operator "/", cannot determine exact overloaded matching definition for "/"
ERROR:HDLCompiler:1638 - "C:\Users\XXX\Documents\SS\ISE_Ex\seven_segment\two_numbers.vhd" Line 20: found '0' definitions of operator "mod", cannot determine exact overloaded matching definition for "mod"
Ich glaube, ich bin einfach mit den falschen Bibliotheken. Irgendwelche Vorschläge?Ich habe versucht, alle Kombinationen von den Bibliotheken, die oben aufgeführt sind und nicht wissen, was Los ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie ändern Sie die Erklärungen des
pos0
undpos1
ein integer-Typ, zu berechnen und dann konvertieren Sie Sie in eine BCD-Darstellung.Es nutzt
to_unsigned
konvertieren Sie die dezimale Werte pos1 und pos0 zuunsigned
array-Typen. Die zurückgegebenenunsigned
array-Länge wird angegeben, indem das zweite argument, das könnte einfach ein literal.Könnten Sie
unsigned
als Typ fürposition0
undposition1
und speichern Sie eine Typ-Konvertierungen für jede Zuordnung.Die Idee hier ist eine dreifache: Lesbarkeit, über operator-Funktionen mit kompatiblen linke und Rechte Argumente als auch als Rückgabewert, und die Verwendung von
integer
Multiplikation Operatoren schneller alsunsigned
Betreiber. Unsigned-operation ist impliziert durch das Natürliche Verbreitungsgebiet dernumber
.Und dieses Beispiel funktioniert:
Ist aber nicht besonders Synthese berechtigt - mit zwei multiplizieren Betreiber. Sollten Sie brauchen, zu synthetisieren etwas finden Konvertieren von 8bit-Binärzahl in BCD erfolgt in VHDL für inspiration auf wie zu vermeiden, die sieben-bit-Multiplikation von Operatoren.
mod
unterstützt, die für die Konstante Leistung von 2/
"Unterstützt, wenn der Rechte operand ist eine Konstante Leistung von 2, oder wenn beide Operanden sind Konstante".number
ist nicht konstant, weder Fall wahr ist, ich bin angenehm überrascht - aber es passt in eine Tabelle, also klein genug, um espresso. Es kann 6-LUTs für die add3-mit BEHÄLTER(7) eine Konstante '0' (7-bit-Eingang), und ist shift und bedingte add (Rasterwert). add3-U0 in den block Diagramm nicht benötigen, input darf nicht höher sein als 4.std_logic_vector
ist traditionell kein numerischer Typ. Es ist eine Sammlung von bits und die numerischen Operatoren wurden bewusst ausgelassen, um zu bestätigen, dass die interpretation. Sollten Sie dieunsigned
odersigned
Arten vonnumeric_std
um arrays mit einer Reihe von arithmetischen Operatoren.Optional, wenn Sie Ihre Werkzeuge mit Unterstützung von VHDL-2008, die Sie verwenden können
ieee.numeric_std_unsigned
hinzufügen arithmetische Semantik zustd_logic_vector
. Es ist ähnlich wiestd_logic_unsigned
die trotz Ihres namens-und library-mapping ist nicht ein standard-Bibliothek.