zwei std_logic_vector dividieren

Gast #844248
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
Gast #844280
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
Gast #845037
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren