Zum Synthesezeitpunkt ist in der Zeile nach:
1 | function reverseVector (a: in std_logic_vector) return std_logic_vector is
|
noch nicht bekannt, welche Breite a beim Aufruf haben wird:
1 | variable result: std_logic_vector(a'reverse_range);
|
Woher hast du diese Funktion?
Dieser Prozess hier ist sinnlos:
1 | GENERATOR: process(reg_in)
|
2 | variable p : std_logic;
|
3 | begin
|
4 | reg_status <= (others => '1'); -- set busy --- !!! passiert gleichzeitig
|
5 |
|
6 | p := reg_in(0);
|
7 | for i in 1 to 7 loop
|
8 | p := p xor reg_in(i);
|
9 | end loop;
|
10 |
|
11 | if reg_conf = "11110000" then
|
12 | reg_out <= not p;
|
13 | else
|
14 | reg_out <= p;
|
15 | end if;
|
16 |
|
17 | reg_status <= (others => '0'); -- set ready --- !!! passiert gleichzeitig, aber die letzte Zuweisung gewinnt :-o
|
18 | end process GENERATOR;
|
Denn der Prozess wird nicht einfach von oben nach unten abgearbeitet
(wir sind ja nicht in C oder Assembler oder sonst einer
Programmiersprache), sondern die Operationen innerhalb des Prozesses
passieren GLEICHZEITIG. D.h. in einem Prozess gewinnt immer die letzte
Zuweisung an ein Signal. Und das ist die hier:
1 | reg_status <= (others => '0'); -- set ready
|
reg_status wird niemals etwas anderes sein als x"00" :-o
Du hast noch sehr grundlegende Probleme zum Verständnis der
Hardwarebeschreibung mit VHDL. Besorg dir das Buch VHDL-Synthese von
Reichardt&Schwarz und lies das mal durch...