BUS Muxer spinnt

Gast #2180274
Lesenswert?

Hallo

Ich habe einen BUS Muxer "gebaut" aber er schaltet nicht richtig. 
Irgendwie mixt er beide Eingangssignale ineinander. Er soll aber immer 
nur einen Eingang zum Ausgang durchschalten.
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 ( CLK   : in std_logic;   
9
      BUS_IN_Quelle : in std_logic_vector (7 downto 0);  --Videodaten direkt von der Bildquelle
10
      BUS_IN_Change  : in std_logic_vector (7 downto 0);    --Videodaten gewandelt
11
      Switch_Enable  : in std_logic_vector (7 downto 0);
12
      
13
      BUS_OUT   : out std_logic_vector (7 downto 0)  
14
       );
15
End BUS_Switch;
16

17
ARCHITECTURE Behavioral of BUS_Switch is
18

19
BEGIN
20
 Process (CLK,Switch_Enable)
21
  Begin
22
                  
23
   If (CLK'Event and CLK = '1') Then
24

25
   If (Switch_Enable (2 downto 2) = "1") then
26
       BUS_OUT <= BUS_IN_Change;
27
   ElsIf (Switch_Enable (2 downto 2) = "0") then
28
       BUS_OUT <= BUS_IN_Quelle;
29
   End If;
30
   
31
   End If;
32
      
33
 END Process;
34

35
END Behavioral;

Ich weiß nicht wo der Fehler liegt.
Moderator (Firma: Titel) Persönliche Seite #2180293
Lesenswert?

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... ;-)
Moderator (Firma: Titel) Persönliche Seite #2180308
Lesenswert?

Steini schrieb:
> das Bild welches der Monitor zeigt ist verzerrt.
Autsch, da kann dieser VHDL-Code nichts dafür...
Hast du Constraints gesetzt?
Ist dein Design schnell genug?
Wie sehen deine Signale aus (Oszi)?

> das Bild welches der Monitor zeigt ist verzerrt.
Aber die Simulation funktioniert?

> Ich probiere mal deine Variante
Das wird in dem Fall nichts nützen...  :-/
Gast #2180338
Lesenswert?

...doch hats...ich habe den CLK entfernt und "HURRA" es ging.

bei genauerem Betrachten der ModelSim fielt mit jetzt auch auf, das der 
Muxer um einen Takt versetzt reagiert und vorallem das der Takt mir 
nicht erklärbare Umschaltungen im Muxer erzeugte.
Gast #2180485
Lesenswert?

...hab ich in anderen Modulen auch...und ich dachte auch das es ja egal 
ist ob der Muxer einen Takt versetzt schaltet..sieht man das Bild halt 
später / verzögert umgeschaltet...aber es kam eben nur Murx raus...

Ohne Takt gehts auf jeden Fall..Danke Lothar

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