Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > VHDL > Integer with leading zeros to string

Reply
Thread Tools

Integer with leading zeros to string

 
 
hssig
Guest
Posts: n/a
 
      09-28-2010
Hi,

I have the following integer declaration:

signal test_num : integer := 0555;

Now I want to make a string out of it:

signal test_string : string (1 to 4);
begin
test_string <= integer'image(test_num);

Modelsim complains "Array lengths do not match. Left is 4 (1 to 4).
Right is 3 (1 to 3)."

How can I convert test_num (ranging from 0001 to 9999) to a string
correctly taking into account the leading zeros?

Cheers,
hssig

 
Reply With Quote
 
 
 
 
hssig
Guest
Posts: n/a
 
      09-28-2010
The following should be displayed:


report "This should be displayed " & integer'image(test_num) severity
note;

-> This should be displayed 0555

cheers,
hssig
 
Reply With Quote
 
 
 
 
Jonathan Bromley
Guest
Posts: n/a
 
      09-28-2010
On Sep 28, 2:59*pm, hssig <hs...@gmx.net> wrote:

> How can I convert test_num (ranging from 0001 to 9999) to a string
> correctly taking into account the leading zeros?


Don't forget that the integer doesn't know about leading
zeros. You are entitled to write them in the integer literal,
but they are of course NOT stored in the integer itself. So
you need a format mechanism:

function format(
value : natural; --- the numeric value
width : positive; -- number of characters
leading : character := ' ')
return string --- guarantees to return "width" chars
is
constant img: string := integer'image(value);
variable str: string(1 to width) := (others => leading);
begin
if img'length > width then
report "Format width " & integer'image(width)
& " is too narrow for value " & img
severity warning;
str := (others => '*');
else
str(width+1-img'length to width) := img;
end if;
return str;
end;

....

---- this line should give "0055"
constant N: integer := 55;
report "value is " & format(integer'image(N), 4, '0');

Any use?

Dealing with negative integers is left as an exercise
--
Jonathan Bromley
 
Reply With Quote
 
Jonathan Bromley
Guest
Posts: n/a
 
      09-28-2010
On Tue, 28 Sep 2010 09:36:39 -0700 (PDT), Jonathan Bromley wrote:

>function format(
> value : natural; --- the numeric value
> width : positive; -- number of characters
> leading : character := ' ')
>return string --- guarantees to return "width" chars


[...]

>constant N: integer := 55;
>report "value is " & format(integer'image(N), 4, '0');


oops, obviously the first argument should
be N rather than integer'image(N).
Hasty end-of-working-day post.
--
Jonathan Bromley
 
Reply With Quote
 
Jonathan Bromley
Guest
Posts: n/a
 
      09-28-2010
On Tue, 28 Sep 2010 06:59:09 -0700 (PDT), hssig wrote:

>How can I convert test_num (ranging from 0001 to 9999) to a string
>correctly taking into account the leading zeros?


One final afterthought: take a look at
http://www.easics.com/webtools/freesics
for a more general (and very cunning) solution.
--
Jonathan Bromley
 
Reply With Quote
 
hssig
Guest
Posts: n/a
 
      09-29-2010
Hi Jonathan,

I like you proposals. Thank you very much.

Cheers,
hssig

 
Reply With Quote
 
Andy
Guest
Posts: n/a
 
      09-29-2010
On Sep 28, 11:36*am, Jonathan Bromley <s...@oxfordbromley.plus.com>
wrote:
> Don't forget that the integer doesn't know about leading
> zeros. *You are entitled to write them in the integer literal,
> but they are of course NOT stored in the integer itself. *So
> you need a format mechanism:
> --
> Jonathan Bromley


VHDL integers do store leading zeroes, up to at least 32 binary bits
total. However, as you stated, standard output formats do not display
them. Just because you initialize an integer with a literal which
happens to be formatted with leading zeroes does not mean that the
display output from that same integer will automatically be formatted
with leading zeroes.

Andy
 
Reply With Quote
 
Jonathan Bromley
Guest
Posts: n/a
 
      09-29-2010
On Sep 29, 3:44*pm, Andy <jonesa...@comcast.net> wrote:

> VHDL integers do store leading zeroes, up to at least 32 binary bits
> total. However, as you stated, standard output formats do not display
> them. Just because you initialize an integer with a literal which
> happens to be formatted with leading zeroes does not mean that the
> display output from that same integer will automatically be formatted
> with leading zeroes.


yeah, guess I didn't say very clearly what I meant

let's try again: there is no information stored in the
integer variable that indicates whether or not its
original textual representation had leading zeros (and,
indeed, no information about any other aspect of its
original textual representation except the integer's
numeric value).

Ho hum....

Jonathan
 
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
Hexadecimal formatting with leading zeros?! Dmitry Bond. ASP .Net 1 10-13-2005 08:55 AM
Leading Zeros Gary Computer Support 2 07-24-2004 02:25 PM
Leading Zeros Gary Computer Support 1 07-24-2004 01:55 PM
Formatting an integer with leading zeros GIMME Java 5 02-13-2004 05:01 PM
Re: CSV for Excel - Problem with Leading Zeros Luke Zhang [MSFT] ASP .Net 0 06-26-2003 01:34 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57