Go Back   Velocity Reviews > Newsgroups > VHDL
User Name
Password
Register FAQ Members List Calendar Search Today's Posts Mark Forums Read

Reply

VHDL - Who can explain the bit'pos for me?

 
Thread Tools Search this Thread
Old 06-28-2006, 10:10 PM   #1
Default Who can explain the bit'pos for me?


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
  Reply With Quote
Old 06-29-2006, 08:16 AM   #2
Hubble
 
Posts: n/a
Default Re: Who can explain the bit'pos for me?


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.

  Reply With Quote
Old 06-29-2006, 09:56 AM   #3
threeinchnail@gmail.com
 
Posts: n/a
Default Re: Who can explain the bit'pos for me?

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:
> 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.


  Reply With Quote
Old 06-29-2006, 01:27 PM   #4
D Stanford
 
Posts: n/a
Default Re: Who can explain the bit'pos for me?


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

  Reply With Quote
Old 06-29-2006, 01:43 PM   #5
threeinchnail@gmail.com
 
Posts: n/a
Default Re: Who can explain the bit'pos for me?

I got it. Thank you all very much ^_^

D Stanford wrote:
> 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


  Reply With Quote
Old 06-29-2006, 03:36 PM   #6
john Doef
 
Posts: n/a
Default Re: Who can explain the bit'pos for me?


D Stanford a écrit :

> 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.

  Reply With Quote
Old 06-29-2006, 06:40 PM   #7
D Stanford
 
Posts: n/a
Default Re: Who can explain the bit'pos for me?


> > 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.

  Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump