VHDL-Forum

 
Sie sind nicht eingeloggt.
LoginLogin Kostenlos anmeldenKostenlos anmelden
BeiträgeBeiträge MembersMitglieder SucheSuche HilfeHilfe
VotesUmfragen FilesDateien CalendarKalender BookmarksBookmarks
LFSR

Anfang   zurück   weiter   Ende
Autor Beitrag
blubbblubb
Junior-Mitglied


Beiträge: 10

New PostErstellt: 11.01.10, 15:04  Betreff: LFSR  drucken  Thema drucken  weiterempfehlen Antwort mit Zitat  

hi, ich hab angefangen ein wenig VHDL zu lernen,
dazu hab ich mir ein tutorial durchgelesen.
da stand unter anderem wie man flip flops implementiert:

entity ASYNC_FF is
port ( D, CLK, SET, RST : in std_ulogic;
Q : out std_ulogic);
end ASYNC_FF;

architecture A of ASYNC_FF is
begin
process (CLK, RST, SET)
begin
if (RST = `1`) then
Q <= `0`;
elsif SET ='1' then
Q <= '1';
elsif (CLK`event and CLK = `1`) then
Q <= D;
end if;
end process;
end A;

nun wollte ich eine klausuraufgabe versuchen zu bearbeiten.
(siehe link, aufgabe 1b)

http://wwwhni.uni-paderborn.de/fileadmin/hni_eps/GTI_GRA_Klausuren/GTI_DT_Klausur_030809.pdf

nun weiß ich aber absolut nicht wie ich den LSFR implementieren soll, da in der klausur durch die vorgaben schon einige einschränkungen gegeben sind, die mich verwirren.

die entity kann ich somit nur so erstellen:

entity LFSR is
port( Clk: in std_ulogic;
Rst: in std_ulogic;
Y: out std_ulogic
);

architecture Functionality of LFSR is



begin
Y <= (hier würd ich das Q zuweise, aber in der entity hab ich kein Q, also keine ahnung was hier hin soll)

lfsr_proc: process ( Clk, Rst, Y )
begin
(hier weiß ich auch nicht was hin soll, weil wenn man sich die aufgaben anschaut, dann haben einige flipflops an SET eingang das Rst signal und andere am Clear eingang das Rst signal, somit muss ich hier ja irgendwie ein universelles flip flop entwerfen, mit dem ich beide flipflop-"arten" abdecken kann)


für eure hilfe wäre ich sehr dankbar.


[editiert: 11.01.10, 15:13 von blubbblubb]
nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
Dr. Faustus

Administrator

Beiträge: 107
Ort: Aßling


New PostErstellt: 11.01.10, 15:14  Betreff:  Re: LFSR  drucken  weiterempfehlen Antwort mit Zitat  

Hallo,

die Aufgabe in der Klausur gibt absolut genug Information.
Du solltest Dich noch ein bisschen mehr mit VHDL beschäftigen und dann einen Lösungsvorschlag geben. Diesen können wir dann ja hier im Forum diskutieren.

Das Forum ist nicht dazu da Aufgaben zu lösen.

Einen echten Lerneffekt hast Du nur wenn Du auch verstehst worüber wir reden.

Gruesse,

Dr. Faustus

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
blubbblubb
Junior-Mitglied


Beiträge: 10

New PostErstellt: 11.01.10, 15:19  Betreff: Re: LFSR  drucken  weiterempfehlen Antwort mit Zitat  

ja ich weiß ich will ja auch keinen hier ausnutzen damit er mir die lösung aufschreibt, nur hab ich absolut keinen plan wie ich da jetzt rangehen soll.

hab mir ja auch schon die wichtigsten sachen von diesem tutorial http://www.vhdl-online.de/tutorial/ durchgelesen.

aber ich komm einfach nicht voran bei dieser aufgabe, ein paar tipps wären echt hilfreich.

hmm....
ist denn meine entitiy, wie ich sie aufgeschrieben hab, denn wenigstens schonmal richtig?
oder muss da noch was ergänzt werden?

bei der architecture, muss ich dem Y ein Q zuweisen?
wobei Q eine varialbe ist die ich vor der begin anweisung erstelle?

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
Dr. Faustus

Administrator

Beiträge: 107
Ort: Aßling


New PostErstellt: 11.01.10, 15:28  Betreff: Re: LFSR  drucken  weiterempfehlen Antwort mit Zitat  

ok - na dann mal los....

die entity ist leider nicht richtig.

Hast Du dir Abbildung 1 mal genau angesehen?

Du hast y als std_ulogic deklariert. Wie viel bit breit ist std_ulogic und wieviel bit hat y?
--> Typ??



zum lernen halte ich das hier für einigermaßen brauchbar:
http://esd.cs.ucr.edu/labs/tutorial/

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
blubbblubb
Junior-Mitglied


Beiträge: 10

New PostErstellt: 11.01.10, 16:01  Betreff: Re: LFSR  drucken  weiterempfehlen Antwort mit Zitat  

also laut dem tutorial sieht die STD_ULOGIC folgendermaßen aus:

TYPE STD_ULOGIC IS (
`U`, -- uninitialized
`X`, -- Forcing Unknown
`0`, -- Forcing 0
`1`, -- Forcing 1
`Z`, -- High Impedance
`W`, -- Weak Unknown
`L`, -- Weak 0
`H`, -- Weak 1
`-`, -- don`t care);

