Unterschied to downto

OP #1251434
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.
Gast #1251438
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.
Moderator (Firma: Titel) Persönliche Seite #1251447
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
1
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:
1
vect : std_logic_vector(0 to 7);
2
vekt : std_logic_vector(7 downto 0);
3
:
4
vekt <= "10000000";
5
vect <= vekt;
Welchen Wert hat vect(7)?
Gast #1251460
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);
#1252276
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 ;)
Moderator (Firma: Titel) Persönliche Seite #1252401
Lesenswert?

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

3
        <--   to_integer(u)  -----  UNSIGNED   <--   unsigned(v)  --------
4
        --- to_unsigned(i,len) -->             --- std_logic_vector(u) -->
5
INTEGER                                                                    STD_LOGIC_VECTOR
6
        <--    to_integer(s)  ---    SIGNED    <---   signed(v)   --------
7
        ---  to_signed(i,len) -->              --- std_logic_vector(s) -->
Gast #1252893
Lesenswert?

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

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

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

Grüsse
Gast #1253153
Lesenswert?

1
function TO_INTEGER(ARG: UNSIGNED) return NATURAL is
2
    constant ARG_LEFT:INTEGER:= ARG'length-1;
3
    alias XXARG:UNSIGNED(ARG_LEFT downto 0) is ARG;
4
    variable XARG:UNSIGNED(ARG_LEFT downto 0); 
5
    variable RESULT: NATURAL:= 0;
6
    variable w : INTEGER:= 1;  -- weight factor
7
begin
8
  if (ARG'length<1) then
9
    assert NO_WARNING
10
    report "numeric_std.TO_INTEGER: null arg"
11
    severity warning;
12
    return 0;
13
    end if;
14
  XARG:= TO_01(XXARG);
15
  if (XARG(XARG'left)='X') then
16
    assert NO_WARNING
17
    report "numeric_std.TO_INTEGER: metavalue arg set to 0"
18
    severity warning;
19
    return 0;
20
    end if;
21
  for i in XARG'reverse_range loop
22
    if XARG (i) = '1' then
23
      RESULT:= RESULT + w;
24
      end if;
25
    if (i /= XARG'left) then w := w + w;
26
      end if;
27
    end loop;
28
  return RESULT;
29
  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 :)
Gast #1253161
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;

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