Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

XILINX XC95xxXL - Wyjście biderectional - ERROR:Xst:528 - Multi-source in Unit

13 Lut 2014 18:52 2895 8
  • Poziom 42  
    Witam

    Szukałem informacji na ten temat ale wszystko jest pisane do VHDL itp. a to mi nie pomoże.

    Narysowałem bardzo prosty schemat.

    XILINX XC95xxXL - Wyjście biderectional - ERROR:Xst:528 - Multi-source in Unit

    Jak widać są tu tylko dwa bufory trójstanowe połączone razem wyjściem.
    Wiem że teoretycznie może dojść na wyjściu do zwarcia jednak załóżmy że urządzenie jest tak skonstruowane że jest to wykluczone.

    Przy próbie kompilacji wyskakuje błąd:

    Code:
    =========================================================================
    
    *                         Low Level Synthesis                           *
    =========================================================================

    ERROR:Xst:528 - Multi-source in Unit <aaa> on signal <XLXN_39>
    Sources are:
       Output signal of OBUFT instance <XLXI_15>
       Output signal of OBUFT instance <XLXI_16>
    ERROR:Xst:415 - Synthesis failed
    CPU : 0.26 / 0.59 s | Elapsed : 0.00 / 0.00 s


    Czemu tak jest i jak to da się inaczej zrobić?
  • Poziom 38  
    Właśnie dlatego, że program wykrywa takie połączenie, to jest coś w stylu jak gdbyś do PSPICE dał równolegle dwa źródła napięcia bez pojedynczego rezystora między nimi - też będzie się pluć i słusznie. Tu sprawę rozwiąże jeszcze albo OR (jeśli ma zawsze dominować H) albo AND (jeśli ma dominować L).
  • Poziom 42  
    No dobra.

    A teraz wyobraź sobie że mam takich elementów 100. Mam je wszystkie podłączać do bramki OR?

    Przypominam że to magistrala dwukierunkowa! Część linii nie będzie tylko wyjściami ale także wejściami i tu bramka OR odpada.
  • Poziom 28  
    ty wiesz, ze 'zwarcie' jest nie mozliwe, ale ise nie;
    zadeklaruj 2 sygnaly otwierajace tri-buf, powiedzmy oe[1:0]
    i sprobuj taka logike:
    Code:

       if      ( oe[0] ) out = a1;
       else if ( oe[1] ) out = a2;
       else              out = 1'bZ;


    dosc proste do poskladania z bramek;

    w takim przypadku tool tez bedzie 'wiedzial', ze nie ma
    mozliwosci jednoczesnego sterowania i powinien sie zgodzic;

    wersja w verilogu wygladalaby jakos tak:
    Code:

    module two_tri_bufs
    (
      input  a, b,
      input  a_open, b_open,
      inout  out
    );

    assign out =
             a_open ? a :
             b_open ? b :
             1'bZ;

    endmodule


    j.

    ----------------

    nawiasem mowiac tronics swoja racje ma, jesli nie ma jakis
    innych, a nieznanych nam warunkow/wymagan to przed buforem tri
    powinien byc multiplekser a jego wyjscie wchodzic na bufor 3-stanowy
    sterowany pojedynczym sygnalem;

    j.
  • Poziom 42  
    Wszytko fajnie tylko to narysuj.
  • Poziom 28  
    niespecjalnie mam ochote rysowac, po to wymyslono
    jezyki verilog i vhdl by rysowanie stalo sie zbedne;
    jesli masz w planie jakakolwiek wieksza aktywnosc z ukladami fpga,
    zaoszczedzisz mnostwo czasu uczac sie jednego z tych jezykow,
    nawiasem mowiac verilog jest uproszczony do granic przyzwoitosci,
    opanowanie podstaw umozliwiajacych pisanie prostych, ale uzytecznych
    modulow to okolo 2 dni;

    tu masz przyklad selekcji jednego z 4 wejsc, przeslanie selekcji
    na tri-buf i sterowanie buforem 3-state;
    wejscia open[0] i open[1] wybieraja jeden z sygnalow: a,b,c,d,
    open[2] otwiera/zamyka wyjsciowy bufor tri;

    Kod: verilog
    Zaloguj się, aby zobaczyć kod



    tu masz schemat 'rtl' wyprodukowany przez quartus z kodu powyzej;


    XILINX XC95xxXL - Wyjście biderectional - ERROR:Xst:528 - Multi-source in Unit

    tu masz reprezentacje 'bramkowa', rowniez narysowana przez quartus;


    XILINX XC95xxXL - Wyjście biderectional - ERROR:Xst:528 - Multi-source in Unit


    out~output to twoj bufor trojstanowy;


    porownaj, co prostsze - rysowac, czy napisac, i co bardziej odporne
    na glupie bledy, latwiejsze do poprawienia/modyfikacji;

    j.
  • Poziom 42  
    Zdecydowanie rysować.

    To co pokazałeś dalej nie działa bo jak połączę wyjścia dwóch takich tworów dalej jest ten sam błąd.

    XILINX XC95xxXL - Wyjście biderectional - ERROR:Xst:528 - Multi-source in Unit
  • Poziom 28  
    11111olo napisał:

    To co pokazałeś dalej nie działa bo jak połączę wyjścia dwóch takich tworów dalej jest ten sam błąd.


    nie nalezy laczyc twory a zmodyfikowac twor zaleznie od potrzeb;
    a konkretnie MUX w tworze na 2/4/100/inna_liczba wejsciowy;

    j.
  • Poziom 42  
    Można łączyć dowolną ilość buforów trójstanowych tylko do tego trzeba użyć elementu BUFT a nie OBUFT jak jest w pierwszym poście.

    Zamykam.