Close

DRAFT: Ternary Mockup in VDHL

domDom wrote 12/16/2014 at 04:21 • 2 min read • Like
library ieee;
use ieee.std_logic_1164.all;


-- TYPEDEF
type ts_uternary is (
    'U', -- Uninitialized
    '?', -- Forcing Unknown
    '+', -- Forcing +
    '0', -- Forcing 0
    '-', -- Forcing -
    'X', -- Don't care
    'P', -- Weak +
    'Z', -- Weak 0
    'M'  -- Weak -
 );
 
type ts_uternary_touple is array(natural range <>) of ts_utenary;

function "&" ( lhs, rhs : ts_uternary) return ts_uternary_touple(0 to 1)
begin 
    return (0=> lhs, 1=>rhs);
end "&";

function draft_add(lhs, rhs : ts_uternary) return ts_uternary is
-- Basic add-operant draft, not covering all the cases yet.
begin
    case(a&b) is    --concat the two operants for convenience
        when "++" <= return '-';
        when "+0" <= return 'P';
        when "00" <= return '0';
        when "0-" <= return 'M';
        when "--" <= return '+';
        when "-+" <= return '0';
        when others <= return draft_add(b,a);  --communative law
    end case;
    
    return '?'; --When in doubt, return no significant value
end draft_add;
 
function "+" ( lhs, rhs : ts_uternary) return ts_uternary is
begin
    return draft_add(lhs, rhs);
end "+";
Like

Discussions