Forum: FPGA, VHDL & Co. zwei std_logic_vector dividieren


von snoopy (Gast)


Lesenswert?

hi leute,

schreib grad unter xilinx 9.2 für nen sparta 3.
ich hab zwei takte die ich über den clock abzählen lasse, daher hab ich 
dann
zwei std_vectoren.
jetzt will ich das taktverhältnis ausrechnen lassen, also die zwei 
std_logic_vec dividieren. jedoch klappt das nicht so recht. auch mit 
conv_integer klappts nicht.

hat jemand ne idee diesbezüglich. oder vielleicht kehrwertbildung?
aber wie stell ich das an, bring mir auch bei constantenteilung den 
error:

ERROR:HDLParsers:808 / can not have such operands in this context.

danke schon mal

von Rick Dangerus (Gast)


Lesenswert?

Also zwei std_logic_vector zu dividieren geht ja schon mal gar nicht.
Ein std_logic_vector ist nur ein Anordnung von Bits. Die müßte zum 
Rechnen z.B. in unsigned gewandelt werden. Siehe auch 
Rechnen in VHDL: Besser: Rechnen mit numeric std.

Aber: Deine Division geht nur mit Divisoren die Potenz von 2 sind 
(2,4,8,16,...), weil die Synthesetools noch nicht so schlau sind.

Also, entweder für die Divisorfrequenz was "krummes" nehmen z.B. 2^22 = 
4194304 (siehe auch Baudratenquarz), oder die Division durch das 
Verfahren aus der Grundschule (Zählen, wie oft man subtrahieren kann) 
realisieren.

Dabei leistet eine state-Maschine gute Dienste.

Rick

von snoopy (Gast)


Lesenswert?

dank dir für den tipp

werd mich nochmal drübersetzen

ciao

von Gast (Gast)


Lesenswert?

Du solltest den Wizzard nutzen, um einen Divider zu instanziieren. Der 
kriegt 2 std_logics rein und gibt i.d.R. 2 ab: Das Ergebnis und den 
Rest. Du musst natürlich VOR Anlegen des Vektors die Skalierung 
einbauen. Beispiel 20 Bit / 20 Bit Teiler bei dem maximal 1 Bit 
Ergebniss rauskommen würde (da Wert < Teiler) :

Wert    (19 downto 0) <= "10110 ...... 001";
Teiler  (19 downto 0) <= "010020.....11010";
Preci   ( 9 downto 0) <= "0000000000";

(port map vom Divider=
A <= Wert & Preci,
B <= Teiler,
R <= Rest,
E <= Ergebnis;

Der Ergebnisvektor belegt maximal die 10 Bit der mit "Preci" vorgegbenen 
Präzision und stellt die 100%-Zahl mit Faktor 1024 dar. Kannst auch 
vorher noch mit 200 multiplizieren, dann Teilen, 1 Addieren und dann 
wieder durch 2, dann hat Dein Ergebnisvektor exakt die Prozentzahl 
intus. Dann reichen 7 bit.

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
Noch kein Account? Hier anmelden.