ich nehme mal an dass jedes mögliche signal somit 1 bit groß ist.
oder wird das eher so gesehen, dass

U = 0000
X = 0001
0 = 0010
1 = 0011
Z = 0100
W= 0101
L = 0110
H = 0111
- = 1000
oder so in der art, so dass jede wert vom typ std_ulogic aus vier bits besteht?


alternativ könnt ich denk ich anstelle std_ulogic auch einfach den typ bit wählen für y.

und zu der frage aus wievielen bits ein y besteht so, würd ich sagen aus einem.
y(1) = 1 bit groß
y(2) = 1 bit groß
usw.

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
blubbblubb
Junior-Mitglied


Beiträge: 10

New PostErstellt: 11.01.10, 19:28  Betreff: Re: LFSR  drucken  weiterempfehlen Antwort mit Zitat  

ich hab noch ein bisschen weiter überlegt.
also ich habe 8 flip flops.

zunächst hab ich gedacht dass ich eine entity erstelle und eine archtitektur, wobei in der architektur das verhalten EINES flip flops beschrieben wird.
Die entity zeigt die eingänge und ausgänge eines flipflops.

nun denk ich aber, dass ich hier nicht ein einziges flip flip betrachte und davon insgesamt 8 stück erschafe und die dann verbinde, sondern ich muss anders vorgehen:

zunächst: die entity die ich erstelle repräsentiert nicht die eingänge und ausgänge EINES flipflops sonder die eingänge und ausgänge des gesamten registers (also der 8flip flops zusammen).

also würd ich das in etwa so machen:

entity LFSR is
port( Clk: in std_ulogic;
Rst: in std_ulogic;
Y: out bit_vector(7 downto 0)
);
end LFSR

architecture Functionality of LFSR is

signal X: bit;

begin
Y <= (keine ahnung was damit gemacht werden soll)
lfsr_proc: process(Clk, Rst)
begin
if Rst = '1' then
Y <= "01011011";
elsif Clk'Event and Clk = '1' then
X <= (Y(0) xor Y(2)) xor Y(4);
Y <= Y srl 1;
Y(7) <= X ;
end if;
end process;
end architecture Functionality;



was sagt ihr dazu? wäre auch nett, wenn ihr mich aufmerksam drauf machen würdet, wenn da syntaxfehler sind.


[editiert: 11.01.10, 19:56 von blubbblubb]
nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
Dr. Faustus

Administrator

Beiträge: 107
Ort: Aßling


New PostErstellt: 12.01.10, 16:12  Betreff: Re: LFSR  drucken  weiterempfehlen Antwort mit Zitat  

Super - ist richtig würde ich sagen.

Gruesse,

Dr. Faustus

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
blubbblubb
Junior-Mitglied


Beiträge: 10

New PostErstellt: 12.01.10, 21:08  Betreff: Re: LFSR  drucken  weiterempfehlen Antwort mit Zitat  

hmm so ganz passt mir meine lösung aber noch nicht:

1.momentan lese und schreibe ich auf Y im process , aber in der entity hat Y den mode out, das heißt ich darf auf Y nur schreiben.
ich könnte ja den mode buffer oder inout verwenden, dann könnte ich auf Y sowohl lesen als auch schreiben, insofern ich das richtig verstanden habe.

