Re: {Spam?} Re: [vhdl-200x] regarding resolution function for resolved signal with single source

From: David Koontz <diogratia@gmail.com>
Date: Wed Jul 23 2014 - 17:50:10 PDT
On 24 Jul 2014, at 5:08 am, tgingold@free.fr wrote:

> My understanding:
> 
> 
>> As per section (IEEE-Std 1076-2008)
>> 
>> 4.6 Resolution functions
>> 
>> A resolution function is a function that defines how the values of
>> multiple sources of a given signal are to be
>> resolved into a single value for that signal.
> 
> This is an informal explanation.  I understand 'multiple' as one or more.
> 
>> And as per section
>> 
>> 14.7.3.2 Driving values
> 
> [...]
> 
> This section describes the semantic and how resolution functions are called.
> 
>> Please clarify, does the resolution function be applied on a resolved
>> signal when it is driven by only one source?
> 
> So yes.

Also Look to the resolution function for std_logic found in package std_logic_1164:

  -------------------------------------------------------------------    
  -- resolution function
  -------------------------------------------------------------------    
  constant resolution_table : stdlogic_table := (
    --      ---------------------------------------------------------
    --      |  U    X    0    1    Z    W    L    H    -        |   |  
    --      ---------------------------------------------------------
             ('U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U'),  -- | U |
             ('U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'),  -- | X |
             ('U', 'X', '0', 'X', '0', '0', '0', '0', 'X'),  -- | 0 |
             ('U', 'X', 'X', '1', '1', '1', '1', '1', 'X'),  -- | 1 |
             ('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X'),  -- | Z |
             ('U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X'),  -- | W |
             ('U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X'),  -- | L |
             ('U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X'),  -- | H |
             ('U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X')   -- | - |
             );

  function resolved (s : STD_ULOGIC_VECTOR) return STD_ULOGIC is
    variable result : STD_ULOGIC := 'Z';  -- weakest state default
  begin
    -- the test for a single driver is essential otherwise the
    -- loop would return 'X' for a single driver of '-' and that
    -- would conflict with the value of a single driver unresolved
    -- signal.
    if (s'length = 1) then return s(s'low);
    else
      for i in s'range loop
        result := resolution_table(result, s(i));
      end loop;
    end if;
    return result;
  end function resolved;

And from 4.6, para 4:

Resolution functions are implicitly invoked during each simulation cycle in which corresponding resolved signals are active (see 14.7.3.1). Each time a resolution function is invoked, it is passed an array value, each element of which is determined by a corresponding source of the resolved signal, but excluding those sources that are drivers whose values are determined by null transactions (see 10.5.2.2). Such drivers are said to be off. ...

 --

A signal with no active drivers doesn't invoke a resolution function nor are inactive drivers presented (the length of that array can be dynamic).

As long as there's one active driver the resolution function is going to get called.


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Wed Jul 23 17:54:33 2014

This archive was generated by hypermail 2.1.8 : Wed Jul 23 2014 - 17:54:37 PDT