przerzutnik RS w AHDL



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Arek" <abcdek_at_nospam_poczta.onet.pl.usun_cde>
Subject: przerzutnik RS w AHDL
Date: Tue, 13 Jun 2006 19:57:38 +0200


Altera Flex 10k50 pod MAX+plus II (v. 9). Nie mogę znaleźć zwykłego RS,
bez zegara. W .gdf mogę postawić symbol dff (przerzutnik D) CLK i D
podpiąć np. do vcc i wejścia -R i -S używać - działa, sprawdzone.
Wyrzuca tylko ostrzeżenie "no clock transition". Ale potzrebuję
użyć RS w pliku tekstowym .tdf.

1.
{
X[7..0] : INPUT;
}
VARIABLE G[7..0] : dff;
a potem
G[].clk = vcc; (gnd też nic nie zmienia)
G[].d = vcc; (-//-)
G[].prn = vcc;
G[].clrn = x[];
to kompilator wyrzuca serię ostrzeżeń "G0 stuck at GND" itd. do G7
I tak jest w rzeczywistości.

2. Gdy na zewnątrz wystawię set (.prn)
G[].prn = x[];
G[].clrn = vcc;
to komunikat "G0 stuck at VCC"
x[] w projekcie to są piny scalaka (na zewnątrz pull-up). Kompilator
nie może wiedzieć co na nich będzie. Dlaczego w 1. i 2. uznaje je za aktywne?

3.
Może set i reset przy definicji w pliku są aktywne jedynką (jak w
starych w Lattice?). czyli np:
G[].prn = gnd;
G[].clrn = !x[];
Kompilator ostrzega "no clock transition", ale po zaprogramowaniu
przerzutniki są w stanie 0 a po podaniu na piny x[] "0" (czyli na clrn
"1") się ustawiają. a po zdjęciu zera wracają do "0"

4.
Jeszcze coś takiego:
G[].prn = gnd;
G[].clrn = x[];
Przerzutniki są ustawione, po podaniu "0" na x[] się zerują,
po zdjęciu zera wracają do "1".

Jeżeli aktywne 0 to 3. i 4. byłoby jeszcze wytłumaczalne - chociaż to
stan zabroniony clear "wygrał" z set. Czyli jednak aktywne są 0? Ale
to już sprawdzałem - "G0 stuck at GND"
Jak w pliku .tdf umieścić RS? Grafiki chcę uniknąć. Funkcji przywołującej
stare dobre 7474 i dłubania w bramkach też.

Arek



Poprzedni Następny
Wiadomość
Spis treści
From: JA <j_andr_bezsmieci_at_nospam_freeent.de>
Subject: Re: przerzutnik RS w AHDL
Date: Thu, 15 Jun 2006 21:08:09 +0200



Arek wrote:

Nie mogę znaleźć zwykłego RS, bez zegara.

napisalem cos takiego [quartus, nie mam maxplus]:


subdesign test_dff
(
set[7..0],
reset[7..0] : input;
dff_out[7..0] : output;
)

begin

for i in 7 to 0 generate
dff_out[i] = dff(vcc,vcc,reset[i],set[i]);
end generate;

end;


i to dziala, przynajmniej na symulatorze,


VARIABLE G[7..0] : dff;
a potem
G[].clk = vcc; (gnd też nic nie zmienia)
G[].d = vcc; (-//-)
G[].prn = vcc;
G[].clrn = x[];
to kompilator wyrzuca serię ostrzeżeń "G0 stuck at GND"
I tak jest w rzeczywistości.

jesli przerzutnik ma wartosc 'default' zero [a zwykle ma],
prn jest nieaktywne [vcc] i jedynie .clrn jest
gdzies podlaczone, to wyjscie musi byc 'stuck at GND';

a w ogole to co chcesz zrobic ?
uzywanie FF bez zegara za to z set i clr jest
na ogol zlym pomyslem, jestes pewien, ze tak musi
byc ?


Arek

JA

Poprzedni Następny
Wiadomość
Spis treści
From: "Arek" <abcdek_at_nospam_poczta.onet.pl.usun_cde>
Subject: Re: przerzutnik RS w AHDL
Date: Fri, 16 Jun 2006 21:59:36 +0200


JA napisał(a) w wiadomości: <4fdpgpF1io5u7U1_at_nospam_uni-berlin.de>...

napisalem cos takiego [quartus, nie mam maxplus]:

subdesign test_dff
(
set[7..0],
reset[7..0] : input;
dff_out[7..0] : output;
)

begin

for i in 7 to 0 generate
dff_out[i] = dff(vcc,vcc,reset[i],set[i]);
end generate;
end;

Takiego zapisu nie próbowałem. Ale coś podobnego działa
G[].prn = wej; wejście z pinu zewn.
G[].clrn = x[];

jesli przerzutnik ma wartosc 'default' zero [a zwykle ma],
prn jest nieaktywne [vcc] i jedynie .clrn jest
gdzies podlaczone, to wyjscie musi byc 'stuck at GND';

Nie znalazłem) ustawienia domyślnej wartości przerzutników.
Jeżeli chodzi o wartość po "włączeniu" układu (na razie
po zaprogramowaniu .sof-em) to może o to chodzi, bo przerzutniki
są rzeczywiście w stanie 0, co przy zablokowaniu set daje taki
wynik bo kompilator o tym "wie" (tyle, że przy użyciu symbolu
dff w .gdf-ie, set=vcc pin->clear nie powoduje tego komunikatu).
To nie tłumaczy sytuacji, gdy clear jest na VCC a set na pinach.
Nie powinno być wtedy "stuck at VCC". W końcu wartość domyślna
powinna być konkretna...

a w ogole to co chcesz zrobic ?
uzywanie FF bez zegara za to z set i clr jest
na ogol zlym pomyslem,
jestes pewien, ze tak musi byc ?

W projekcie było trochę RS asynchronicznych. Fragment pomysłu
przenoszony z Lattice'owego Abla na inną platformę. Zalecane nie
zmieniać reguł działania i raczej ma być w postaci tekstowej.
Można też inaczej i pewnie napiszę to po swojemu.
Arek



Poprzedni Następny
Wiadomość
Spis treści
From: "JA" <j_andrWYTNIJTO_at_nospam_freenet.de>
Subject: Re: przerzutnik RS w AHDL
Date: 17 Jun 2006 15:55:59 +0200



czekajac w robocie az mi sie skonczy dluga
kompilacja, zrobilem i przesymulowalem taki
set-reset 'przerzutnik';

Poprzedni Następny
Wiadomość
Spis treści
From: " JA" <j_andr_at_nospam_WYTNIJ.gazeta.pl>
Subject: Re: przerzutnik RS w AHDL
Date: Sat, 17 Jun 2006 10:14:35 +0000 (UTC)



* z gory przepraszam, jesli odpowiedz
* ukazala sie dwukrotnie;


Arek napisał:

Takiego zapisu nie próbowałem. Ale coś podobnego działa
G[].prn = wej; wejście z pinu zewn.
G[].clrn = x[];

zapis jak zapis, preferowalem powyzszy jak jeszcze
uzywalem ahdl, bo mniej pisania,
oba zapisy sa rownowazne;

problem nie w zapisie a w tym, ze przerzutnik r-s nie
moze miec jednego z wejsc polaczonego na stale do '1'
czy '0', bo to nie ma sensu i kompilator to 'wie';



jesli przerzutnik ma wartosc 'default' zero [a zwykle ma],
prn jest nieaktywne [vcc] i jedynie .clrn jest
gdzies podlaczone, to wyjscie musi byc 'stuck at GND';

Nie znalazłem ustawienia domyślnej wartości przerzutników.

gdzies w logu kompilacji jest ta informacja,
prawdopodobnie trzeba szukac hasla: 'power up';


To nie tłumaczy sytuacji, gdy clear jest na VCC a set
na pinach. Nie powinno być wtedy "stuck at VCC".
W końcu wartość domyślna powinna być konkretna...

sciagnij sobie quartus i skompiluj prosty kod:

Poprzedni Następny
Wiadomość
Spis treści
From: "Arek" <abcdek_at_nospam_poczta.onet.pl.usun_cde>
Subject: Re: przerzutnik RS w AHDL
Date: Wed, 21 Jun 2006 23:40:03 +0200


JA napisał(a) w wiadomości: ...

problem nie w zapisie a w tym, ze przerzutnik r-s nie
moze miec jednego z wejsc polaczonego na stale do '1'
czy '0', bo to nie ma sensu i kompilator to 'wie';


No tak... Sprawdzę jeszcze, czy w przypadku użycia pełnego
D coś takiego nie występuje.

dowcip polega na tym, ze czy uzywasz set czy clear,
flip-flop ma podlaczony port clear, na wyjsciu f-f
pojawia sie inwerter, jesli w uzyciu jest port set;
czyli:
set zeruje przerzutnik, a inwerter robi z tego
jedynke; negowane jest rowniez wejscie 'd';
wiec jest "stuck at VCC" jesli polaczysz set,
"stuck at GND" jesli polaczysz clear;


jeżeli tak to zrobiono również w starszych układach - no cóż...

W projekcie było trochę RS asynchronicznych.

to jest bardzo zly pomysl, trzeba miec duza
praktyke, by zrobic pewnie dzialajacy, wiekszy
projekt asynchroniczny;


W poprzedniej wersji bardzo sprytnie powiązano obsługę klawiatury
(gaszenie drgań klawiszy na RS) z częścią funkcji logicznych
zwązanych z klawiszmi. W innym miejscu korzystano z synchronicznych
i asynchronicznych setów/resetów (wiem, można inaczej). Zapis
w Ablu był wbrew pozorom dosyć intuicyjny i dobrze oddawał funkcje
poszczególnych fragmentów. Teraz z kilkunastu porozrzucanych kości
trafia to do jednej z pewnymi zmianami.
Całość w większości synchroniczna, zegarów kilkanaście, w tym kilka,
między którymi związku nie ma. Przebiegów które trzeba
"dosynchronizować" (pędzone różnymi zegarami) też trochę.

i zastanow sie, czy nie lepiej napisac to w verilogu
[w ostatecznosci w vhdl ... :] bo ahdl to przywiazanie
sie do kompilatora altery, trzeba bedzie znow zmienic
platforme, to trzeba bedzie znow pisac od nowa;


Tego już nikt nie będzie poprawiać... :) Ew. będzie robione
inaczej.
Dzięki.

