Forum: FPGA, VHDL & Co. 74LS573 und 74LS245 im CPLD nachbilden


von nummernschalter (Gast)


Lesenswert?

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?

von Falk B. (falk)


Lesenswert?

@  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

von nummernschalter (Gast)


Lesenswert?

>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.

von Falk B. (falk)


Lesenswert?

@  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

von nummernschalter (Gast)


Lesenswert?

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?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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.

von Duke Scarring (Gast)


Lesenswert?

@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

von nummernschalter (Gast)


Lesenswert?

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?

von Falk B. (falk)


Lesenswert?

@  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

von nummernschalter (Gast)


Angehängte Dateien:

Lesenswert?

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?

von Christian R. (supachris)


Lesenswert?

Du kannst natürlich nicht 2 Ausgänge aufeinander klemmen. Da muss noch 
ein Gatter rein.

von Falk B. (falk)


Lesenswert?

Das Zauberwort heisst Multiplexer.

MfG
Falk

von nummernschalter (Gast)


Angehängte Dateien:

Lesenswert?

Genau! Manchmal sieht man das Offensichtlichste nicht ...

von Roger S. (edge)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

Da fehlt jemandem der Grundkurs Kombinatorik und Boolsche Algebra.

von nummernschalter (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.