Forum: FPGA, VHDL & Co. STD_LOGIC_VEKTOR Zuweisungen


von Hans (Gast)


Lesenswert?

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;

: Bearbeitet durch Moderator
von Vhdl (Gast)


Lesenswert?

Klar, die Typen können einfach hintereinander gebaut werden:

LED <= SEG_a & SEG_b ....

Led muss dafür aber ein std_vector sein.

von Hans (Gast)


Lesenswert?

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

von Hans (Gast)


Lesenswert?

Ich möchte LED nicht die SEG_a-f zuweisen

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Erwin (Gast)


Lesenswert?

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

von Hans (Gast)


Lesenswert?

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;

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.