STD_LOGIC_VEKTOR Zuweisungen

Gast #4158782
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;
Moderator (Firma: Titel) Persönliche Seite #4158897
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...
Gast #4159736
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren