Re: [vhdl-200x] Iterating across a Record Type

From: Daniel Kho <daniel.kho@tauhop.com>
Date: Thu Jun 05 2014 - 09:31:46 PDT
Hi Martin,
Thanks, I believe the Record Introspection proposal is what I'm looking for..

Cheers, Dan


On 5 June 2014 16:05, Martin.J Thompson <Martin.J.Thompson@trw.com> wrote:

>  Daniel,
>
>
>
> Do these proposals not meet your needs?
>
>
>
> http://www.eda-twiki.org/cgi-bin/view.cgi/P1076/RecordMemberAttribute
>
> http://www.eda-twiki.org/cgi-bin/view.cgi/P1076/RecordIntrospection
>
>
>
> The latter one provides “for element in record_type'elements loop“ which looks like it would work for you?
>
>
>
> Cheers,
> Martin
>
>
>
> *From:* owner-vhdl-200x@eda.org [mailto:owner-vhdl-200x@eda.org] *On
> Behalf Of *Daniel Kho
> *Sent:* 05 June 2014 05:15
> *To:* vhdl-200x@eda.org
> *Subject:* [vhdl-200x] Iterating across a Record Type
>
>
>
> Hi friends,
>
> I know this question has been asked before in some forums, but I feel it
> hasn't been adequately answered. My intent is to loop across all elements
> of a record type, similar to how we could do it with an array:
>
> for i in vect'range loop
>
>     vect(i)<=i;
>
> end loop;
>
> where "vect" is an array vector of naturals for example.
>
> The question is, if I had a record type with several sub-elements, how
> would I be able to iterate across all the sub-elements? For example, assume
> we have a record:
>
> type rec is record
>
>     a:std_ulogic;
>
>     b:std_ulogic_vector(15 downto 0);
>
>     c:signed(7 downto 0);
>
> end record rec;
>
> I prefer to not have to write out all the sub-elements individually:
>
> function resolve(r:rec) return rec is begin
>
>     if is_x(r.a) then ... end if;
>
>     if is_x(r.b) then ... end if;
>
>     if is_x(r.c) then ... end if;
> end function resolve;
>
> Currently, I feel having an option for iterating across record structures
> will be very useful especially when writing resolution functions, but I
> believe this usefulness can be applied to many other scenarios as well.
> Another application I can think of which makes having such a feature
> useful, is to apply them for initializers.
>
> Some languages (e.g. scripting languages) have something like "child" or
> "next" keywords which we can use to access neighbouring elements of a
> structure. I was thinking of having something like this for VHDL:
>
> function resolve(r:rec) return rec is begin
>
>     for i in r'range loop    -- okay, 'range only works for arrays now,
>                                    -- but you get the idea.
>
>         if is_x(r.child(i)) then ... end if;
>
>     end loop;
>
> end function resolve;
>
> Of course, "child" may as well be some other keyword, e.g. "element", or
> picked from a suitable existing VHDL keyword.
>
>
>
> Best regards,
> Daniel
>
>
> --
> This message has been scanned for viruses and
> dangerous content by *MailScanner* <http://www.mailscanner.info/>, and is
> believed to be clean.
>
> --
> This message has been scanned for viruses and
> dangerous content by *MailScanner* <http://www.mailscanner.info/>, and is
> believed to be clean.
>

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Thu Jun 5 09:32:48 2014

This archive was generated by hypermail 2.1.8 : Thu Jun 05 2014 - 09:33:22 PDT