Hallo, hab mal ne Frage. Ich möcht gerne eine 24 bit Zahl durch 128 teilen. da 128 ein vielfaches von 2 is, heißt es ja dass die 24 bit zahl um acht stellen nach rechts verschoben werden muss. Wie genau implementiert man, dass die bits alle richtig verschoben werden.Danke.
Mario schrieb: > Ich möcht gerne eine 24 bit Zahl durch 128 teilen signed oder unsigned? > Wie genau implementiert man, dass die bits alle richtig verschoben werden. Man schreibt (mit den passenden Datentypen) einfach ergebnis <= wert/128; Den Rest macht der Synthesizer...
Ich würde nur 7 Stellen wegstreichen und davor gfs auch noch runden.
Hallo, Danke für die Antwort, ich wills lieber mit der Verschiebefunktion probieren. Dazu hab ich folgendes gemacht:
1 | if div_counter = "1001" then |
2 | div_counter <= (others => '0'); |
3 | else
|
4 | for i in 1 to 23 loop |
5 | freq(i-1) <= freq(i); |
6 | end loop; |
7 | end if; |
Erst wollte ich einen Dividierer über den core generator des Spartan drei generieren, aber er nimmt zuviele Ressourcen weg. Den zähler zählt bei jeder steigenden Flanke. Sobald er die 8 überschritten hat, soll er null werden, ansonsten soll er halt den Wer um 8 STellen nach rechts verschieben. aber irgenwie klappt das nicht so ganz. Danke für euere Hilfe.
Mario schrieb: > Danke für die Antwort, ich wills lieber mit der Verschiebefunktion > probieren. Du hast meinen Post nicht gelesen? Oder nicht verstanden? DAS MACHT DER SYNTHESIZER von ganz allein. Zudem muss da gar nichts geschoben werden. Sondern da wird auf dem FPGA lediglich etwas ein wenig anders verdrahtet. Und aus diesem Grund ist der VHDL Code unnötig und vor allem unnötig kompliziert. > Den zähler zählt bei jeder steigenden Flanke. Sobald er die 8 > überschritten hat, soll er null werden, Also nach 9 Takten? Oder Denkfehler? > ansonsten soll er halt den Wer um 8 STellen nach rechts verschieben. Warum verschiebt er dann den Wert nicht einfach mit jedem Takt um 1 nach rechts? > aber irgenwie klappt das nicht so ganz. Du DENKST falsch. Du denkst in Software. Beantworte die Frage: wie würdest du deine SCHALTUNG mit Zählern, Schieberegistern, Logischen Verknüpfungen und Flipflops aufbauen? Kurz: vergiss einfach C oder Basic oder sonstwas. Was du mit VHDL machst, ist Hardware... > aber irgenwie klappt das nicht so ganz. Wie wäre es, wenn du mal den ganze Quelltext hier als VHDL-Datein anhängst?
Ui, Lothar hat die Fassung verloren. :-) Ist ja auch zu schlimm mit den Möchtegern VHDl-ern
Dass man binär nicht dividieren muss sondern schiebt, war mit schon als 12Jähriger klar und beim ersten PLD mit 19 an der Uni habe ich direkt umverdrahtet, statt zu Schieben und das alles, ohne, dass es mir einer gesagt hätte. Sowas ist augenscheinlich klar. Auch das mit dem Runden war mir sofor klar. Frage an den TE: Wieviel muss Du addieren, bevor du durch 128 teilst?
Jaro schrieb: > Dass man binär nicht dividieren muss sondern schiebt, war mit schon als > 12Jähriger klar [...] Sowas ist augenscheinlich klar. > > Auch das mit dem Runden war mir sofor klar. Fein! Du hast unsere volle Bewunderung! Aber zurück zum Thread: Das Problem beim TE liegt viel tiefer und wurde von Lothar (et.al.) spätestens bei der vierten oben veröffentlichten VHDL-Zeile klar erkannt: Er denkt in sequenzieller Software und nicht in paralleler Hardware.
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.