Wie heißt die Zuweisung richtig? Ich will bestimmte Bits einer Variablen einer anderen Variablen zuweisen und die nicht benutzten Bits mit dem Bitwert des höchsten Bit füllen. Für die nicht zugewissen Bits kann man mit "other=> "zuweisen. Ich habe mehere Schreibweisen ausprobiert. Die Fehlermeldungen sind immer von dem Typ. The type of the element in aggregate does not correspond to any array type. type vec is record cos: signed (9 downto 0); sin: signed (9 downto 0); end record; variable value,tmp: vec; tmp.cos:= (7 downto 0) =>(value.sin(9 downto 2), others=>value.sin'high); auch verschiedene Klammerungen schlugen fehl. tmp.cos:= (value.sin(9 downto 3),others=>value.(sin'high));
Du musst auch noch angeben, wohin sin(9 downto 2) geschrieben werden soll. Ungetestet, ich habe an dieser Stelle noch nie ranges verwendet, immer nur einzelne Bits: tmp.cos:= ((7 downto 0) => value.sin(9 downto 2),others => value.sin'high);
tmp.cos:= ((7 downto 0)=>value.sin(9 downto 2),others=>(value.sin'high)); ergibt Fehlermeldung: Line 57. parse error, unexpected CLOSEPAR, expecting PIPE or ROW Die Klammern stimmen und ich weiss nicht, was er mit Pipe oder ROW meinen könnte.
das geht tmp.cos :=(value.cos(1),others=>'0'); das geht nicht mehr tmp.cos :=(value.cos(1 downto 0),others=>'0'); Das hätte ich aber erwartet, das es richtig formeliert ist. Gibt es Unterschiede in der VHDL Version für diesen Ausdruck?
Gast
#1402718
Einzelne Bits kann man einem Bereich zuweisen. Das geht: tmp.cos :=(1 downto 0=>'1',others=>'0'); Das geht nicht auch verständlich, weil er keinen Arraytyp erwartet. tmp.cos :=(1 downto 0=>value.sin(1 downto 0),others=>'0'); Doch wie schreibt man so etwas?
Gast
#1403381
Schreib es doch in 2 Zeilen: tmp.cos:= (others=>value.sin(sin'high)); tmp.cos(9 downto 3) := value.sin(9 downto 3);
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.