![]() |
|
|
|||||||
![]() |
VHDL - Who can explain the bit'pos for me? |
|
|
Thread Tools | Search this Thread |
|
|
#1 |
|
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 |
|
|
|
|
#2 |
|
Posts: n/a
|
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. |
|
|
|
#3 |
|
Posts: n/a
|
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. |
|
|
|
#4 |
|
Posts: n/a
|
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 |
|
|
|
#5 |
|
Posts: n/a
|
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 |
|
|
|
#6 |
|
Posts: n/a
|
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. |
|
|
|
#7 |
|
Posts: n/a
|
> > 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. |
|