Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > VHDL > Subtyping issue

Reply
Thread Tools

Subtyping issue

 
 
valentin tihomirov
Guest
Posts: n/a
 
      06-30-2005
I would like to restrict the space of characters.:
subtype TMYCHAR is character ('a', '1', '.'); -- not supported

I would like the interpriter to understand that the elements are characters
so that character'pos attribute were applicable to them for ASCII code
retreival. Like
constant C: character := TMYCHAR'val(1);
constant I: intger := character'pos(C); -- must be x61

Unfortunately, VHDL supports only ranges rather than enumerations in the
specification of subtype. How would you perform the convertion:
type TMYCHAR is ('a', '1', '.');
constant C: character := TMYCHAR'val(1);



I fail to write a function TMYCHAR elements with characters

function GET_ASCII(MC: TMYCHAR) return character is
begin
for C in character'left to character'right loop
if C = MC then -- incompareble types
return character'pos(C);
end if;
end loop;
end;



thanks in advance


 
Reply With Quote
 
 
 
 
Jonathan Bromley
Guest
Posts: n/a
 
      06-30-2005
On Thu, 30 Jun 2005 15:46:28 +0300, "valentin tihomirov"
<(E-Mail Removed)> wrote:

>I would like to restrict the space of characters.:
> subtype TMYCHAR is character ('a', '1', '.'); -- not supported
>
>I would like the interpriter to understand that the elements are characters
>so that character'pos attribute were applicable to them for ASCII code
>retreival. Like
> constant C: character := TMYCHAR'val(1);
> constant I: intger := character'pos(C); -- must be x61
>
>Unfortunately, VHDL supports only ranges rather than enumerations in the
>specification of subtype.


You are trying to specify a *set* of character. Modula-2 and Pascal
supported sets. VHDL does not.

> How would you perform the convertion:
> type TMYCHAR is ('a', '1', '.');
> constant C: character := TMYCHAR'val(1);


One possible solution...

function To_Character(C: TMYCHAR) return CHARACTER is
begin
return CHARACTER'VALUE(TMYCHAR'IMAGE(C));
end

Alternatively, try a lookup table:

type Char_Lookup is array (TMYCHAR) of CHARACTER;
constant To_Character: Char_Lookup :=
( 'a' => 'a'
, '1' => '1'
, '.' => '.'
);

In either case (function or lookup table) you can then write...

constant C: CHARACTER := To_Character('1');

HTH
--
Jonathan Bromley, Consultant

DOULOS - Developing Design Know-how
VHDL, Verilog, SystemC, Perl, Tcl/Tk, Verification, Project Services

Doulos Ltd. Church Hatch, 22 Market Place, Ringwood, BH24 1AW, UK
Tel: +44 (0)1425 471223 mail:(E-Mail Removed)
Fax: +44 (0)1425 471573 Web: http://www.doulos.com

The contents of this message may contain personal views which
are not the views of Doulos Ltd., unless specifically stated.
 
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
Subtyping iterators Michael Le Barbier Grünewald C++ 5 05-14-2012 08:23 AM
Subtyping a non-builtin type in C/C++ johan2sson@gmail.com Python 3 08-13-2006 07:23 PM
Major ActiveX Domain issue. NOT LOCAL PC ISSUE joe.valentine@gmail.com Computer Support 8 02-06-2006 09:03 PM
subtyping a builtin type in a C extension shawn Python 2 10-17-2005 04:43 PM
Private Inheritance is not subtyping Ragnar C++ 2 11-07-2003 04:34 PM



Advertisments