www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Problem bei VHDL-Klausur


Autor: cpld (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe seit diesem Semester VHDL, jetzt hab ich mir mal ne alte Klausur
(http://www.8ung.at/gerschi/studikram/Prog_Baustein...)
von unserem Prof angeschaut und da kam mir dass kalte Grausen weil ich
nicht weiß wie ich seine Aufgaben lösen soll.

Es fängt schon bei der 1. Aufg an:

entity Quersumme is
generic (n: integer := 16);
port (y: in Bit_vector(n-1 downto 0);
z: out integer range 0 to n
);
end Quersumme;

architecture Behavior1 of Quersumme is
subtype BitCount is integer range 0 to n;
begin
QS:process(y)
variable Tmp : BitCount := 0;
begin
for i in 0 to n-1 loop
if y(i) = '1' then
Tmp := Tmp + 1;
next;
end if;
end loop;
z <= Tmp;
end process;
end behavior1;

Dass Problem liegt glaub ich bei der If-Schleife, dir wird zu oft
durchlaufen.

Falls jemand ne Lösung und ein Programm für VHDL-Dummies weiß wäre ich
dankbar wenn er was posted.


Danke

Autor: Alban (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beschreib doch mal was dein if-statement machen soll und dann überprüfe
was es wirklich macht.

Gruß

Alban

Autor: cpld (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also wenns ne 1 ist wird temp erhöht

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso besorgst Du Dir nicht einen VHDL-Simulator und versuchst das
Programm/die Programme zu debuggen?
Ansonsten glaube ich, daß Du Tmp nicht an die Variable z zuweisen
kannst, weil es verschiedene Typen sind. Lass den SubType weg und
verwende nur integer range 0 to n.

Klaus

Autor: cpld (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der subtype ist halt laut Aufgabenstellung erwünscht, debuggen würde ich
gern wenn ich n gescheites Tool hätte, mit Xilinx ist dass ein ganz
schöner scheiß

Autor: Egal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Tmp wird nie auf 0 zurückgesetzt.
D.h. bei jeder Änderung von y wird dem alten Tmp-Wert die Anzahl Einsen
nochmals dazuaddiert. (Innerhalb vom definierten range)

Schreibe mal nach der Zeile "Z <= Tmp;"
noch ein " Tmp := 0; ".

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für die Synthese ist es wahrscheinlich noch besser das Null-Setzen vor
der for-Schleife zu machen.
Könnte sein daß der Compiler nicht intelligent genug um zu merken daß
Tmp immer 0 ist, wenn der Prozess startet.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Modelsim??!

Autor: cpld (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also komm bei der Klausur auf keinen grünen Zweig, bin jetzt schon den
ganzen Mittag dran und blicks keinen Meter, wenn ich dann mal was
simulieren will, bekomm ich nur Fehlermeldungen

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schick uns mal die fehlermeldung

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HM, ich bin mir nicht sicher, ob bei jedem aufruf des Processes tmp auch
den Initwert 0 bekommt. Besser du verzchtest auf den initwert bei der
deklaration und setzt tmp vor der schleife immer auf '0'. Next
innerhalb eines If ... end if hab ich auch noch nie ausprobiert,
scheint mir irgenwie "unkosher".


Also folgend siehts IMHO besser aus:

entity Quersumme is
generic (n: integer := 16);
port (
 y: in Bit_vector(n-1 downto 0);
 z: out integer range 0 to n);
end entity Quersumme;

architecture Behavior1 of Quersumme is
  subtype BitCount is integer range 0 to n;

begin
 QS:process(y)
   variable Tmp : BitCount;
   begin
   tmp := 0;
   for i in 0 to n-1 loop
    if y(i) = '1' then
     Tmp := Tmp + 1;
    end if;
   end loop;
  z <= Tmp;
 end process QS;
end architecture behavior1;

Autor: cpld (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
also mit Code von FPGAKüchle unter XILINX:


======================================================================== 
=
WARNING:Xst:1989 - Unit <Quersumme>: instances
<Madd__n0017_Mxor_Result<2>>, <Madd__n0017_Mxor_Result<3>> of unit
<LPM_XOR2_1> are equivalent, second instance is removed
WARNING:Xst:1989 - Unit <Quersumme>: instances
<Madd__n0017_Mxor_Result<2>>, <Madd__n0017_Mxor_Result<4>> of unit
<LPM_XOR2_1> are equivalent, second instance is removed

Optimizing unit <Quersumme> ...

Process "Synthesize" completed successfully

Started : "Translate".
WARNING:ProjectMgmt -
"D:/Programme/VHDL-Test/Quersumme/Quersumme.ngr" line 0 duplicate
design unit: 'Module|Quersumme'

Command Line: ngdbuild -intstyle ise -dd _ngo -i -p xc9500
Quersumme.ngc
Quersumme.ngd

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, seh ich erst mal kein problem, oder drückt mir den sandmann schon
auf die Augen?.

Scheint aber achlecht zu optimieren, sollte man wohl per hand die
halbadder setzten und Kaskadieren. Aber das vielleicht aufgabe 10.

Autor: cpld (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@FPGAküchle

ja die blöden Fehlermeldungen wenns dann trotzdem läuft verwirren einen
Anfänger total.

Ich hab hauptsächlich bei for-Schleifen, wie wandle ich z. B. eine
integer Zahl in nen Vektor um etc.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.