MAX ALTERA - czy mogę sterować wyjściem trójstanow

Sep 08, 2005 47 Replies

Mam jakiś dziwny problem z bramkami trójstanowymi w swoim projekcie. Ciekaw jestem czy mieliście coś podobnego czy nie...



Mam na płytce procesor i w moim MAXie buforuję zewnętrzną magistralę danych 8-bitów idącą do wyświetlacza używając megafunkcji LPM_BUSTRI (skonfigurowanej oczywiście jako "unidirectional"). Do wejścia sterującego bramek TRI podłączam chip select skombinowany z sygnałem write procesora i tu się rodzi problem: widze na oscylku aktywność szyny danych nawet gdy chip select wyświetlacza nie jest wybrany... Tak jakby bramka TRI była dla tej szyny "przeźroczysta", zawsze włączona! A przecież cały myk w tym aby nie była... Zależało mi aby na złączu i kablu do wyświetlacza była CISZA gdy nie ma zapisów do wyświetlacza i mniejsza emisja zakłóceń z urządzenia...



Czy ja ten kombinowany sygnał włączający bramkę TRI mam jakoś sobie skonfigurować specjalnie w Quartusie ? Czy może mam go wystawić na zewnątrz i wrócić z nim do dedykowanego wejścia OE scalaka MAX ? No bez jaj... :-) Czy ktoś spotkał się z podobnym problemem?



Czytam instrukcję do MAX3000A

formatting link
nie mogę się doczytać co ja właściwie robię tam źle... (strona 10) Czytam tam, że wyjścia trójstanowe mogą być wyłącznie sterowane przez VCC, GND lub jeden wybrany z 6 lub 10 globalnych sygnałów OE. Te sygnały natomiast mogą pochodzić z kombinacji wejściowych pinów OE albo podzbioru innych wejść lub makrocell, więc chyba fitter powinien upakować mi to dobrze.



Czy ja dobrze rozumiem to co tam napisane ? Jak sprawdzić wynik kompilacji co tam się porobiło z tą bramką trójstanową ? Czy ja tam mam skonfigurować ten sygnał jako globalny OE ? Jeśli tak, to jak mogę to zrobić ?


Odpowiedź brzmi - tak. Nie wiem dalczego sięgasz po tą funkcję - pewnie wygodniej. Cieżko się zastanowiac co jest nie tak nie znając reszty układu. Mam propozycję jeżeli piszesz w VHDL bufor trójstanowy wywołasz w następujący sposób

OUT(7 Downto 0) <= Wire_one(7 Downto 0) WHEN Cs = '1' ELSE (OTHERS => 'Z');

gdzie out to Twój BIDIR, a wire_one sygnał na wejsciu bufora Tri.

jesli to verilog

assign OUT[7:0] = Cs ? Wire_one[7:0] : 8'bzzzzzzzz;

Nie sądze żeby Twoje problemy wynikały ze struktury MAX raczej jest to kwestia kodu.

Pozdrawiam

Krzysiek

Użytkownik "Pszemol" snipped-for-privacy@PolBox.com napisał w wiadomości news: snipped-for-privacy@poczta.onet.pl...

Na które pytanie ? :-)

Nie piszę w VHDL i dlatego sięgam po tą funkcję aby mieć symbol na schemacie.

Na jedno wychodzi. Pytanie brzmi: czy ten Twój sygnał Cs ma być jakoś specjalnie zadeklraowany jako "global OE" czy Quartus sam sobie z tym radzi ?

Nie ma tam mojego kodu. Mój jest schemat. Używam symboli Quartusa i swoich. Troszhę VHDL jest, ale nie w tej partii schematu... Tak jak napisałem wczesniej, bramką trójstanową steruję sygnałem skombinowanym z dwu innych sygnałów: display_cs i cpu_write. Założenie było takie, aby na zewnętrznej szynie danych wyświetlacza była zawsze cisza z wyjątkiem krótkich momentów komunikacji z LCD. LCD jest z wewnętrznym kontrolerem więc nie ma tam na złączu skaningu.

Ok, ja nie korzystałem nigdy z LPM_BUS_TRI, natomiast zwykle korzystałem z makra "tri", które wywowłuje się jak bramkę na schemat np and2 itp. Do tego dołączasz bus i oznaczasz np vecctor_in[7..0] i kompilator wie że ma wstawić 8 buforów tri. Sterowanie 1 enable , 0 disable. Działa pięknie w wielu projektach w MAX3000 również.

Popatrzyłbym na Twoim miejscu uważnie w komunikaty kompilatora info i warning. Tam najprawdopodobniej znajdziesz odpowiedź co robisz źle.

Krzysiek

Użytkownik "Pszemol" snipped-for-privacy@PolBox.com napisał w wiadomości news: snipped-for-privacy@poczta.onet.pl...

