RTV forum PL | NewsGroups PL

Optymalizacja projektu CPLD CoolRunner2 w VHDLu: jak unikać błędów sygnałów?

Problemy z implementacją w CPLD

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Optymalizacja projektu CPLD CoolRunner2 w VHDLu: jak unikać błędów sygnałów?

Goto page Previous  1, 2

Jerry1111
Guest

Wed Jan 28, 2009 10:44 pm   



Sludig wrote:
Quote:
Problemem może być sygnał nWriteEnable pamięci SRAM. Wartość
jest zapisywana na zboczu narastającym tego sygnału, jednak
jego w jego przebiegu jest szpika zera przed właściwym zezwoleniem na
zapis.
Sygnał ten zależy jest od trzech sygnałów:
nWriteEnable <= nWriteToMem or Clock or (not nReadFromMem);
a mimo tego wygląda na sporo opóźniony względem clocka.

Bedzie opozniony (bo masz bramke), ale co mnie martwi: "Clock" w tel
linijce. Po chusteczke ten Clock do OR potrzebny? Zalatw to w 'if' -
IMHO bezpieczniej.

A w ogole to calosci jakims ifem nie da rady? Bedzie zdrowiej.
Na razie wszystkie przewidywania sprawdzone - hazardy, ktore widac tylko
w gate-level Wink (btw: to moj ulubiony moment walki).

Quote:

Poza tym wygląda na to, że adres komórki za szybko się zmienia po
narastającym zboczu nWriteEnable. Jutro to wszystko dokładniej
przebadam.

Smierdzi mi to troche pisaniem kodu od nowa, uzywajac innej koncepcji.
Np koncepcji nie mieszania CLK tam, gdzie nie trzeba!

Quote:
Czy da się zmusić kompilator żeby nie optymalizował wybranych sygnałów?

Xilinx nie wiem, Altera ma 'virtual pin'.

Quote:
Teraz mam tak zrobione, że stan automatu zmienia się na innym zoboczu
zegara niż dane wejściowe, żeby podczas zmiany stanu ich wartość była
stała. Dobrze robie czy może z jakiegoś powodu stan powinien zmieniać
się na tym samym zboczu co sygnały sterujące?

Jak masz dffy na wejsciach, to na tym samym - po chu*** na innym?

--
Jerry1111

Jerry1111
Guest

Wed Jan 28, 2009 10:46 pm   



Sludig wrote:
Quote:

Ja tam bym chciał zobaczyć ten automat :)

Automat jak automat: Mealy'ego składający się z około 16 stanów. Poza tym
kilka liczników o "wyszukamy" działaniu, rejestr przesuwny, UART, logika
kombinacyjna, itp.

I ta logika kombinacyjna troche mnie martwi. Tam mozna namieszac.
Nie mozesz kodu gdzies powiesic na sieci? Bedzie latwiej sie bawic w
naprawianie.

--
Jerry1111

J.A
Guest

Thu Jan 29, 2009 12:07 pm   



pedzenie calej logiki jednym zboczem zegara,
a fsm drugim to prawie na pewno zly pomysl;

Quote:
Bedzie opozniony (bo masz bramke), ale co mnie martwi: "Clock" w tel
linijce. Po chusteczke ten Clock do OR potrzebny? Zalatw to w 'if' -
IMHO bezpieczniej.

'if' tez stworzy te same bramki, to tylko inny sposob zapisu;

Quote:
Czy da się zmusić kompilator żeby nie optymalizował wybranych sygnałów?
Xilinx nie wiem, Altera ma 'virtual pin'.

'virtual pin' to troszke cos innego;

zeby powstrzymac kompilator od optymalizacji lub zmiany
nazwy sygnalu trzeba dac dyrektywe synthesis;

verilog:
wire sygnal_xxx /* synthesis keep */; dla wire
reg reg_xxx /* synthesis preserve */; dla rejestru

vhdl:
signal sygnal_xxx: std_logic;
attribute keep: boolean;
attribute keep of sygnal_xxx: signal is true;

