Ich möchte in einem Xilinx CPLD sowas wie einen internen Bus nachbilden. Mir schweben da Standardbauteile, wie 74LS573 und 74LS245 vor. Welche Elemente kann ich dafür in meinen Schaltplan benutzen? Entweder ich bin blind oder in der Biblio "Latch" gibt es keine "tristate" (in den CPLD hinein) Funktionsblöcke. Geht das überhaupt?
@ nummernschalter (Gast) >blind oder in der Biblio "Latch" gibt es keine "tristate" (in den CPLD >hinein) Funktionsblöcke. Geht das überhaupt? Nein. Innerhalb eines CPLDs gibt es kein Tristate. Wozu auch? nimm einen klassischen MUX. MfG Falk
>wozu auch
um bestimmte Signale vom internen Bus abkoppeln zu können
Aber gut. Ein externer LS245 mach das Kraut auch nicht fett.
Trotzdem Danke.
@ nummernschalter (Gast) >um bestimmte Signale vom internen Bus abkoppeln zu können >Aber gut. Ein externer LS245 mach das Kraut auch nicht fett. ???? Na logisch kann man CPLD AUSGÄNGE auf Tristate schalten. aber nicht INTERNE Netze. MFG Falk
Gut. Noch eine Frage zur 74LS573-Nachbildung. Sie soll als Daten-/Adreßmultiplexer an einem 8051 eingesetzt werden. Ist "LD8" der richtige Funktionsblock für diese Aufgabe?
nummernschalter schrieb: > Ich möchte in einem Xilinx CPLD sowas wie einen internen Bus nachbilden. Was genau möchtest du den, IM CPLD einen Bus nachbilden (das geht nur mit einem MUX) oder soll der CPLD AN einen Bus später rangehängt werden und intern was machen? > Mir schweben da Standardbauteile, wie 74LS573 und 74LS245 vor. Als orientierun okay aber wenn dich nichts dazu zwingt solltest du dich von den Bauteilen lösen das macht nur dein Design unötig komplex > Welche Elemente kann ich dafür in meinen Schaltplan benutzen? > Ist "LD8" der richtige Funktionsblock für diese Aufgabe? Beschreibe doch alles in VHDL, dann mußt du dir darüber kaum/keine Gedanken machen. Hier mal zwei Beispiele wie es aussehen könnte.
1 | ----------------------------------------------------------------------------------
|
2 | -- Create Date: 09:47:43 08/02/2009
|
3 | -- Module Name: 74LS573 - Behavioral
|
4 | ----------------------------------------------------------------------------------
|
5 | library IEEE; |
6 | use IEEE.STD_LOGIC_1164.ALL; |
7 | use IEEE.STD_LOGIC_ARITH.ALL; |
8 | use IEEE.STD_LOGIC_UNSIGNED.ALL; |
9 | |
10 | entity CPLD_74LS573 is |
11 | Port ( nOE : in STD_LOGIC; |
12 | LE : in STD_LOGIC; |
13 | D : in STD_LOGIC_VECTOR (7 downto 0); |
14 | Q : out STD_LOGIC_VECTOR (7 downto 0)); |
15 | end CPLD_74LS573; |
16 | |
17 | architecture Behavioral of CPLD_74LS573 is |
18 | signal latch : std_logic_vector(7 downto 0); |
19 | begin
|
20 | |
21 | -- Solange LE High werden die Daten durchgereicht
|
22 | -- bei Low wird der alte Zustand beibehalten
|
23 | latch <= D when LE = '1' else latch; |
24 | |
25 | -- Wenn nOE = LOW erscheint latch Data am Ausgang
|
26 | -- Sonst High-Z
|
27 | Q <= latch when nOE = '0' else (7 downto 0 => 'Z'); |
28 | |
29 | end Behavioral; |
Und nochmal der 74LS245
1 | ----------------------------------------------------------------------------------
|
2 | -- Create Date: 09:59:36 08/02/2009
|
3 | -- Module Name: 74LS245 - Behavioral
|
4 | ----------------------------------------------------------------------------------
|
5 | library IEEE; |
6 | use IEEE.STD_LOGIC_1164.ALL; |
7 | use IEEE.STD_LOGIC_ARITH.ALL; |
8 | use IEEE.STD_LOGIC_UNSIGNED.ALL; |
9 | |
10 | entity CPLD_74LS245 is |
11 | Port ( nE : in STD_LOGIC; |
12 | dir : in STD_LOGIC; |
13 | B : inout STD_LOGIC_VECTOR (7 downto 0); |
14 | A : inout STD_LOGIC_VECTOR (7 downto 0)); |
15 | end CPLD_74LS245; |
16 | |
17 | architecture Behavioral of CPLD_74LS245 is |
18 | begin
|
19 | |
20 | -- Wenn nE = 1 oder dir = '1' dann HighZ
|
21 | -- Sonst B
|
22 | A <= (7 downto 0 => 'Z') when nE = '1' OR dir = '1' else B; |
23 | |
24 | -- Wenn nE = 1 oder dir = '1' dann HighZ
|
25 | -- Sonst A
|
26 | B <= (7 downto 0 => 'Z') when nE = '1' OR dir = '0' else A; |
27 | |
28 | end Behavioral; |
Jezt müßtest du nurnoch deine Logik dazufügen oder das entsprechend verdrahten. Benötigt mind 24 Makrozellen.
@Läubi: Den Quatsch kannst Du rausschmeissen:
1 | --use IEEE.STD_LOGIC_ARITH.ALL;
|
2 | --use IEEE.STD_LOGIC_UNSIGNED.ALL;
|
Wenn benötigt, lieber
1 | use IEEE.NUMERIC_STD.ALL; |
verwenden. Duke
Danke. Nachdem ich nun auch herausgefunden habe, wie man aus VHDL ein Symbol erzeugt, klappt alles wunderbar. Da mein CPLD noch Platz hat, würde ich gerne einen statischen Taktteiler mit einbauen. Allerdings soll er keine Ganzzahl, sondern durch 2,5 teilen. Hat sowas schon mal jemand gemacht?
@ nummernschalter (Gast) >Da mein CPLD noch Platz hat, würde ich gerne einen statischen Taktteiler >mit einbauen. Allerdings soll er keine Ganzzahl, sondern durch 2,5 >teilen. Hat sowas schon mal jemand gemacht? Sicher. Bau einen Zähler, welcher durch 5 teilt. Bit #1 wird mittels FlipFLop auf der anderen Taktflanke nochmals abgetastet. Dein durch 2,5 Takt entsteht durch ODER-Verknüpfung von Bit#1 und dem um 1/2 Takt verzögerten Bit. MFG Falk
Danke. Läuft soweit auch. Jetzt ist noch ein Problem aufgetaucht. Ich will der Schaltung den originalen und den geteilten Takt zuführen können. Hatte mir das wie auf dem Anhang vorgestellt. Der Einfachheit halber, habe ich den problematischen Teil noch mal neu gezeichnet. Die Schaltung befindet sich aber innerhalb des CPLD und hat keine direkte Verbindung nach außen. Wie kann ich das umgehen?
Du kannst natürlich nicht 2 Ausgänge aufeinander klemmen. Da muss noch ein Gatter rein.
Genau! Manchmal sieht man das Offensichtlichste nicht ...
nummernschalter schrieb:
> Genau! Manchmal sieht man das Offensichtlichste nicht ...
Richtig, das funktioniert naemlich auch nicht.
Entweder zu den zwei AND ein OR hintenran.
Oder zwei OR und dann ein AND.
Cheers, Roger
Da fehlt jemandem der Grundkurs Kombinatorik und Boolsche Algebra.
Da hat aber jemand genau hingeguckt ;-) Problem ist jedenfalls erledigt. Danke nochmal.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.