"Pszemol":

a nie masz czasem ustawionej opcji, ktora jest zdaje sie default, by bramki 3-stanowe zastapic open drain ? te 3-stanowe weyjscia sa polaczone do jakichs pull-up ? bo jak nie, to moze na nich mrogac dowoli w stanie wylaczenia;

quartus w czasie kompilacji tworzy file *.eqn [jakos tak, wywalil mi sie twardy dysk i nie mam w tej chwili quartusa w domu by sprawdzic] gdzie mozesz sprawadzic wynik pracy kompilatora; poza tym masz 'technology mapping view' - w tools, ktory pokazuje schemat post compilation i na koniec chip editor;

JA

Jest jeszcze inna mozliwosc - Quartus to zoptymalizowal ;-) Generalnie nie powinno byc zadnych problemow z buforami 3-stanowymi. Ja tak standardowo podlaczam Alterki do wiekszych prockow.

Ogladam ten swój projekt "technology viewerem" ale niezbyt sie znam na czytaniu tego typu dziwnych schematów :-) Nie moge jednak znalezc tej mojej bramki trójstanowej... Albo wiec jest i sie przede mna ukrywa albo zostala zoptymalizowana.

Sprobuje wylaczyc ptaszka przy zezwoleniu na zastapienie opendrenem.

Wiesz - jak masz tylko ten jeden CS, jak uklad dziala statycznie, albo z innych sygnalow wynika, ze ten port jest caly czas jako output to moglo to byc zoptymalizowane...

Ale to IMHO tylko wewnetrzne sygnaly zmienia - bo 3-stanowe sygnaly w srodku Altery mocno spowalniaja calosc. Nie chce mi sie teraz czytac, ale to nie powinno miec wplywu na piny.

Wlasnie sprawdzilem - u mnie ptaszek jest, a piny dzialaja jako prawdziwe 3-stany.

No nie bardzo... Tak jak pisalem na poczatku, wejscie sterujace bramki trójstanowej podpiete jest pod sygnal skombinowany z CS i WRITE. Sygnal WRITE przychodzi z pinu wejsciowego, wiec Quartus nie moze miec bladego pojecia co do optymalizacji.

Poza tym wyswietlacz dziala, problemem jest tylko obserwacja danych na oscylku w czasie w którym ich nie powinno tam byc :-)

Wewnetrzne sygnaly trójstanowe w CPLD/FPGA ??? Wow, to ja wiecej nie wiem niz mi sie dotad wydawalo...

Najlepszy numer jest taki, ze od ostatniego testu przekompilowalem projekt z ptaszkiem i bez ptaszka przy tym ustawieniu opendrain i nie widze róznicy - aktywnosc na szynie danych dziwnie wygasla...

"Pszemol":

dziwne ? popatrz uwazniej, to zwykly schemat, tyle, ze zamiast symbolow bramek ma prostokaty LUT z opisana funkcja; 'sila' tego obrazka w tym, ze pokazuje co naprawde jest w kosci, po tym jak zostaly wykonane wszelkie optymalizacje;

powinna byc; wciaz nie mam quartusa na domowym pc by podpowiedzec jak to ma wygladac :(

raczej nie, do tych samych linii moze byc dolaczonych kilka urzadzen pracujacych jedynie w trybie 'output';

jesli ci zalezy z jakichs powodow, by na liniach nie bylo zadnej aktywnosci poza okresem wysylania danych, to zamiast tri uzyj po prostu bramki AND lub OR, tri ma sens gdy bus jest dwukierunkowy, lub gdy kilka urzadzen moze go sterowac;

jesli chcesz zrozumiec, co sie dzieje, to dolutuj na jedna linie wyjsciowa 1K pull-up i porownaj zachowanie z sasiadem; wyprowadz wejscie jednego bufora tri na pin testowy, tak, by moc porownac zachowanie wejscia i wyjscia bramki tri w czasie, gdy teoretycznie powinna byc odcieta;

to jest roznica w zachowaniu, czy jej nie ma ?, - bo nie jest dla mnie jasne, co jest napisane powyzej;

prawdziwa bramka trojstanowa, gdy jest odcieta nie steruje wyjscia, [ktore moze zachowywac sie dowolnie jesli nie jest podciagniete do zasilania] open drain, jak open kolektor, steruje caly czas linie;

JA

Po prostu bawilem sie sporo z ustawieniami w projekcie i za któryms razem sprawdzilem oscylkiem i nic - wszystko dziala i co gorsze nie jestem w stanie wrócic do stanu w którym mi to nie dzialalo... Czyzbym mial przywidzenia ? ;-)

Hehe, tez tak myslalem, ale ktoras wersja Max++ byla wyjatkowo wredna pod tym wzgledem. Po kilku nieprzespanych nocach (bo najgorzej jak nie dziala cos prostego - np. prawo Ohma) wyprowadzilem jeden wewnetrzny sygnal na pina (zeby zablokowac optymalizowanie w tym miejscu) i problem zniknal. Skompilowalem ten projekt pozniej w Quartusie (jak dodali obsluge Maxow) z pinem i bez pina - za kazdym razem dzialalo dobrze.

"jerry1111":

/.../

a, jesli zalozymy, ze program ma bledy, to oczywiscie moze zrobic absolutnie wszystko :)

poprzednio chcialem zauwazyc jedynie, ze _poprawnie_ dzialajacy software nie ma prawa wyoptymalizowac bramki 3-stanowej z powodow opisanych przez ciebie :)

ps.

ostatnio coraz czesciej mam potrzebe zmienic jakis drobiazg i usiluje to zrobic za pomoca 'chip editor', ale z marnym skutkiem, jedyne co mi sie naprawde udaje to zmiana parametrow pll, moze ktos ma jakies wieksze doswiadczenia i chcialby sie nimi podzielic ?

JA

Taaa... recznie cos zmieniac w srodku zajetego w 80% EP1C6. Powodzenia ;-)

Ja od pewnego czasu staram sie znalezc czas ;-) , zeby opanowac do perfekcji LogicLock - coby nie przekompilowywac za kazdym razem calego ukladu.

jerry1111 napisal(a):

Tak mi sie przypomnialo: kiedys mialem wredny problem z kompilatorem MaxPlus. Uklad czasem odwracal faze w kanalach (strumien audio). Okazala sie w koncu rzecz nastepujaca: w ukladzie bylo wyjscie z dzielnika (NODE). To wyjscie szlo nastepnie na 4 piny. Po analizie rownan wynikowych (troche upierdliwe) wyszlo, ze optymalizator tak zoptymalizowal uklad, ze rozdzielil sygnaly nie bezposrednio przez pinami I/O, a jeszcze w obrebie dzielnika dodajac przerzutniki. To oczywiscie powodowalo roznice w fazie o 180 stopni. Przyznam sie, ze zaskoczylo mnie wtedy takie dzialanie optymalizatora - wydawalo mi sie, ze optymalizator nie powinien dodawac zadnych przerzutnikow. Zmiana Node na Lcell oczywiscie poskutkowala.

Moze uzywalismy tej samej 'genialnej' wersji? O ile pamietam cos jak 8.9 albo 9.01 miala problemy z optymalizowaniem - bylo to dawno, wiec nie pamietam dokladnie numeru. Teraz juz MAX+ nie ma, wszystko w Q2 sie kompiluje (troche szkoda, bo do malych kostek Max+ byl dobry - bo 10x szybszy niz kobylasty Q2).

jerry1111 napisal(a):

Nie ma juz? Mysmy ostatnio zaczeli wszystko nowe robic pod Quartusem i nawet nie wiedzialem, ze skonczyli MaxPlusa....

Mozna sciagnac ostatnia wersje, ale juz nie jest rozwijana. Wszystko do Q2 przeniesli. Tylko jak cholera cos malego do 3064 musze stworzyc, to w Quartusie trwa to 5x wolniej ;-(

OK, nowy projekt w miedzy czasie zrobilem od poczatku. Mam tam LCD tekstowy z szyna danych wyprowadzona równiez przez TRI. I znowu mam te przebiegi na oscylku... Tym razem za rada grupowiczów przylozylem opornik

10k do masy i przebiegi znikly z tego pina do którego przytknalem opornik... Zastanawiam sie wlasnie nad jedna sprawa :glównym celem zastosowania tam TRI jest unikniecie szumów i zaklócen na sciezkach biegnacych od MAXa do zlaczki i na samej zlaczce. Skoro tam sa przebiegi, to beda EMI... czy nie beda ze wzgledu na wysoka rezystancje wewnetrzna zródla ? Innymi slowy: czy powinienem dac tam rezystory pull-up/pull-down czy moze nie przejmowac sie tym wcale?

To po cholere 3stanowy bufor? Zamiast wchodzic w 3 stan, to podczas nieuzywania wyswietlacza wystaw zera i juz. A wychodz z tych 'zer' tylko na czas zapisu i odczytu. Z drugiej strony czegos nie rozumiem - tak nie powinno byc. Jak chcesz (i mozesz) to wyslij mi ten design na maila (przed 'at' powinno byc jerry1111).

Jak widzisz jakis przebieg, to cos zle z 3-cim stanem. Chyba ze MAXy teraz robia w tak cienkiej technologii ze te 'przesluchy' to normalka. BTW: Z jakiego sygnalu sa te przesluchy?

A nie polozysz sobie zboczy? Zreszta co do EMI i LCD textowego... moze i warto tak polozyc zbocza. I dac filtry EMI smd.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required