Velocity Reviews > VHDL > Who can explain the bit'pos for me?

# Who can explain the bit'pos for me?

threeinchnail@gmail.com
Guest
Posts: n/a

 06-28-2006
Hello everybody, I have question here about bit'pos. I saw this
function from a place.

function bt_to_natural(bv: in bit_vector) return natural is
variable result : natural:=0;
begin
for index in bv'range loop
result :=result*2+bit'pos(bv(index));
end loop;
return result;
end bv_to_natural;

I am searching the bit'pos on the internet. And I found one
explaination is :
signal 'pos is return the position (number) of the input.
bit' pos('0') would return 0; bit'pos('1') would return 1;
I am a little bit confused about it. I think 'pos should be the
position of the bit. But I take my definition into above function. I
cannot figure it out.

Is there anybody to help me figure it out? Could you give a real
example for me? For example how to convert 10101010 to the integer.
Many thanks.

Zhi

Hubble
Guest
Posts: n/a

 06-29-2006

http://www.velocityreviews.com/forums/(E-Mail Removed) schrieb:

> Hello everybody, I have question here about bit'pos. I saw this
> function from a place.

Consult the VHDL LRM (Language Reference Manual)

http://www.microlab.ch/courses/vlsi/...76_14.HTM#14.1

bit is an enumaration type:

type BIT is ('0', '1'); -- package standard

So bit'pos is a way to convert the type bit to integer:

bit'pos('0')=0
bit'pos('1')=1

Attrributs pos and val can be used to convert enumaration types:
variable c: character;#
variable b: bit;
variable i: integer;

c:=character'val(bit'pos(b)+character'pos('0')); --
character'pos('0')=48 in ASCII character set
b:=bit'val(character'pos(c)-character'pos('0'));

('val is the opposite of 'pos)

Hubble.

threeinchnail@gmail.com
Guest
Posts: n/a

 06-29-2006
Thank you, Hubble. I understand your explanation..
But I am still confused it a little bit. If I take an example of
bit_vector ("10101010"). I want to convert it to integer. According to
the function:
1. result:=0+0;
2 result:=2*0+1;
3 result:=2*1+0;
.........................Does it like that? I think my way is wrong.
Because It definitedly cannot get the expected result.
Could you give me a clear example like that ? Since the function can
convert bitvector to natural, how does it work? Thanks again.

Hubble wrote:
> (E-Mail Removed) schrieb:
>
> > Hello everybody, I have question here about bit'pos. I saw this
> > function from a place.

>
> Consult the VHDL LRM (Language Reference Manual)
>
>
> http://www.microlab.ch/courses/vlsi/...76_14.HTM#14.1
>
> bit is an enumaration type:
>
> type BIT is ('0', '1'); -- package standard
>
> So bit'pos is a way to convert the type bit to integer:
>
> bit'pos('0')=0
> bit'pos('1')=1
>
> Attrributs pos and val can be used to convert enumaration types:
> variable c: character;#
> variable b: bit;
> variable i: integer;
>
> c:=character'val(bit'pos(b)+character'pos('0')); --
> character'pos('0')=48 in ASCII character set
> b:=bit'val(character'pos(c)-character'pos('0'));
>
> ('val is the opposite of 'pos)
>
> Hubble.

D Stanford
Guest
Posts: n/a

 06-29-2006

(E-Mail Removed) wrote:
> Thank you, Hubble. I understand your explanation..
> But I am still confused it a little bit. If I take an example of
> bit_vector ("10101010"). I want to convert it to integer. According to
> the function:
> 1. result:=0+0;
> 2 result:=2*0+1;
> 3 result:=2*1+0;

For it to function properly, bv'range must be max downto 0. It must be
sequencing from MSB to LSB.

with an input bit vector of "1100"

1. index = 0, result = 0*2 + 1 = 1
2. index = 1, result = 1*2 + 1 = 3
3. index = 2, result = 3*2 + 0 = 6
4. index = 3, result = 6*2 + 0 = 12

threeinchnail@gmail.com
Guest
Posts: n/a

 06-29-2006
I got it. Thank you all very much ^_^

D Stanford wrote:
> (E-Mail Removed) wrote:
> > Thank you, Hubble. I understand your explanation..
> > But I am still confused it a little bit. If I take an example of
> > bit_vector ("10101010"). I want to convert it to integer. According to
> > the function:
> > 1. result:=0+0;
> > 2 result:=2*0+1;
> > 3 result:=2*1+0;

>
> For it to function properly, bv'range must be max downto 0. It must be
> sequencing from MSB to LSB.
>
> with an input bit vector of "1100"
>
> 1. index = 0, result = 0*2 + 1 = 1
> 2. index = 1, result = 1*2 + 1 = 3
> 3. index = 2, result = 3*2 + 0 = 6
> 4. index = 3, result = 6*2 + 0 = 12

john Doef
Guest
Posts: n/a

 06-29-2006

D Stanford a écrit :

> (E-Mail Removed) wrote:
> > Thank you, Hubble. I understand your explanation..
> > But I am still confused it a little bit. If I take an example of
> > bit_vector ("10101010"). I want to convert it to integer. According to
> > the function:
> > 1. result:=0+0;
> > 2 result:=2*0+1;
> > 3 result:=2*1+0;

>
> For it to function properly, bv'range must be max downto 0. It must be
> sequencing from MSB to LSB.

It works with any range, doesn't it ?

JD.

D Stanford
Guest
Posts: n/a

 06-29-2006

> > For it to function properly, bv'range must be max downto 0. It must be
> > sequencing from MSB to LSB.

> It works with any range, doesn't it ?
>
> JD.

A good point. It would have been better stated max downto min instead
of 0.

 Thread Tools

 Posting Rules You may not post new threads You may not post replies You may not post attachments You may not edit your posts BB code is On Smilies are On [IMG] code is On HTML code is OffTrackbacks are On Pingbacks are On Refbacks are Off Forum Rules

 Similar Threads Thread Thread Starter Forum Replies Last Post Tim Moor MCSE 7 12-18-2005 03:30 AM Tosh Cisco 4 11-19-2005 03:48 PM bhamoo@gmail.com Cisco 8 02-04-2005 12:35 PM Keung Cisco 1 11-28-2004 11:20 AM Ray Microsoft Certification 1 09-01-2003 02:12 AM

Advertisments