Steini schrieb:
> Irgendwie mixt er beide Eingangssignale ineinander.
Wie merkst du das?
Was sagt die Simulation?
Ein paar Worte zu deinem Code:
1 | If (Switch_Enable (2 downto 2) = "1") then
|
Das könntest du besser so schreiben:
1 | If (Switch_Enable (2) = '1') then
|
Warum kommt hier ein elsif?
1 | If (Switch_Enable (2 downto 2) = "1") then
|
2 | BUS_OUT <= BUS_IN_Change;
|
3 | ElsIf (Switch_Enable (2 downto 2) = "0") then
|
4 | BUS_OUT <= BUS_IN_Quelle;
|
5 | End If;
|
Switch_Enable(2) kann doch sowieso nur 0 oder 1 sein...
Und dann: warum macht du den Multiplexer getaktet?
Der braucht keinen Takt. Der bringt dir sowieso nur 1 Takt Latency (ich
vermute, daher kommt das "Vermischen"). Lass den raus...
Damit wären wir hier:
1 | Process (BUS_IN_Change,BUS_IN_Quelle,Switch_Enable)
|
2 | Begin
|
3 | If (Switch_Enable(2) = '1') then
|
4 | BUS_OUT <= BUS_IN_Change;
|
5 | Else
|
6 | BUS_OUT <= BUS_IN_Quelle;
|
7 | End If;
|
8 | END Process;
|
Und dann ginge das auch noch concurrent ohne Prozess und Sensitivliste.
Ich würde das also so machen:
1 | BUS_OUT <= BUS_IN_Change when Switch_Enable(2) = '1' else BUS_IN_Quelle;
|
Und damit wird der Mux so aussehen:
1 | library IEEE;
|
2 | use IEEE.STD_LOGIC_1164.ALL;
|
3 | use IEEE.STD_LOGIC_ARITH.ALL;
|
4 | use IEEE.STD_LOGIC_UNSIGNED.ALL;
|
5 |
|
6 |
|
7 | ENTITY BUS_Switch is
|
8 | Port ( BUS_IN_Quelle : in std_logic_vector (7 downto 0); --Videodaten direkt von der Bildquelle
|
9 | BUS_IN_Change : in std_logic_vector (7 downto 0); --Videodaten gewandelt
|
10 | Switch_Enable : in std_logic_vector (7 downto 0);
|
11 |
|
12 | BUS_OUT : out std_logic_vector (7 downto 0)
|
13 | );
|
14 | End BUS_Switch;
|
15 |
|
16 | ARCHITECTURE Behavioral of BUS_Switch is
|
17 | BEGIN
|
18 | BUS_OUT <= BUS_IN_Change when Switch_Enable(2) = '1' else BUS_IN_Quelle;
|
19 | END Behavioral;
|
Und spätestens jetzt würde ich dem Mux das Recht auf eine eigene Entity
absprechen, und den direkt dahin platzieren, wo er hingehört... ;-)