Altera Code 8-bit Output Port


SUBDESIGN ea_out
(
    E               :  INPUT;   % E-Clock %
    R_W             :  INPUT;   % R/W Line %
    RESETn          :  INPUT;   % Reset line %

    PA[7..0]        :  BIDIR;   % Address and Data (15-8) from HC12 %
    PB[7..0]        :  BIDIR;   % Address and Data (7-0) from HC12 %

    EA[7..0]        :  OUTPUT;   % Expansion Port A %
)


VARIABLE
    demux[15..0]    :  DFF;    % Demuliplexed address internal %

    EAI             :  DFFE;   % Register for exp port A %

BEGIN

% ***********************************************************************%
% Address decoding and demultiplexing                                    %
% Latch address on rising edge of E clock                                %
% ***********************************************************************%

    demux[15..8].d = PA[7..0];
    demux[7..0].d = PB[7..0];
    demux[15..0].clk = E; 

% ***********************************************************************%
% Start of expansion ports                                               %
% ***********************************************************************%

%   A write to address 0x0400 writes to the internal EA flip flops %
%   Writes take place on the falling edge of E clock %

    EAI[].clk  = !E;
    EAI[].ena  = (demux[15..0].q == H"0400") & (R_W == GND);
    EAI[].d    = PA[];
    EAI[].clrn = RESETn; 

    EA[] = EAI[].q;

END;