Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > VHDL > How to do the shift bit operation in Array

Reply
Thread Tools

How to do the shift bit operation in Array

 
 
ZHIQUAN
Guest
Posts: n/a
 
      01-25-2007
type B_Matrix is array (0 to 3) of std_logic_vector(15 downto 0);
signal MatrixB : B_Matrix :=(others =>(others=>'0'));

For example MatrixB has some values {"1000001010101010",
"1000001010111010",..........}

Now I want to get the first bit of MatrixB(2) to give variable ad like
that: ad := MatrixB(2, 15); It doesn't work. Sounds like I use the
wrong grammar. Does anybody know how to do that.

One more thing, Can I do the operation like :

d2Rkk is signed(17 downto 0):= (others=>'0');

d2Rkk (12 downto 0) :=signed(MatrixR(2, 15 downto 3));

It looks like if the variable is an array type, the element of the
array cannot do the normal operation as if they are independent ones. I
mean if MatrixR is std_logic_vector (15 downto 3), I can just do d2Rkk
(12 downto 0) :=signed(MatrixR( 15 downto 3)); Where I can find some
examples for array operations ? Thanks.

 
Reply With Quote
 
 
 
 
Andy
Guest
Posts: n/a
 
      01-25-2007
You index an array of arrays (slv is an array) as MatrixB(2)(15), not
(2,15).
Two-dimensional arrays are allowed in vhdl, but not synthesizable.
Arrays of arrays are allowed and synthesizable.

Andy

On Jan 24, 6:01 pm, "ZHIQUAN" <(E-Mail Removed)> wrote:
> type B_Matrix is array (0 to 3) of std_logic_vector(15 downto 0);
> signal MatrixB : B_Matrix :=(others =>(others=>'0'));
>
> For example MatrixB has some values {"1000001010101010",
> "1000001010111010",..........}
>
> Now I want to get the first bit of MatrixB(2) to give variable ad like
> that: ad := MatrixB(2, 15); It doesn't work. Sounds like I use the
> wrong grammar. Does anybody know how to do that.
>
> One more thing, Can I do the operation like :
>
> d2Rkk is signed(17 downto 0):= (others=>'0');
>
> d2Rkk (12 downto 0) :=signed(MatrixR(2, 15 downto 3));
>
> It looks like if the variable is an array type, the element of the
> array cannot do the normal operation as if they are independent ones. I
> mean if MatrixR is std_logic_vector (15 downto 3), I can just do d2Rkk
> (12 downto 0) :=signed(MatrixR( 15 downto 3)); Where I can find some
> examples for array operations ? Thanks.


 
Reply With Quote
 
 
 
 
Rob Dekker
Guest
Posts: n/a
 
      01-25-2007

"Andy" <(E-Mail Removed)> wrote in message news:(E-Mail Removed) ups.com...
....
> Two-dimensional arrays are allowed in vhdl, but not synthesizable.
> Arrays of arrays are allowed and synthesizable.


Multi-dimensional arrays in VHDL should be synthesizable.
Which tool did you find that does not support that ?

Rob


 
Reply With Quote
 
Andy
Guest
Posts: n/a
 
      01-25-2007
To be honest, I have not tried multidimensional arrays in a long time,
but synplicity did not support it, and I don't think they do now. Have
you found any that do?

I always use arrays of arrays (of arrays of...) . It gives you more
flexibility anyway.

