FPGA, VHDL & Co.
›
Thread
STD_LOGIC_VEKTOR Zuweisungen
H
Hans
Gast
09.06.2015 12:02
#4158782
Hallo VHDLer,
kann man einem STD_LOGIC_VECTOR (hier LED ) einzelnde STD_LOGIC (hier
(SEG_a-f) zuweisen?
Hätte an einen Type gedacht aber funktioniert so nicht. Ich möchte dem
Vector sagen das jedes Bit mit einem STD_LOGIC verknüpft ist.
Danke 1 entity Hex2Segment is
2 Port ( DataIn : in STD_LOGIC_VECTOR ( 3 downto 0 );
3 SEG_a : out STD_LOGIC ;
4 SEG_b : out STD_LOGIC ;
5 SEG_c : out STD_LOGIC ;
6 SEG_d : out STD_LOGIC ;
7 SEG_e : out STD_LOGIC ;
8 SEG_f : out STD_LOGIC ;
9 SEG_g : out STD_LOGIC );
10 end Hex2Segment ;
11
12 architecture Behavioral of Hex2Segment is
13 TYPE LEDType IS ( SEG_g , SEG_f , SEG_e , , SEG_d , SEG_c , SEG_b , SEG_a );
14 SIGNAL LED : LEDType ;
15 begin
16
17 --HEX-to-seven-segment decoder
18 -- HEX: in STD_LOGIC_VECTOR (3 downto 0);
19 -- LED: out STD_LOGIC_VECTOR (6 downto 0);
20 --
21 -- segment encoinputg
22 -- 0
23 -- ---
24 -- 5 | | 1
25 -- --- <- 6
26 -- 4 | | 2
27 -- ---
28 -- 3
29
30 with DataIn SELect
31 LED <= "1111001" when "0001" , --1
32 "0100100" when "0010" , --2
33 "0110000" when "0011" , --3
34 "0011001" when "0100" , --4
35 "0010010" when "0101" , --5
36 "0000010" when "0110" , --6
37 "1111000" when "0111" , --7
38 "0000000" when "1000" , --8
39 "0010000" when "1001" , --9
40 "0001000" when "1010" , --A
41 "0000011" when "1011" , --b
42 "1000110" when "1100" , --C
43 "0100001" when "1101" , --d
44 "0000110" when "1110" , --E
45 "0001110" when "1111" , --F
46 "1000000" when others ; --0
47
48 end Behavioral ;
V
Vhdl
Gast
09.06.2015 12:10
#4158791
Klar, die Typen können einfach hintereinander gebaut werden:
LED <= SEG_a & SEG_b ....
Led muss dafür aber ein std_vector sein.
H
Hans
Gast
09.06.2015 12:12
#4158793
Danke für die schnelle Antwort aber aber SEG_a-f sollen Elemente in LED
sein.
Danke auch den netten Moderator für die Formatierung
H
Hans
Gast
09.06.2015 12:12
#4158795
Ich möchte LED nicht die SEG_a-f zuweisen
LM
Lothar M.
(lkmiller)
Moderator
(Firma: Titel)
Persönliche Seite
09.06.2015 13:18
#4158897
Hans schrieb:
> Danke auch den netten Moderator für die Formatierung
Keine Ursache. Du kannst das aber auch selber:1 [vhdl]
2 -- VHDL Code
3 [/vhdl]
Und ich würde statt der Einzelsegmente einfach den kompletten Vektor in
den Port nehmen: 1 Port ( DataIn : in STD_LOGIC_VECTOR ( 3 downto 0 );
2 LED : out STD_LOGIC_VECTOR ( 7 downto 0 );
3 );
Dann funktioniert die Zuweisung nämlich ganz einfach: genau so wie sie
dasteht...
E
Erwin
Gast
10.06.2015 01:14
#4159736
Ich würde wegen dem bisschen Code nicht lange rumtun. Man kann auch an
Schönheit sterben...
Wie der Vorredner schon sagte entweder nen SLV raus geben oder einfach
die 8 Zuweisungen hinschrieben.
1 -- Led mus slv sein
2 SIGNAL LED : STD_LOGIC_VECTOR ( 7 downto 0 );
3
4
5 -- Zuweisungen dann einfach auflisten
6 SEG_a <= LED ( 0 );
7 SEG_b <= LED ( 1 );
Damits sauber wird eventuell die Ausgaben mittels CONSTANT definieren.
Weiterhin würde die Übersichtlichkeit erhöht, wenn du in der
with-select-Anweisung die Hexadezimal-Schreibweise nutzen würdest.
1 with DataIn SELect
2 LED <= "1111001" when X"1" , --1
3 ...
4 "0001110" when X"F" , --F
5 "1000000" when others ; --0
H
Hans
Gast
11.06.2015 10:24
#4161264
Danke für eure Hinweise habe eine elegante Lösung gefunden
1 SIGNAL LED : STD_LOGIC_VECTOR ( 7 downto 0 );
2
3 ( SEG_g , SEG_f , ... ) <= LED ;
↑ Nach oben
← Zurück zu FPGA, VHDL & Co.
Antwort schreiben