2. ich muss irgendwas mit der anweisung " Y <= " die in der architecture die nach dem "begin" und vor dem "process" steht machen, das in der klausur fest vorgegeben ist, damit hab ich ja auch nichts gemacht, was gehört da hin?

wäre nett, wenn mir einer hierbei helfen könnte.

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
Dr. Faustus

Administrator

Beiträge: 107
Ort: Aßling


New PostErstellt: 13.01.10, 09:13  Betreff: Re: LFSR  drucken  weiterempfehlen Antwort mit Zitat  

    Zitat: blubbblubb
    hmm so ganz passt mir meine lösung aber noch nicht:

    1.momentan lese und schreibe ich auf Y im process , aber in der entity hat Y den mode out, das heißt ich darf auf Y nur schreiben.
--> stimmt!
ich könnte ja den mode buffer oder inout verwenden, dann könnte ich auf Y sowohl lesen als auch schreiben, insofern ich das richtig verstanden habe.

    Zitat: blubbblubb
    2. ich muss irgendwas mit der anweisung " Y <= " die in der architecture die nach dem "begin" und vor dem "process" steht machen, das in der klausur fest vorgegeben ist, damit hab ich ja auch nichts gemacht, was gehört da hin?
Deklariere noch ein zweites Signal (z.B. y_int) und ersetze alle y im prozess durch diese. Anmschließend y <= y_int außerhelb des prozesses. Somit kann dann auch y als out bleiben.

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
blubbblubb
Junior-Mitglied


Beiträge: 10

New PostErstellt: 13.01.10, 13:47  Betreff: Re: LFSR  drucken  weiterempfehlen Antwort mit Zitat  

also müßte meine lösung dann folgendermaßen aussehen:

entity LFSR is
port( Clk: in std_ulogic;
Rst: in std_ulogic;
Y: out bit_vector(7 downto 0)
);
end LFSR

architecture Functionality of LFSR is

signal X: bit;
signal Y_Vector: bit_vector(7 downto 0);

begin
Y <= Y_Vector;
lfsr_proc: process(Clk, Rst)
begin
if Rst = '1' then
Y_Vector <= "01011011";
elsif Clk'Event and Clk = '1' then
X <= (Y(0) xor Y(2)) xor Y(4);
Y_Vector <= Y_Vector srl 1;
Y_Vector(7) <= X ;
end if;
end process;
end architecture Functionality;


ist diese lösung jetzt komplett richtig?
und wenn ja, ich kann mir nicht so genau vorstellen wie das programm so durchläuft, hab bisher nur mit java und assembler programmiert.
also nehmen wir an ich will das fünf durchläufe gemacht werden, also dass das register 5 mal verschoben wird.
beim ersten mal wenn der programmcounter im architecture teil ist hat Y_Vector nehm ich mal an den Defaultwert "00000000" danach befindet sich der programcounter im begin teil und weist Y <= Y_Vector zu, so dass Y den Wert "00000000" hat. nun wird aber zunächst Rst das signal 1 gegeben und Y_Vector hat den wert "01011011 nun ist der process beendet da eine if anweisung erfüllt wurden.
danach wird die architecture ein zweites mal aufgerufen (2.durchlauf) nun erhält Y <= den wert "01011011" weil zuletzt Y_Vector diesen wert hatte. und das geht dann so weiter.
somit wird Y erst bei einem erneuten aufruf der architecture aktualisiert. somit hat Y beim zweiten durchlauf den wert den Y_Vector beim ersten durchlauf hatte. Somit hingt Y immer um einen durchlauf hinterher, oder?

das ist irgendwie komisch, weil wenn ich sag ich mal in java programmieren würde würd ich ja zum schluss Y <= Y_Vector zuweisen und nicht zu beginn.


[editiert: 13.01.10, 13:51 von blubbblubb]
nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
Dr. Faustus

Administrator

Beiträge: 107
Ort: Aßling


New PostErstellt: 21.01.10, 13:54  Betreff: Re: LFSR  drucken  weiterempfehlen Antwort mit Zitat  

Das signal X muss innerhalb des prozesses als Variable und nicht übergeordnet als signal deklariert sein.

Du solltest den code mal simulieren. Damit lernt mann am besten.

cu

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
Sortierung ndern:  
Anfang   zurück   weiter   Ende
Seite 1 von 1
Gehe zu:   
Search

powered by carookee.com - eigenes profi-forum kostenlos

Design © trevorj