mikrocontroller.net

Forum: FPGA, VHDL & Co. Unterschied to downto


Autor: Sonke A. (soeni)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein Problem und zwar soll ich den Unterschied zwischen "to" und 
"downto" bei der erstellung eines Bitvektors darstellen. Leider finde 
ich keinen. Welche gibt es denn? Der einzige der mir aufgefallen ist, 
ist, das die Indexierung jeweils andersrum ist.

Autor: A. F. (artur-f) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Der einzige der mir aufgefallen ist, ist, das die Indexierung jeweils >andersrum 
ist.

mehr ist da auch nicht dran.

7 downto 0 -> MSB first

0 to 7 -> LSB first

Autor: Der Forenclown (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist der Unterschied zwischen rot und grün?

Ich finde keinen, beides sind ja Farben.
Der einzige Unterschied ist, dass sie sich in der Farbe unterscheiden.

Aber wo ist nun ein Unterschied? Ich sehen keinen.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Der einzige der mir aufgefallen ist,
> ist, das die Indexierung jeweils andersrum ist.
Ja, und alle Welt betrachtet Zahlen so, dass die höchstwertige Zahl 
(bzw. das höchstwertige Bit) links steht. Das Bit 7 in einem 8Bit Vektor 
ist das MSB. Das Bit 0 ist das LSB.


Welchen Wert hätte Bit 0, wenn
vect : std_logic_vector(0 to 7);
den Wert "1000000" hätte?
Richtig: vect(0) hätte den Wert '1'   :-o
Und das wäre schlicht verwirrend.


Und was käme hier heraus:
vect : std_logic_vector(0 to 7);
vekt : std_logic_vector(7 downto 0);
:
vekt <= "10000000";
vect <= vekt;
Welchen Wert hat vect(7)?

Autor: Sonke A. (soeni)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde schäzten, das vec(7) ne 0 ist, sicher bin ich mir nicht.
(Der Vektor wird doch gedreht oder?)

Danke aber dafür.

Autor: Pauli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst das benutzen, wenn Du Busse gegeneinender drehen willst, z.B. 
wenn es keine echten Busse sondern nur Leitungsbündel sind und ein 
Hansel (welcher konkret Thomas heisst) am Ausgang den Stecker anders 
benannt hat.

output(63 downto 0) <= input(0 to 63);

Autor: Daniel -------- (root)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>und ein Hansel (welcher konkret Thomas heisst) am Ausgang den Stecker >anders 
benannt hat.

hehe :)

Man benutzt downto meistens auch dann, wenn es eigentlich gar nicht
um die Zahlen geht. Man gewöhnt sich dran und benutzt sogut wie immer^^

Deswegen weiss ich jetzt zB nicht mal ob es unsigned(0 to 7) gibt.
Aber wahrscheinlich wird es das auch geben. Wahrscheinlch wird es
auch to_unsigned(int_value, 8) geben. Ohne Garantie, muss ich mal
testen ;)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wahrscheinlch wird es auch to_unsigned(int_value, 8) geben.
Das ist eine 8-Bit Konvertierung aus dem numeric_std Package.
            KONVERTIERUNG                             CAST

        <--   to_integer(u)  -----  UNSIGNED   <--   unsigned(v)  --------
        --- to_unsigned(i,len) -->             --- std_logic_vector(u) -->
INTEGER                                                                    STD_LOGIC_VECTOR
        <--    to_integer(s)  ---    SIGNED    <---   signed(v)   --------
        ---  to_signed(i,len) -->              --- std_logic_vector(s) -->

Autor: Daniel (root) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ne, mir ging es eher umsowas
signal x: unsigned(0 to 7) := "1000" & "0000";
signal i: integer range 0 to 255;

i <= to_integer(x, x'length);

ich würde vermuten, dass i gleich 1 ist.

Grüsse

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das geht nicht:
i <= to_integer(x, x'length);

to_integer nimmt nur 1 Parameter:
i <= to_integer(x);

Kurz mal getestet, Ergebnis: i = 128   :-o

Autor: Danie (root) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
function TO_INTEGER(ARG: UNSIGNED) return NATURAL is
    constant ARG_LEFT:INTEGER:= ARG'length-1;
    alias XXARG:UNSIGNED(ARG_LEFT downto 0) is ARG;
    variable XARG:UNSIGNED(ARG_LEFT downto 0); 
    variable RESULT: NATURAL:= 0;
    variable w : INTEGER:= 1;  -- weight factor
begin
  if (ARG'length<1) then
    assert NO_WARNING
    report "numeric_std.TO_INTEGER: null arg"
    severity warning;
    return 0;
    end if;
  XARG:= TO_01(XXARG);
  if (XARG(XARG'left)='X') then
    assert NO_WARNING
    report "numeric_std.TO_INTEGER: metavalue arg set to 0"
    severity warning;
    return 0;
    end if;
  for i in XARG'reverse_range loop
    if XARG (i) = '1' then
      RESULT:= RESULT + w;
      end if;
    if (i /= XARG'left) then w := w + w;
      end if;
    end loop;
  return RESULT;
  end TO_INTEGER;

interessant, dass hier grundsätzlich downto verwendet wird
alias XXARG:UNSIGNED(ARG_LEFT downto 0) is ARG;

Ok, jetzt weiss man mehr :)

Autor: Danie (root) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
interessant, dass alias andere Zählrichtung verwenden kann.
ARG ist ja unconstrained, sowohl in Arraygrösse wie Richtung.

Ich hab gerade hier keine Möglichkeit zum Testen.
Aber ich meine, dass ich sowas schon mal ausprobiert habe
und es nicht ging.

signal x: std_logic_vector(3 downto 0);
signal y: std_logic_vector(0 downto 3);
y <= x;

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  (0 downto 3)
Das geht wirklich nicht ;-)

>  y <= x;
Das geht. Nur die Vektorbreite muß passen...

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
>>  (0 downto 3)
> Das geht wirklich nicht ;-)

Kommt da nicht einfach ein Vector der Laenge 0 raus?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Kommt da nicht einfach ein Vector der Laenge 0 raus?
Richtig.
Nur kann man damit irgendwie nichts Sinnvolles anfangen  :-/

Freundlicherweise weist eine Warnung auf den Typo hin:
Null range: 0 downto 3

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.