signal reg_xxx: stdlogic;
attribute preserve: boolean;
attribute preserve of reg_xxx: signal is true;

jezeli to jest SRAM [static ram] a nie SSRAM [Synch. static ram],
to adres do zapisu jest zapisywany na opadajacym zboczu write_enable,
dane na narastajacym, wiec zmiana adresu 'prawie rowno' czy wrecz
rowno z rosnacym zboczem sygnalu zapisujacego nie jest grozna;
podobnie z danymi - powinny byc stabilne wokol pos. zbocza write_enable,
przelaczanie przy zboczu opadajacym nie jest grozne;
przynajmniej tak bylo kilka lat temu, jak cos z tymi pamieciami
robilem, nie sadze, by sie to zmienilo;

akurat przy interface do sram praca na obu zboczach moze
ulatwic zapewnienie wlasciwego timingu, np.:
pos_edge zegara zapisuje adres do rejestrow WY,
neg_edge wyzwala write_enable i wpisuje dane do rejestrow WY
pos_edge gasi write_enable;

JA


--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl

Sludig
Guest

Thu Jan 29, 2009 5:28 pm   



Quote:
I ta logika kombinacyjna troche mnie martwi. Tam mozna namieszac.
Nie mozesz kodu gdzies powiesic na sieci? Bedzie latwiej sie bawic w
naprawianie.

Nie, nie mogę. Poza tym, żebyś zrozumiał jak układ działa musiałbym
zamieścić opis działania całego urządzenia. To niestety nie wchodzi w grę. W
zasadzie projekt uważam za udany - byle nikt nigdy nie włączył kodowania FSM
typu Hot-One Wink Przy robieniu kolejnego projektu już

pozdrawiam
Sludig

Sludig
Guest

Thu Jan 29, 2009 5:33 pm   



Quote:
zeby powstrzymac kompilator od optymalizacji lub zmiany
nazwy sygnalu trzeba dac dyrektywe synthesis;

verilog:
wire sygnal_xxx /* synthesis keep */; dla wire
reg reg_xxx /* synthesis preserve */; dla rejestru

vhdl:
signal sygnal_xxx: std_logic;
attribute keep: boolean;
attribute keep of sygnal_xxx: signal is true;

signal reg_xxx: stdlogic;
attribute preserve: boolean;
attribute preserve of reg_xxx: signal is true;

Dzięki. To się przyda.

Quote:
jezeli to jest SRAM [static ram] a nie SSRAM [Synch. static ram],
to adres do zapisu jest zapisywany na opadajacym zboczu write_enable,
dane na narastajacym, wiec zmiana adresu 'prawie rowno' czy wrecz
rowno z rosnacym zboczem sygnalu zapisujacego nie jest grozna;
podobnie z danymi - powinny byc stabilne wokol pos. zbocza write_enable,
przelaczanie przy zboczu opadajacym nie jest grozne;
przynajmniej tak bylo kilka lat temu, jak cos z tymi pamieciami
robilem, nie sadze, by sie to zmienilo;

Ja mam tą pamięć
http://www.vlsi.ee.upatras.gr/~karagian/samsung_sram.pdf
i dziwnie to wygląda, bo o ile dobrze odczytuje to adres może się zmieniać
na obu zboczach nWR, bo
tAS=0 i tWR=0. Ale mam zrobione tak jak sugerowałeś.

pozdrawiam
Sludig

Sludig
Guest

Thu Jan 29, 2009 5:33 pm   



Quote:
A w ogole to calosci jakims ifem nie da rady? Bedzie zdrowiej.
Na razie wszystkie przewidywania sprawdzone - hazardy, ktore widac tylko w
gate-level Wink (btw: to moj ulubiony moment walki).

Nie widze innej metody na zapisanie danych "w locie". Zbocze narastajace nWE
musi wystąpić raz na okres zegara przecież.
Piszesz, że to twój ulubiony moment walki ?!? A jak walczyć? Jeżeli już
wiem, który sygnał powoduje błąd to jak go wyeliminować?

pozdrawiam
Sludig

