EmbDev.net

Forum: FPGA, VHDL & Verilog Variable cannot be unconstrained-VHDL


Author: dhootha adhi (Company: Student) (gollum)
Posted on:

Rate this post
0 useful
not useful
VHDL
Hi everyone

I have defined an type t11(array of recordtype) in a package A.
I used this package 'A' in another package 'B' by typing "my use 
work.A.all" and proceeded using t11 here as below
In package 'B' body
1.function blah1(c :t11) return t11 is
2.variable prod :t11;
3.begin
4.prod(0) := (0.0,0.0)-- as here i deal with real type

5.for i in 0 to amount-1 loop
6.   prod(i) := blah2(prod (i), c(i) )
7.end loop;
8.return prod;
9 end blah1;

This is just part of my code in the package. and my main file is another 
one.

When i try to simulate the main file i get this error "VARIABLE CANNOT 
BE UNCONSTRAINED" at this line 2 in package B.

I am a bit new to this language and this site too :P. So please help me 
solve this error.Let me know if you need more info :)

Author: Lothar Miller (lkmiller) (Moderator)
Posted on:

Rate this post
0 useful
not useful
> This is just part of my code in the package.
Usually the posted part is the most unuseful one...
Why not attaching the whole code as *.vhd file(s)?

Enclose yourcode with [ vhdl ] and [ /vhdl ]   (but without the blanks)
and you will see some little magic:
  function blah1(c :t11) return t11 is
  variable prod :t11;
  begin
    prod(0) := (0.0,0.0)-- as here i deal with real type

    for i in 0 to amount-1 loop
      prod(i) := blah2(prod (i), c(i) )
    end loop;
  return prod;

> type t11(array of recordtype)
>   variable prod :t11;
This both will lead to the correct answer.
Pls. post the original type definitions of all involved records/types...

> I am a bit new to this language
But you are using a lot of tricky tricks ...   :-o

> When i try to simulate the main file
Hopefully you just want to simulate this, because you will (for sure!) 
not get it synthesized on real hardware...

Author: dhootha adhi (Company: Student) (gollum)
Posted on:
Attached files:

Rate this post
0 useful
not useful
haha. I have no intention of hiding the code :P. As I said I am new to 
this language, so the code is messy and was experimenting on it.I have 
not yet finished the coding fully. The problem lies in mat_ply package.
I have enclosed both the packages here. Please excuse and correct me if 
they look wierd/wrong :P

Author: Lothar Miller (lkmiller) (Moderator)
Posted on:

Rate this post
0 useful
not useful
There's the problem:
 type t11 is array (natural range<>) of comp;
 :
 :
 variable prod1 : t11;

>> "VARIABLE CANNOT BE UNCONSTRAINED"

Give the variable a size and try it this way:
  variable prod1 : t11(0 to c'Length-1);

Author: dhootha adhi (Company: Student) (gollum)
Posted on:

Rate this post
0 useful
not useful
Yo!! absolutely. that solved the error.Thanks:)
I have few more doubts with the code.You have previously mentioned that 
this cannot be synthesized.Is it because I am using real type or 
something else too? I would like to change it learning how to replace 
them with fixed point type(I have seen it on the net).How to use 
trignometry in vhdl? Like i want a tan inverse (or phase angle of a 
complex no.).

Author: Lothar Miller (lkmiller) (Moderator)
Posted on:

Rate this post
0 useful
not useful
> You have previously mentioned that this cannot be synthesized.
Yes.
> Is it because I am using real type ...
Yes.
> I would like to change it learning how to replace them with fixed point
> type(I have seen it on the net).
The fixed_pkg is synthesizeable, because it bases on simple integer 
arithmetics,

> How to use trignometry in vhdl?
Uhmmm, oh, well...
First, lets go some steps backwards...

You must see a FPGA as a heap of combinatorial logic (AND, OR, NAN, 
NOR, XOR...) and registers (Flipflops). Yor task ist to tell the 
synthesizer with VHDL code to assemble those two components (you don't 
have more on the FPGA) in a way they are doing the job you want.

And now there's a very big gap in your way of thinking compared to a 
hardware designers way: you think in mathematics and calculations, the 
hardware guy in registers and rams and logic and (at maximum) a integer 
multiplier. But even a "simple" integer division will turn out as a 
complex demanding task when it has to be implemented on hardware...

So the usual way is: implement those things which must be fast in 
hardware (basic calculations and simple maths), implement the "howto" in 
software and conntect the both of them with a vast statemachine called 
"processor".

Author: dhootha adhi (Company: Student) (gollum)
Posted on:

Rate this post
0 useful
not useful
Thanks for guiding me. I will habituate to your way of approach
Now I am supposed to find the tan inverse. So I have use simple maths 
which comes to mind as taylor's series. I am just afraid that cannot be 
accurate enough(I am not sure until I simulate and compare the results) 
because i couldn't write the whole series of it. Please clarify whether 
going for taylor's series is  a good option or not in the hardware sense

Author: Lothar Miller (lkmiller) (Moderator)
Posted on:

Rate this post
0 useful
not useful
> I am just afraid that cannot be accurate enough
> (I am not sure until I simulate and compare the results)
How accurate is float?
With a "usual" IEEE float you have only about 7.5 decimal digits 
accuracy!
So you cannot distiguish between a 12345,677 and a 12345,673...  :-o

A integer has about 9.5 decimal digits accuracy, that is nearly 8 bits 
more (of course it must be so, because the float mantissa-bits are 
used for more accuracy).

But that has nothing to do with VHDL, its pure maths and the basics of 
binary calculation.

A hint: the most accurate calculators without limitation in length are 
doing the calcs like you do it. Treat the numbers as single digits and 
weigh them according to thier position inside the number (...., 
tenthousands, thousands, hundreds, tens, ones, tenths, hundreths, ....). 
But you don't want to do that in hardware...

Author: dhootha adhi (Company: Student) (gollum)
Posted on:

Rate this post
0 useful
not useful
Thanks for your advices :). You were very helpful and informative.Let 
the thread be closed if it has to .I will start a new thread if i come 
across anymore problems :). Glad to be on this forum

Reply

Entering an e-mail address is optional. If you want to receive reply notifications by e-mail, please log in.

Rules — please read before posting

  • Post long source code as attachment, not in the text
  • Posting advertisements is forbidden.

Formatting options

  • [c]C code[/c]
  • [avrasm]AVR assembler code[/avrasm]
  • [vhdl]VHDL code[/vhdl]
  • [code]code in other languages, ASCII drawings[/code]
  • [math]formula (LaTeX syntax)[/math]




Bild automatisch verkleinern, falls nötig
Note: the original post is older than 6 months. Please don't ask any new questions in this thread, but start a new one.