matrix(2)(15 downto <= a_byte;

matrix(3 downto 1) <= three_words;

matrix(3 downto 1)(15 downto <= no_worky; -- three_bytes won't work

Those operations don't work with multidimensional arrays.

Besides, any multidimensional array can be represented as an array of
arrays (of...).

Andy

On Jan 24, 6:44 pm, "Rob Dekker" <(E-Mail Removed)> wrote:
> "Andy" <(E-Mail Removed)> wrote in messagenews:(E-Mail Removed) oglegroups.com......
>
> > Two-dimensional arrays are allowed in vhdl, but not synthesizable.
> > Arrays of arrays are allowed and synthesizable.Multi-dimensional arrays in VHDL should be synthesizable.

> Which tool did you find that does not support that ?
>
> Rob


 
Reply With Quote
 
ZHIQUAN
Guest
Posts: n/a
 
      01-25-2007

So I cannot use it like MatrixA((17) <=MatrixB(1)(15) ´╝čError: parse
error, unexpected COLON

On 25 Jan, 16:23, "Andy" <(E-Mail Removed)> wrote:
> To be honest, I have not tried multidimensional arrays in a long time,
> but synplicity did not support it, and I don't think they do now. Have
> you found any that do?
>
> I always use arrays of arrays (of arrays of...) . It gives you more
> flexibility anyway.
>
> matrix(2)(15 downto <= a_byte;
>
> matrix(3 downto 1) <= three_words;
>
> matrix(3 downto 1)(15 downto <= no_worky; -- three_bytes won't work
>
> Those operations don't work with multidimensional arrays.
>
> Besides, any multidimensional array can be represented as an array of
> arrays (of...).
>
> Andy
>
> On Jan 24, 6:44 pm, "Rob Dekker" <(E-Mail Removed)> wrote:
>
>
>
> > "Andy" <(E-Mail Removed)> wrote in messagenews:(E-Mail Removed) oglegroups.com......

>
> > > Two-dimensional arrays are allowed in vhdl, but not synthesizable.
> > > Arrays of arrays are allowed and synthesizable.Multi-dimensional arrays in VHDL should be synthesizable.

> > Which tool did you find that does not support that ?

>
> > Rob- Hide quoted text -- Show quoted text -


 
Reply With Quote
 
ZHIQUAN
Guest
Posts: n/a
 
      01-25-2007
I cannot do like this: MatrixA(0 to 3)(17 downto 16)<= (others=>
MatrixB(0 to 3)(15));

MatrixA is array(integer range 0 to 3) of std_logic_vector (17 downto
0);
MatrixB is array(integer range 0 to 3) of std_logic_vector(15 downto
0);

Besides, I cannot use ":" to replace (0 to 3).

 
Reply With Quote
 
Rob Dekker
Guest
Posts: n/a
 
      01-25-2007

"Andy" <(E-Mail Removed)> wrote in message news:(E-Mail Removed) oups.com...
> To be honest, I have not tried multidimensional arrays in a long time,
> but synplicity did not support it, and I don't think they do now. Have
> you found any that do?


Yes. Leonardo for sure. I wrote the synthesizer for it.
And Quartus II does, since is has a Verific front-end.
I would be surprised if Synplicity does not support it (at least now)

>
> I always use arrays of arrays (of arrays of...) . It gives you more
> flexibility anyway.
>
> matrix(2)(15 downto <= a_byte;
>
> matrix(3 downto 1) <= three_words;
>
> matrix(3 downto 1)(15 downto <= no_worky; -- three_bytes won't work
>
> Those operations don't work with multidimensional arrays.
>
> Besides, any multidimensional array can be represented as an array of
> arrays (of...).



You are right. Array-of-array has everything that 2-dim array has, and more.
I don't know why they even introduced the concept (of multi-dim arrays).
But is is there in the language, so tools should support it.

Rob


 
Reply With Quote
 
Rob Dekker
Guest
Posts: n/a
 
      01-25-2007

"ZHIQUAN" <(E-Mail Removed)> wrote in message news:(E-Mail Removed) oups.com...
>I cannot do like this: MatrixA(0 to 3)(17 downto 16)<= (others=>
> MatrixB(0 to 3)(15));
>
> MatrixA is array(integer range 0 to 3) of std_logic_vector (17 downto
> 0);
> MatrixB is array(integer range 0 to 3) of std_logic_vector(15 downto
> 0);


So you want to assign a few bits of each of the 4 elements of MatrixA
You cannot do that with the 0 to 3 slice as far as I know.
Please use a for-loop.

>
> Besides, I cannot use ":" to replace (0 to 3).
>


What made you think that the ":" does anything other than give you a syntax error ?



 
Reply With Quote
 
Mike Treseler
Guest
Posts: n/a
 
      01-26-2007
Rob Dekker wrote:

> Yes. Leonardo for sure. I wrote the synthesizer for it.


Congratulations.
That's the first synthesizer I used that
really covered VHDL-87.

> And Quartus II does, since is has a Verific front-end.


Interesting. Do you think the register duplication
issue we discussed in another thread could ever be fixed
in the front end, or will that always have to be
taken out by the fitter?

-- Mike Treseler


 
Reply With Quote
 
Rob Dekker
Guest
Posts: n/a
 
      01-26-2007

"Mike Treseler" <(E-Mail Removed)> wrote in message news:(E-Mail Removed)...
> Rob Dekker wrote:
>
>> Yes. Leonardo for sure. I wrote the synthesizer for it.

>
> Congratulations.
> That's the first synthesizer I used that
> really covered VHDL-87.


Thanks !
The first implementation I did was quite terrible (back in '91-92), but after two rewrites it got pretty good..
Those were the days..

>
>> And Quartus II does, since is has a Verific front-end.

>
> Interesting. Do you think the register duplication
> issue we discussed in another thread could ever be fixed
> in the front end, or will that always have to be
> taken out by the fitter?


I am sorry Mike. Which thread was that ?

>
> -- Mike Treseler
>
>



 
Reply With Quote
 
 
 
Reply

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 Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
Left Shift / Right Shift Operators Santosh Nayak C Programming 16 11-30-2006 05:10 PM
Does bit operation always work more efficiently than math operation? david ullua C Programming 13 03-01-2006 11:02 PM
Shift - byte[] buf shift Roberto Gallo Java 3 01-27-2004 04:26 PM
left shift then right shift an unsigned int Wenjie C++ 3 07-11-2003 08:22 PM



Advertisments