Tri-State Element für Spratan3(Xilinx)

Gast #980051
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
Angehängte Dateien:
Gast #980061
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.
Gast #980278
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...

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