mikrocontroller.net

Forum: FPGA, VHDL & Co. Tri-State Element für Spratan3(Xilinx)


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

Bewertung
0 lesenswert
nicht lesenswert
Hallo alle zusammen!

hab folgende Frage:

ich implementiere einen 8051-Softcore, beabsichtige diesen an 
CAN-Controller(SJA1000) anzuschließen, und nun taucht das Problem auf.
Die Ports meines Softcore-µC sind NICHT BIDIREKTIONAL ausgeführt
(s. Anhang),was bei einem normalen 8051 nicht der Fall ist(P0 ist
bidirektional, kann man direkt an den CAN-Controller anschließen).
Nun, damit ich Softcore und CAN-Controller verbinden kann,
brauche ich wohl einen Tri-State Element, damit ich die separaten
Ein- und Ausgänge zusammenführen kann. Ich weiß, daß Altera so ein
Tri-State Element innerhalb der Megafunctions Bibliothek zur Verfügung
stellt, ich selber arbeite aber mit einem Xilinx Spartan3 Board
und ISE-Software, und muß zugeben, hab bis jetzt leider nichts
vergleichbares bei Xilinx gefunden. Kann mir da jemand von den
Xilinx-Profis eventuell einen Tip geben, oder einen Hinweis,
wie ich das ganze nun realisieren könnte?

Danke im Voraus
Juri

Autor: Klaus L. (klausi5000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den TRibuffer kann man ganz einfach manuell formulieren, in dem man je 
nach Steuersignal read/write einen Ausgang auf "Z" oder "1"/"0" legt.
Das erkennen die Tools.

Innerhalb Deines Designs, musst Du das aber mit duplizierten Bussen 
machen, also je eine Leitung hin und zurück mit mit Multiplexern 
umschalten.

Autor: Juri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Klaus!

hab mir folgendes überlegt:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity bidir is
    Port ( en     : in    STD_LOGIC;
           out_i   : in    STD_LOGIC_VECTOR (7 downto 0);
           in_i   : out    STD_LOGIC_VECTOR (7 downto 0);
           i_o   : inout  STD_LOGIC_VECTOR (7 downto 0)
        );
end bidir;

architecture Behavioral of bidir is

begin

-- gesteuerter Schreibvorgang
WRITE:  process(en, out_i)
      begin
        if en = '1' then
          i_o <= out_i;
        else
          i_o <= (others => 'Z');
        end if;
      end process WRITE;

-- paralleler Lesevorgang
READ:    in_i <= i_o;
end Behavioral;


werde das ganze mal simulieren, danach werde ich wohl klüger...

Autor: Juri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann mir jemand sagen, ob ich da richtig mit dem design liege?

Autor: Klaus Falser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du mit den Signalen aus dem FPGA hinaus willst, dann ist es so 
richtig.

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das ist alles in Ordnung - viel anders machen kann man da nicht. Die 
entsprechende Primitve von Xilinx heißt OBUFT, wegen der besseren 
Portierbarkeit würde ich aber deinen Code vorziehen.

Autor: Klaus Falser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einfacher und besser ist vielleicht :

i_o <= out_i when en = 1 else (others => 'Z');
in_i <= i_o;

und die entity wegläßt, indem Du diese 2 Zeilen ins Top-Level schreibst.

Autor: Juri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Leute !!!

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.