Hi, ich habe einen Addierer mit 2Eingängen. Der eine Eingang bekommt von Außen neue Daten, der andere soll das Ergebnis der vorherigen Addition sein. WIe implementiere ich das in VHDL? process (CLOCK) begin if (clock'event and clock='1') then OUT_ADD <=IN1_ADD + TEMP; TEMP:=OUT_ADD; end if; end process; so gehts nicht. Bekomme da Syntax fehler. Wie mache ich das genau, damit das funktioniert? Als was muss ich TEMP deklarieren? Ich brauche ja irgendwie nen Zwischenspeicher, geht das mit Variablen? Bin neu in VHDL und ist keine leichte Umstellung von C auf VHDL. Allein die Denkweise ist ja ne komplett andere Vielen Dank mfG
@ ffjaro (Gast) >ich habe einen Addierer mit 2Eingängen. >Der eine Eingang bekommt von Außen neue Daten, der andere soll das >Ergebnis der vorherigen Addition sein. Das nennt man Akkumulator.
1 | process (CLOCK) |
2 | begin
|
3 | if (clock'event and clock='1') then |
4 | OUT_ADD <=OUT_ADD + IN_ADD; |
5 | end if; |
6 | end process; |
>Bin neu in VHDL und ist keine leichte Umstellung von C auf VHDL. Allein >die Denkweise ist ja ne komplett andere Nicht wahr?! Parallel Denken und Arbeiten. Das was Frauen angeblich so gut können . . . ;-) MfG Falk
Hi, danke für die Antwort. Wenn ich das so versuche, dann bekomme ich diesen Fehler: "Parameter OUT_ADD of mode out can not be associated with a formal parameter of mode in." Wenn ich das auf "inout" stelle ist dieser Fehler weg, jedoch an der Stelle wo PORT MAP gemacht wird kann ich dann den Ausgang nicht mehr an meinen Ausgang der übergeordneten Komponente zuordnen. Und nu? mfG Vielen Dank
OUT_ADD_int definieren, intern OUT_ADD_int verwenden und nach außen
1 | OUT_ADD <= OUT_ADD_int; |
machen. Rick
Dankeschön für die schnelle Antwort. Als was muss ich es denn definieren? Als Variable ? Und an welcher Stelle im Quellcode muss das stehen?
1 | process (CLOCK) |
2 | |
3 | begin
|
4 | if (clock'event and clock='1') then |
5 | |
6 | OUT_ADD_int <=OUT_ADD + IN1_ADD; |
7 | OUT_ADD <=OUT_ADD_int ; |
8 | |
9 | end if; |
10 | end process; |
VIelen Dank mfG
Hab das jetzt mit einer Variable versucht zu machen :
1 | process (CLOCK) |
2 | variable OUT_ADD_int : std_logic_vector(31 downto 0); |
3 | begin
|
4 | |
5 | if (clock'event and clock='1') then |
6 | |
7 | OUT_ADD_int :=OUT_ADD + IN1_ADD; |
8 | OUT_ADD <=OUT_ADD_int; |
9 | |
10 | end if; |
11 | end process; |
Bekomme jetzt aber folgende Fehlermeldung: Parameter OUT_ADD of mode out can not be associated with a formal parameter of mode in. Wie bekomme ich das zum laufen, so dass er wie oben beschrieben arbeitet? Vielen Dank mfG
@ ffjaro (Gast) >Hab das jetzt mit einer Variable versucht zu machen : LASS DIE FINGEER VON VARIABLEN! http://www.mikrocontroller.net/articles/VHDL
1 | -- oben vor begin als normales signal deklarieren
|
2 | |
3 | signal OUT_ADD_int : std_logic_vector(31 downto 0); |
4 | |
5 | -- den process nach begin
|
6 | |
7 | process (CLOCK) |
8 | begin
|
9 | |
10 | if (clock'event and clock='1') then |
11 | |
12 | OUT_ADD_int <=OUT_ADD_int + IN1_ADD; |
13 | |
14 | end if; |
15 | end process; |
16 | |
17 | -- parallele (concurrent) Anweisung
|
18 | |
19 | OUT_ADD <=OUT_ADD_int; |
>Wie bekomme ich das zum laufen, so dass er wie oben beschrieben >arbeitet? Indem du dir mal ein paar Grundlagen anschaust, anstatt planlos rumzustochern. Ports vom Typ out kann man nicht lesen, nur schreiben. Inout ist bidirektional und geht hier meist schief. Buffer war mal dafür vorgesehen, sollte aber aus diversen anderen Gründen nicht verwendet werden. Die saubere Lösung heisst, ein Signal in der Entity deklariern, nutzen und einfach auf den out Port zuweisen. MFG Falk mfG
Vielen Dank für die ausführliche Antwort. Hatte es mit Variablen hinbekommen. Kam das gleiche raus. Was ist denn der Grund Variablen nicht zu benutzen? In deinem Link ist mir das nicht so ersichtlich geworden. Vielen Dank mfG
@ ffjaro (Gast) >Hatte es mit Variablen hinbekommen. Kam das gleiche raus. Nochmal extra für dich. LASS DIE FINGER VORERST VON VARIABLEN!!! >Was ist denn der Grund Variablen nicht zu benutzen? >In deinem Link ist mir das nicht so ersichtlich geworden. http://www.mikrocontroller.net/articles/VHDL Ist dort jetzt hoffentlich besser beschrieben. MFG Falk
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.