Arek




Poprzedni Następny
Wiadomość
Spis treści
From: JA <j_andr_bezsmieci_at_nospam_freeent.de>
Subject: Re: przerzutnik RS w AHDL
Date: Thu, 22 Jun 2006 01:59:39 +0200



Arek wrote:

No tak... Sprawdzę jeszcze, czy w przypadku
użycia pełnego D coś takiego nie występuje.

nie do konca rozumiem :(

jeżeli tak to zrobiono również w starszyc
układach - no cóż...

tak wlasnie bylo w starszych ukladach, tak jest
w cyclone, jak jest w stratix juz nie wiem,
moze tam dodano osobne wejscie 'set';

W poprzedniej wersji bardzo sprytnie powiązano
obsługę klawiatury (gaszenie drgań klawiszy na RS)

jesli chodzi o eliminacje drgan stykow na klawiszach,
to moze tak:

----------------------------------
include "lpm_counter";

subdesign klawisz
(
sys_clk : input;
k_a, k_b : input; -- klawisze a i b
a_out,
b_out : output;
)

variable
res, count : lcell;
del_cnt : lpm_counter with (lpm_width = 5);

begin
count = a_out # b_out;

del_cnt.clock = sys_clk;
del_cnt.sclr = del_cnt.q[4];
del_cnt.cnt_en = count;

res = !del_cnt.q[4];

a_out = dff(vcc,k_a,res,);
b_out = dff(vcc,k_b,res,);
end;
-------------------------------------

Arek

JA