EDAboard.com | EDAboard.eu | EDAboard.de | EDAboard.co.uk | RTV forum PL | NewsGroups PL

slice of signed = unsigned?

Ask a question - edaboard.com

elektroda.net NewsGroups Forum Index - VHDL Language - slice of signed = unsigned?

-DeeT
Guest

Fri May 13, 2011 7:43 pm   



If you take a slice of a signed vector which doesn't include the sign
bit, is that slice considered to be signed or unsigned? Here's an
illustration:

signal v : signed(7 downto 0);
alias a is v(3 downto 0);
variable i : integer;
i := to_integer(a);

In the above scenario, what is the range of possible values for 'i'?
Is it 0 to 15, or -8 to +7?

I ask because a compiler upgrade broke some of my code, by changing
this behavior (which admittedly I shouldn't have counted on either
way!).

Thanks in advance for your thoughts...
-DT

Alexander Bartolich
Guest

Sat May 14, 2011 10:02 pm   



-DeeT wrote:
Quote:
If you take a slice of a signed vector which doesn't include the sign
bit, is that slice considered to be signed or unsigned? Here's an
illustration:

signal v : signed(7 downto 0);
alias a is v(3 downto 0);
variable i : integer;
i := to_integer(a);

IEEE Std 1076-1993 (Revision of IEEE Std 1076-1987), page 75

# 4.3.3.1 Object aliases
# [...]
# The name must be a static name (see 6.1) that denotes an object. The
# base type of the name specified in an alias declaration must be the
# same as the base type of the type mark in the subtype indication (if
# the subtype indication is present); this type must not be a multi-
# dimensional array type. When the object denoted by the name is
# referenced via the alias defined by the alias declaration, the following
# rules apply:
# - If the subtype indication is absent or if it is present and denotes
# an unconstrained array type:
# - If the alias designator denotes a slice of an object, then the
# subtype of the object is viewed as if it were of the subtype
# specified by the slice
# - Otherwise, the object is viewed as if it were of the subtype
# specified in the declaration of the object denoted by the name

Quote:
In the above scenario, what is the range of possible values for 'i'?
Is it 0 to 15, or -8 to +7?

To my understanding the alias is equivalent to a declaration like

signal a: signed(3 downto 0);

--
host -t mx moderators.isc.org

Tricky
Guest

Sun May 15, 2011 12:47 am   



On May 13, 6:43 pm, -DeeT <d...@dt.prohosting.com> wrote:
Quote:
If you take a slice of a signed vector which doesn't include the sign
bit, is that slice considered to be signed or unsigned?  Here's an
illustration:

signal v : signed(7 downto 0);
alias a is v(3 downto 0);
variable i : integer;
i := to_integer(a);

In the above scenario, what is the range of possible values for 'i'?
Is it 0 to 15, or -8 to +7?

I ask because a compiler upgrade broke some of my code, by changing
this behavior (which admittedly I shouldn't have counted on either
way!).

Thanks in advance for your thoughts...
-DT

Signed and Unsigned are two completely different types, so slicing
them just returns a subtype of the base type. But they are similar
types, so you can cast from one type to the other without a conversion
function.

So you could write this instead:

i := to_integer( unsigned(a) );

elektroda.net NewsGroups Forum Index - VHDL Language - slice of signed = unsigned?

Ask a question - edaboard.com

Arabic versionBulgarian versionCatalan versionCzech versionDanish versionGerman versionGreek versionEnglish versionSpanish versionFinnish versionFrench versionHindi versionCroatian versionIndonesian versionItalian versionHebrew versionJapanese versionKorean versionLithuanian versionLatvian versionDutch versionNorwegian versionPolish versionPortuguese versionRomanian versionRussian versionSlovak versionSlovenian versionSerbian versionSwedish versionTagalog versionUkrainian versionVietnamese versionChinese version
RTV map EDAboard.com map News map EDAboard.eu map EDAboard.de map EDAboard.co.uk map Opony