Hallo, ich versuche mit folgendem Codeausschnitt einen Dezimal zu 7 Segment Decoder zu bauen. Es kommt jedoch folgende Fehlermeldung: Error (10621): VHDL Use Clause error at SegmentDecoder.vhd(16): more than one Use Clause imports a declaration of simple name "unsigned" -- none of the declarations are directly visible ################################################## LIBRARY ieee; USE ieee.std_logic_1164.all; USE IEEE.std_logic_arith.all; use IEEE.numeric_std.all; ENTITY SegmentDecoder IS PORT ( bit : in std_logic_vector(4 downto 0); seg1,seg2 : out std_logic_vector(6 downto 0)); END SegmentDecoder; ARCHITECTURE Behavior OF SegmentDecoder IS SIGNAL geteilt : unsigned(3 downto 0); SIGNAL modrest : unsigned(3 downto 0); COMPONENT Decoder PORT ( binaer:IN STD_LOGIC_VECTOR(3 downto 0); segmente: OUT STD_LOGIC_VECTOR(6 downto 0)); --ausgangsports END COMPONENT; BEGIN dec1 : Decoder PORT MAP (geteilt,seg1); dec2 : Decoder PORT MAP (modrest,seg2); PROCESS (bit) BEGIN geteilt <= bit mod 10 ; modrest <= bit / 10 ; END PROCESS; END Behavior; ##################################################
Ich glaube Du darfst die beiden: USE IEEE.std_logic_arith.all; use IEEE.numeric_std.all; nicht gleichzeitig benutzen, weil der Typ unsigned in beiden deklariert ist.
Vielen Dank für den Tipp... das hat soweit funktioniert... jetzt kommt folgender Fehler: Error (10327): VHDL error at SegmentDecoder.vhd(33): can't determine definition of operator ""mod"" -- found 0 possible definitions
Mit std_logic_vector kann man nicht rechnen, verwende unsigned oder signed (siehe Rechnen in VHDL).
@ Andreas Hutstein (hutstein) >Error (10327): VHDL error at SegmentDecoder.vhd(33): can't determine >definition of operator ""mod"" -- found 0 possible definitions Den MOD Operator kannst du dir abschminken, der ist nicht synthetisierbar. MFG Falk
Macht es denn eigentlich überhaupt Sinn, da wo bitvektoren als Zahlen interpretiert werden noch etwas anderes als signed und unsigned zu verwenden? Wenn ich das nur zum Rechnen mache muss ich ja ständig konvertieren.
wie komme ich dann von einer 5bit binär codierten Zahl zu zwei 7bit Ergebnissen für zwei 7 Segment Anzeigen?
Sind lookup-Tables eine Option? Bei der Größe sollte das noch nicht allzu weh tun.
eigentlich wollte ich vermeiden das ganze statisch zu machen... auch wenn hier die zahlenwerte nur von 0-31 gehen... das ganze sollte evtl. auch größere Zahlen darstellen können
FPGA/VHDL sind leider noch nicht meine Domäne. Wenn es bei Zahlen zw. 0 und 99 bleibt, wäre mein Ansatz einen Dividierer mit einem festem Divisor von 10 zu erstellen. Der sollte sich extrem optimieren lassen. Denke aber, hier kennt jemand eine fertige Lösung zu.
Hab da noch was für ein Spartan 3e Starter Kit. Passt vielleicht nicht genau zu Deiner Frage, aber so als Ansatz...
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
..einfach ein case, so wie Philip das schon postet! was willste da groß rumrechnen? dividieren ist doch immer scheiße, erzeugt einfach zu viel logic. das ist meine meinung! : D
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.