mikrocontroller.net

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


Autor: nummernschalter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: nummernschalter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: nummernschalter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.
----------------------------------------------------------------------------------
-- Create Date:    09:47:43 08/02/2009 
-- Module Name:    74LS573 - Behavioral 
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity CPLD_74LS573 is
    Port ( nOE : in  STD_LOGIC;
           LE  : in  STD_LOGIC;
           D   : in  STD_LOGIC_VECTOR (7 downto 0);
           Q   : out  STD_LOGIC_VECTOR (7 downto 0));
end CPLD_74LS573;

architecture Behavioral of CPLD_74LS573 is
signal latch : std_logic_vector(7 downto 0);
begin

    -- Solange LE High werden die Daten durchgereicht
    -- bei Low wird der alte Zustand beibehalten
    latch <= D when LE = '1' else latch;
    
    -- Wenn nOE = LOW erscheint latch Data am Ausgang
    -- Sonst High-Z
    Q <= latch when nOE = '0' else (7 downto 0 => 'Z');

end Behavioral;
Und nochmal der 74LS245
----------------------------------------------------------------------------------
-- Create Date:    09:59:36 08/02/2009 
-- Module Name:    74LS245 - Behavioral 
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity CPLD_74LS245 is
    Port ( nE  : in  STD_LOGIC;
           dir : in  STD_LOGIC;
           B   : inout  STD_LOGIC_VECTOR (7 downto 0);
           A   : inout  STD_LOGIC_VECTOR (7 downto 0));
end CPLD_74LS245;

architecture Behavioral of CPLD_74LS245 is
begin

    -- Wenn nE = 1 oder dir = '1' dann HighZ
    -- Sonst B
    A <= (7 downto 0 => 'Z') when nE = '1' OR dir = '1' else B;
    
    -- Wenn nE = 1 oder dir = '1' dann HighZ
    -- Sonst A
    B <= (7 downto 0 => 'Z') when nE = '1' OR dir = '0' else A;

end Behavioral;

Jezt müßtest du nurnoch deine Logik dazufügen oder das entsprechend 
verdrahten. Benötigt mind 24 Makrozellen.

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Läubi:

Den Quatsch kannst Du rausschmeissen:
--use IEEE.STD_LOGIC_ARITH.ALL;
--use IEEE.STD_LOGIC_UNSIGNED.ALL;


Wenn benötigt, lieber
use IEEE.NUMERIC_STD.ALL;
verwenden.

Duke

Autor: nummernschalter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: nummernschalter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Christian R. (supachris)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Zauberwort heisst Multiplexer.

MfG
Falk

Autor: nummernschalter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Genau! Manchmal sieht man das Offensichtlichste nicht ...

Autor: Roger Steiner (edge)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da fehlt jemandem der Grundkurs Kombinatorik und Boolsche Algebra.

Autor: nummernschalter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hat aber jemand genau hingeguckt ;-)

Problem ist jedenfalls erledigt. Danke nochmal.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.