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

From: Daniel Kho <daniel.kho@tauhop.com>
Date: Thu Jun 05 2014 - 23:12:32 PDT
Hi Brent,
Yes, I understand the rationale of using the dot notation to distinguish
between arrays and records. I'm just wondering if it's a good idea.

From your examples, it would be clear if a signal is an array or a record,
as using the dot notation makes that explicit. Well, I think it's not a bad
idea after all, other than it being a little peculiar.

regards, daniel

On 6 June 2014 13:47, Brent Hayhoe <Brent.Hayhoe@aftonroy.com> wrote:

> Hi Daniel,
>
> I included the square brackets intentionally to promote such discussion.
>
> For single element referencing we have:
>
>    std_array(elementx)  -- for arrays
>
> and
>
>    std_record.elementx  -- for records
>
> I wanted to maintain the distinction between the two composite types in
> the way they select a range, hence the square brackets.
>
> Standard parentheses maybe better but I think we should retain the dot
> notation:
>
>
>    std_array(elementx to elementy)  -- for arrays
>
> and
>
>    std_record.(elementx to elementy)  -- for records
>
>
> Brent.
>
>
> On 06/06/2014 03:00, Daniel Kho wrote:
>
>> Hi Brent,
>> Yes, I just noticed your proposal, and am liking almost every bit of it.
>>
>> The only thing I found peculiar was the use of square brackets to denote
>> element ranges.
>> I was pondering upon your idea of retaining the dot notation for ranges
>> of record elements. I'm not sure if dropping the dot notation makes more
>> sense?
>>
>> Declaration:
>> subtype sub_std_record is std_record(element1 to element3);
>>
>> And for access:
>> my_sub_sig(element2 to element3) <= (others => 'Z');
>>
>> regards, daniel
>>
>>
>> On 6 June 2014 04:31, Brent Hayhoe <Brent.Hayhoe@aftonroy.com <mailto:
>> Brent.Hayhoe@aftonroy.com>> wrote:
>>
>>     Hi Daniel,
>>
>>     Actually, the first probably deals more with the problem and how to
>>     achieve it.
>>
>>     It has been merged for tracking reasons, but is entitled:
>>
>>        Record Introspection & Indexing
>>
>>     and proposes an implicit enumerated type generated when a record is
>>     declared. The elements are accessed using the same attribute.
>>
>>     Brent
>>
>>
>>
>>     On 05/06/2014 17:31, Daniel Kho wrote:
>>
>>         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
>>         <mailto:Martin.J.Thompson@trw.com> <mailto:Martin.J.Thompson@trw..
>> com
>>
>>         <mailto: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>
>>         <mailto:owner-vhdl-200x@eda.org <mailto:owner-vhdl-200x@eda.org>>
>>              [mailto:owner-vhdl-200x@eda.org <mailto:owner-vhdl-200x@eda..
>> org>
>>
>>         <mailto: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 <mailto:vhdl-200x@eda.org>
>>         <mailto:vhdl-200x@eda.org <mailto: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* <http://www.mailscanner.info/>,
>> and is
>>         believed to be clean.
>>
>>
>>
>>     --
>>     Regards,
>>
>>             Brent Hayhoe.
>>
>>     Aftonroy Limited                            Telephone: +44
>> (0)20-8449-1852
>>     <tel:%2B44%20%280%2920-8449-1852>
>>
>>     135 Lancaster Road,
>>     New Barnet,                                    Mobile: +44
>> (0)79-6647-2574
>>     <tel:%2B44%20%280%2979-6647-2574>
>>
>>     Herts., EN4 8AJ,  U.K.                          Email:
>>     Brent.Hayhoe@Aftonroy.com
>>
>>     Registered Number: 1744190 England.
>>     Registered Office:
>>
>>     4th Floor, Imperial House,
>>     15 Kingsway,
>>     London, WC2B 6UN, U.K.
>>
>>
>>
>>     --     This message has been scanned for viruses and
>>     dangerous content by MailScanner, 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.
>>
>
>
> --
>
> Regards,
>
>         Brent Hayhoe.
>
> Aftonroy Limited                            Telephone: +44 (0)20-8449-1852
> 135 Lancaster Road,
> New Barnet,                                    Mobile: +44 (0)79-6647-2574
> Herts., EN4 8AJ,  U.K.                          Email:
> Brent.Hayhoe@Aftonroy.com
>
> Registered Number: 1744190 England.
> Registered Office:
>
> 4th Floor, Imperial House,
> 15 Kingsway,
> London, WC2B 6UN, U.K.
>
>
> --
> This message has been scanned for viruses and
> dangerous content by MailScanner, 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 Fri, 6 Jun 2014 14:12:32 +0800

This archive was generated by hypermail 2.1.8 : Thu Jun 05 2014 - 23:13:37 PDT