JA
Guest

Thu Jan 29, 2009 8:32 pm   



Sludig wrote:

Quote:
Ja mam tą pamięć
http://www.vlsi.ee.upatras.gr/~karagian/samsung_sram.pdf
i dziwnie to wygląda, bo o ile dobrze odczytuje to adres
może się zmieniać na obu zboczach nWR, bo tAS=0 i tWR=0.

raczej adres NIE moze sie zmieniac na obu zboczach Smile
musisz zapewnic stabilny adres co najmnie 0ns przed
opadajacym zboczem we i co najmniej 0ns po rosnacym zboczem;

Quote:
W zasadzie projekt uważam za udany - byle nikt nigdy nie
włączył kodowania FSM typu Hot-One Wink

optymista jestes;
one-hot jest zwykle szybszym kodowaniem, a to sugeruje,
ze poprawne dzialanie zalezy od jakis opoznien w fpga,
nieprzewidywalnych i co wazniejsze niepowtarzalnych;
moze sie zdarzyc, ze na 5 kosciach bedzie dzialac, na
szostej nie bedzie; albo odwrotnie;

Quote:
w jego przebiegu jest szpika zera przed właściwym
zezwoleniem na zapis. Sygnał ten zależy jest od trzech
sygnałów:
nWriteEnable <= nWriteToMem or Clock or (not nReadFromMem);
a mimo tego wygląda na sporo opóźniony względem clocka.

ta szpilka swiadczy o zlym rozwiazaniu;
domyslam sie, ze nWriteEnable to nWR, czyli 'aktywny' jest
puls: H-L-H;
czyli bardziej pogladowo byloby:
!nWriteEnable <= !nWriteToMem AND !Clock AND nReadFromMem;
szpilka wynika prawdopodobnie z tego, ze nWriteToMem lub
nReadFromMem tez jest zapisywany opadajacym zboczem Clock,
a to jest pewnie efektem tego, ze fsm pedzisz odwroconym zegarem;
a ten xilinx ma pll w sobie ?
JA

Jerry1111
Guest

Fri Jan 30, 2009 12:06 am   



Sludig wrote:
Quote:

A w ogole to calosci jakims ifem nie da rady? Bedzie zdrowiej.
Na razie wszystkie przewidywania sprawdzone - hazardy, ktore widac
tylko w
gate-level Wink (btw: to moj ulubiony moment walki).

Nie widze innej metody na zapisanie danych "w locie".

Chodzi o to, ze przy logice kombinatoryjnej generujesz opoznienia ktore
sa przenoszone 'dalej'. Zmniejsza to Fmax (nie ma duzego znaczenia dla
CPLD, ale w fpga to czasem jest 'killer' predkosci).

Quote:
Zbocze narastajace nWE
musi wystąpić raz na okres zegara przecież.

Jak musi, to o tym wiesz. Jak o tym wiesz, to zrob ladnego if coby dff
wygenerowal - 90% ze rozwiazesz sprawe (nawet bez wdawania sie w szczegoly).

Quote:
Piszesz, że to twój ulubiony moment walki ?!? A jak walczyć? Jeżeli już
wiem, który sygnał powoduje błąd to jak go wyeliminować?

Nie masz sygnalu ktory powoduje blad. Masz po prostu blad w projekcie
(cos jak memory leak przy pisaniu programow). Po prostu nie zawsze sie
objawia.

Nie da rady nic wiecej powiedziec nie widzac kodu - wiec proponuje EOT.

Aha: sprawdz to jeszcze raz zanim zrobisz tego 10.000 sztuk ;-)


--
Jerry1111

Goto page Previous  1, 2

elektroda NewsGroups Forum Index - Elektronika Polska - Optymalizacja projektu CPLD CoolRunner2 w VHDLu: jak unikać błędów sygnałów?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map
Nasz serwis wykorzystuje pliki cookies. Korzystanie z witryny oznacza zgodę na ich zapis lub odczyt zgodnie z ustawieniami przeglądarki. Informacja o ciasteczkach