2017-07-27 6 views
1

Angenommen, ich habe ein Alias ​​für aa einzelnes Bit oder die Anzahl der Bits in einem std_logic_vector erklärt wie folgt aus:Get Position oder einen Bereich von Alias ​​

signal CR : std_logic_vector(7 downto 0); 
alias CR_ARM : std_logic is CR(0); 
alias CR_PS : std_logic_vector(3 downto 0) is CR(7 downto 4); 

Wie kann ich die Reichweite oder die Position der Alias-Zugriff wie :

singal tmp : std_logic_vector(7 downto 0); -- output bus vector 
tmp(CR_ARM'range) <= CR_ARM; -- does not compile 
+3

'CR_ARM' ist ein Skalar (' std_logic') => kein Bereich. –

+1

Ich wette, er will, dass das Attribut zurückkommt, an den der Index von CR 'CR_ARM' gekoppelt ist. Ich denke nicht, dass das möglich ist. Ich würde einen anderen Ansatz versuchen, zum Beispiel über einen Satz von Konstanten, die Bit-Mappings anzeigen. – JHBonarius

+0

* CR_ARM' ist ein Skalar ('std_logic') => kein Bereich *. std_logic ist ein Skalartyp, ein Zeichenaufzählungstyp. Die Unterscheidung besteht zwischen einem eingeschränkten Bereich von geordneten Werten und Indexeinschränkungen, die Elemente eines Array-Objekts spezifizieren. Ein Objekt eines Skalartyps hat einen möglichen Bereich von Werten, aber keinen Elementindexbereich. "Bereich" ist ein Array-Attribut und kein Attribut eines Typs oder eines Objekts. IEEE Std 1076-2008 5. Typen, 5.1 Allgemein, 16.2.3 Vordefinierte Attribute von Arrays. – user1155120

Antwort

1

Bereich ist nur für Array-Typen definiert. Auch wenn VHDL-2017 Bereiche für Skalartypen hinzufügt, löst es Ihr Problem nicht, da Sie wissen möchten, für welches Bit der Alias ​​erstellt wurde.

Aliase sind in VHDL transparent. Es gibt keinen Mechanismus, um über Aliase nachzudenken.

könnten Sie diese Abhilfe verwenden, die nicht sehr schön aussieht:

signal CR : std_logic_vector(7 downto 0); 
alias CR_ARM : std_logic_vector is CR(0 downto 0); 

signal tmp : std_logic_vector(7 downto 0); -- output bus vector 

-- now a slice name works 
tmp(CR_ARM'range) <= CR_ARM; 

Ihr zweites Beispiel wird nicht wie erwartet funktionieren. Sie sollten den Alias ​​mit denselben Bereichsbeschränkungen deklarieren, anderenfalls werden Sie andere Bits zuweisen, wenn Sie CR_PS'range verwenden.

Verwandte Themen