Who can explain the bit'pos for me?

Guest
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
 
threeinchnail@gmail.com 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/vhdl-ieee/TUTORIAL/IEEE/HTML/1076_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.
 
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:
threeinchnail@gmail.com 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/vhdl-ieee/TUTORIAL/IEEE/HTML/1076_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 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
 
I got it. Thank you all very much ^_^

D Stanford wrote:
threeinchnail@gmail.com 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
 
D Stanford a écrit :

threeinchnail@gmail.com 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.
 
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.
 

Welcome to EDABoard.com

Sponsor

Back
Top