Zuweisung von Signalen unterschiedlichen Typs

Gast #1309517
Lesenswert?

Hallo!

Ich habe da ein Problem mit der Zuweisung von Signalen unterschiedlichen 
Typs.

Etwas vereinfacht stellt sich mein Problem wie folgt dar:
1
type A_type is array (0 to 8) of signed(8 downto 0);
2
type B_type is array (0 to 7) of signed(8 downto 0);
3

4
signal A : A_type;
5
signal B : B_type;
6

7
--- ...
8

9
A(0 to 5) <= B(0 to 5);
10

11
-- Fehler: Target type A_type in signal assignment is different from expression type B_type.

Wenn ich die letzte Zeile explizit caste
1
A(0 to 5) <= A_type(B(0 to 5));

bekomme ich den Fehler:
Length of type "A_type" is 9; length of operand is 8.

Daher erscheint es mir so, dass Modelsim in der Anweisung
1
A(0 to 5) <= B(0 to 5);
nicht versteht, dass ich hier jeweils dieselbe Anzahl Signale zuweise.

Weiß jemand eine Lösung?

Gruß,
dito
Gast #1309843
Lesenswert?

Du kannst nicht unterschiedliche Typen zueinander zuweisen, A und B sind 
von verschiedenen Typen.
Du mußt ein Array definieren aus gleichen Typen, z.B.

type ttt is signed(8 downto 0);
type A_type is array (natural range <>) of ttt;

signal A : A_type(8 to 0);
signal B : A_type(7 to 0);

A(5 to 0) <= B(5 to 0);

Oder so ähnlich. Dann werden Elemente vom gleichen Typ ttt zueinander 
zugewiesen.
Moderator (Firma: Titel) Persönliche Seite #1310134
Lesenswert?

dito schrieb:
> Funcktioniert es auch, wenn X eine Konstante ist?
Es funktioniert nur dann, wenn X zum Synthesezeitpunkt konstant ist.
Sei es durch eine Konstante oder ein Generic.
1
  process (b) begin
2
    for i in 0 to 4 loop
3
      A(i) <= B(i);
4
    end loop;
5
  end process;

Oder machs doch gleich so (wie von Klaus Falser schon vorgeschlagen):
1
type C_type is array (natural range <>) of signed(8 downto 0);
2

3
signal A : C_type(0 to 8);
4
signal B : C_type(0 to 7);
5
:
6
  A(0 to 5) <= B(0 to 5);

Allerdings dürfte bei seiner Lösung das
1
  A(5 to 0) <= B(5 to 0);
ins Auge gehen  ;-)

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