Forum: FPGA, VHDL & Co. Aufteilung eines ergebnisse auf 8 und 2 LED


von peter (Gast)


Lesenswert?

Hallo, guten Tag.
Verständnisproblem um 10 Bit auf 8 LED und 2 LED aufteilen.
Ich habe hier ein Beispiel wo ich aus einem Array mit vorgegebenen 
Werten in ein anderes Array kopiere und dann 2 Werte addiere.

Nun sind die 2 Werte addiert aber auf 10 Bit.
Wie teile ich jetzt die 10 Bit einmal auf 8 Bit led_g und 2 Bit auf 
led_r ?

Danke.
GRuss
1
library IEEE; 
2
use IEEE.STD_LOGIC_1164.ALL; 
3
use IEEE.NUMERIC_STD.ALL; 
4
5
entity ram_array is
6
  port(
7
    clk    : in  std_logic;
8
    enable : in  std_logic_vector(0 downto 0);
9
    sw     : in  std_logic_vector(0 downto 0);
10
    
11
    led_g  : out std_logic_vector(7 downto 0);
12
    led_r  : out std_logic_vector(1 downto 0)
13
    );
14
end ram_array;
15
16
architecture Behavioral of ram_array is
17
18
Type rom_vec is ARRAY (0 to 127) OF std_logic_vector(7 downto 0);
19
signal speicher_vec : rom_vec;
20
21
Type ram_vec is ARRAY (0 to 127) OF std_logic_vector(7 downto 0);
22
signal speicher_vec_1 : ram_vec;
23
24
signal RomAddr: integer range 0 to 128 := 0; 
25
signal RamAddr: integer range 0 to 128 := 0; 
26
27
signal wert: unsigned(7 downto 0);
28
signal wert1: unsigned(7 downto 0);
29
signal erg: unsigned(9 downto 0);
30
31
begin
32
33
speicher_vec(0 to 127) <= (
34
    x"fe",  x"78",  x"03",  x"04",  x"05",  x"06",  x"07",  x"08",
35
    x"f3",  x"73",  x"ff",  x"ff",  x"ff",  x"29",  x"2c",  x"2f",
36
    x"32",  x"36",  x"39",  x"3c",  x"3e",  x"40",  x"43",  x"46",
37
    x"48",  x"4b",  x"4d",  x"50",  x"52",  x"54",  x"57",  x"59",
38
    x"5b",  x"5d",  x"5f",  x"62",  x"64",  x"65",  x"67",  x"69",
39
    x"6b",  x"6d",  x"6e",  x"70",  x"71",  x"73",  x"74",  x"75",
40
    x"76",  x"77",  x"79",  x"79",  x"7a",  x"7b",  x"7c",  x"7d",
41
    x"7d",  x"7e",  x"7e",  x"7f",  x"7f",  x"7f",  x"7f",  x"7f",
42
    x"01",  x"02",  x"04",  x"08",  x"0e",  x"11",  x"14",  x"17",
43
    x"1a",  x"1d",  x"20",  x"23",  x"26",  x"29",  x"2c",  x"2f",
44
    x"32",  x"36",  x"39",  x"3c",  x"3e",  x"40",  x"43",  x"46",
45
    x"48",  x"4b",  x"4d",  x"50",  x"52",  x"54",  x"57",  x"59",
46
    x"5b",  x"5d",  x"5f",  x"62",  x"64",  x"65",  x"67",  x"69",
47
    x"6b",  x"6d",  x"6e",  x"70",  x"71",  x"73",  x"74",  x"75",
48
    x"76",  x"77",  x"79",  x"79",  x"7a",  x"7b",  x"7c",  x"7d",
49
    x"7d",  x"7e",  x"7e",  x"7f",  x"7f",  x"7f",  x"7f",  x"7f");
50
        
51
process(clk)
52
begin
53
if rising_edge(clk) then
54
  if RomAddr < 128 and  enable(0) = '1' then    
55
     RomAddr <= RomAddr + 1;    
56
     speicher_vec_1(RomAddr) <= Speicher_vec(RomAddr); 
57
  end if;  
58
end if;  
59
end process;  
60
  
61
process(clk)
62
begin
63
  if rising_edge(clk) and  sw(0) = '1' then
64
    wert <= unsigned(Speicher_vec_1(RamAddr+8)); 
65
    wert1 <= unsigned(Speicher_vec_1(RamAddr+9)); 
66
    erg <=unsigned(unsigned("00" & wert) + unsigned("00" & wert1));
67
  end if;
68
end process;
69
70
end Behavioral;

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


Lesenswert?

peter schrieb:
> Wie teile ich jetzt die 10 Bit einmal auf 8 Bit led_g und 2 Bit auf
> led_r ?
Teile gerecht! So kann sich keine der LEDs benachteiligt vorkommen...

Im Ernst: die Pinzuordung wird doch ganz woanders gemacht. Da kannst 
du den Vektor in die Port-Liste packen und jedes einzelne Bit aus dem 
Vektor an jede beliebige LED zuweisen...

Wenn du das nicht willst, dann kannst du es auch so machen:
1
 led_g <= erg (9 downto 2);
2
 led_r <= erg (1 downto 0);
Das steht ganz weit vorne in deinem VHDL Buch...

: Bearbeitet durch Moderator
von peter (Gast)


Lesenswert?

Hmmm...vielen dank.

In der Portliste habe ich nur in und out.

Ich wollte das mal mit einer anderen Zuweisung machen.
Mir ging es jetzt nicht um die Kürze der Ausführung sondern um das 
Verhalten von Array die gefüllt sind und das Übertragen in einem leeren 
Array und da wieder auslesen um zu addieren.

Ich lese immer wieder das in die Porliste nur welche mit in und out 
reinkommen.


Danke.
Gruss

von peter (Gast)


Lesenswert?

Funktioniert wunderbar.
Es wird ein RAM-Block angelegt und ein ROM im RTL-Viewer.

Gruss

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.