OpenCores
URL https://opencores.org/ocsvn/8b10b_encdec/8b10b_encdec/trunk

Subversion Repositories 8b10b_encdec

[/] [8b10b_encdec/] [trunk/] [8b10_dec.vhd] - Diff between revs 2 and 3

Show entire file | Details | Blame | View Log

Rev 2 Rev 3
Line 1... Line 1...
 
-------------------------------------------------------------------------------
 
--
 
-- Title        : 8b/10b Decoder
 
-- Design       : 10-bit to 8-bit Decoder
 
-- Project      : 8000 - 8b10b_encdec
 
-- Author       : Ken Boyette
 
-- Company      : Critia Computer, Inc.
 
--
 
-------------------------------------------------------------------------------
 
--
 
-- File                 : 8b10b_dec.vhd
 
-- Version              : 1.0
 
-- Generated    : 09.27.2006
 
-- By                   : Itf2Vhdl ver. 1.20
 
--
 
-------------------------------------------------------------------------------
 
--
 
-- Description :
 
--      This module provides 10-bit to 9-bit encoding.
 
--      It accepts 10-bit encoded parallel data input and generates 8-bit decoded 
 
--      data output in accordance with the 8b/10b standard method.  This method was
 
--      described in the 1983 IBM publication "A DC-Balanced, Partitioned-Block, 
 
--      8B/10B Transmission Code" by A.X. Widmer and P.A. Franaszek.  The method
 
--      WAS granted a U.S. Patent #4,486,739 in 1984; now expired.
 
--
 
--              The parallel 10-bit Binary input represent 1024 possible values, called
 
--              characters - only 268 of which are valid.
 
--
 
--              The     input is a 10-bit encoded character whose bits are identified as:
 
--                      AI, BI, CI, DI, EI, II, FI, GI, HI, JI (Least Significant to Most)
 
--
 
--              In addition to 256 data output characters, there are 12 special control
 
--              or K, characters defined for command and synchronization use.
 
--
 
--              The eight data output bits are identified as:
 
--                      HI, GI, FI, EI, DI, CI, BI, AI (Most Significant to Least)
 
--
 
--              The output, KO, is used to indicate the output value is one of the
 
--              control characters.
 
--
 
--              All inputs and outputs are synchronous with an externally supplied
 
--              byte rate clock BYTECLK.
 
--              The encoded output is valid one clock after the input.
 
--              There is a reset input, RESET, to reset the logic.  The next rising
 
--              BYTECLK after RESET is deasserted latches valid input data.
 
--
 
--              Note: This VHDL structure closely follows the discrete logic defined
 
--              in the original article and the subsequent patent.  The Figures 
 
--              referenced are those in the patent.
 
-------------------------------------------------------------------------------
 
--      This program is licensed under the GPL
 
-------------------------------------------------------------------------------
 
 
 
library IEEE;
 
use IEEE.STD_LOGIC_1164.all;
 
 
 
entity dec_8b10b is
 
    port(
 
                RESET : in std_logic ;  -- Global asynchronous reset (AH) 
 
                RBYTECLK : in std_logic ;       -- Master synchronous receive byte clock
 
                AI, BI, CI, DI, EI, II : in std_logic ;
 
                FI, GI, HI, JI : in std_logic ; -- Encoded input (LS..MS)               
 
                KO : out std_logic ;    -- Control (K) character indicator (AH)
 
                HO, GO, FO, EO, DO, CO, BO, AO : out std_logic  -- Decoded out (MS..LS)
 
            );
 
end dec_8b10b;
 
 
 
architecture behavioral of dec_8b10b is
 
 
 
-- Signals to tie things together
 
        signal ANEB, CNED, EEI, P13, P22, P31 : std_logic ;     -- Figure 10 Signals
 
        signal IKA, IKB, IKC : std_logic ;      -- Figure 11 Signals
 
        signal XA, XB, XC, XD, XE : std_logic ; -- Figure 12 Signals    
 
        signal OR121, OR122, OR123, OR124, OR125, OR126, OR127 : std_logic ;
 
        signal XF, XG, XH : std_logic ; -- Figure 13 Signals
 
        signal OR131, OR132, OR133, OR134, IOR134 : std_logic ;
 
 
 
begin
 
 
 
        --
 
        -- 6b Input Function (Reference: Figure 10)
 
        --
 
 
 
        -- One 1 and three 0's
 
        P13 <=  (ANEB and (not CI and not DI))
 
                        or (CNED and (not AI and not BI)) ;
 
        -- Three 1's and one 0          
 
        P31 <=  (ANEB and CI and DI)
 
                        or (CNED and AI and BI) ;
 
        -- Two 1's and two 0's
 
        P22 <=  (AI and BI and (not CI and not DI))
 
                        or (CI and DI and (not AI and not BI))
 
                        or (ANEB and CNED) ;
 
 
 
        -- Intermediate term for "AI is Not Equal to BI"
 
        ANEB <=  AI xor BI ;
 
 
 
        -- Intermediate term for "CI is Not Equal to DI"
 
        CNED <=  CI xor DI ;
 
 
 
        -- Intermediate term for "E is Equal to I"
 
        EEI <= EI xnor II ;
 
 
 
        --
 
        -- K Decoder - Figure 11
 
        --
 
 
 
        -- Intermediate terms
 
        IKA     <= (CI and DI and EI and II)
 
                or (not CI and not DI and not EI and not II) ;
 
        IKB <= P13 and (not EI and II and GI and HI and JI) ;
 
        IKC <= P31 and (EI and not II and not GI and not HI and not JI) ;
 
 
 
        -- PROCESS: KFN; Determine K output
 
        KFN: process (RESET, RBYTECLK, IKA, IKB, IKC)
 
        begin
 
                if RESET = '1' then
 
                        KO <= '0';
 
                elsif RBYTECLK'event and RBYTECLK = '0' then
 
                        KO <= IKA or IKB or IKC;
 
                end if;
 
        end process KFN;
 
 
 
        --
 
        -- 5b Decoder Figure 12
 
        --
 
 
 
        -- Logic to determine complimenting A,B,C,D,E,I inputs
 
        OR121 <= (P22 and (not AI and not CI and EEI))
 
                or (P13 and not EI) ;
 
        OR122 <= (AI and BI and EI and II)
 
                or (not CI and not DI and not EI and not II)
 
                or (P31 and II) ;
 
        OR123 <= (P31 and II)
 
                or (P22 and BI and CI and EEI)
 
                or (P13 and DI and EI and II) ;
 
        OR124 <= (P22 and AI and CI and EEI)
 
                or (P13 and not EI) ;
 
        OR125 <= (P13 and not EI)
 
                or (not CI and not DI and not EI and not II)
 
                or (not AI and not BI and not EI and not II) ;
 
        OR126 <= (P22 and not AI and not CI and EEI)
 
                or (P13 and not II) ;
 
        OR127 <= (P13 and DI and EI and II)
 
                or (P22 and not BI and not CI and EEI) ;
 
 
 
        XA <= OR127
 
                or OR121
 
                or OR122 ;
 
        XB <= OR122
 
                or OR123
 
                or OR124 ;
 
        XC <= OR121
 
                or OR123
 
                or OR125 ;
 
        XD <= OR122
 
                or OR124
 
                or OR127 ;
 
        XE <= OR125
 
                or OR126
 
                or OR127 ;
 
 
 
        -- PROCESS: DEC5B; Generate and latch LS 5 decoded bits
 
        DEC5B: process (RESET, RBYTECLK, XA, XB, XC, XD, XE, AI, BI, CI, DI, EI)
 
        begin
 
                if RESET = '1' then
 
                        AO <= '0' ;
 
                        BO <= '0' ;
 
                        CO <= '0' ;
 
                        DO <= '0' ;
 
                        EO <= '0' ;
 
                elsif RBYTECLK'event and RBYTECLK = '0' then
 
                        AO <= XA XOR AI ;       -- Least significant bit 0
 
                        BO <= XB XOR BI ;
 
                        CO <= XC XOR CI ;
 
                        DO <= XD XOR DI ;
 
                        EO <= XE XOR EI ;       -- Most significant bit 6
 
                end if;
 
        end process DEC5B;
 
 
 
        --
 
        -- 3b Decoder - Figure 13
 
        --
 
 
 
        -- Logic for complimenting F,G,H outputs
 
        OR131 <= (GI and HI and JI)
 
                or (FI and HI and JI)
 
                or (IOR134);
 
        OR132 <= (FI and GI and JI)
 
                or (not FI and not GI and not HI)
 
                or (not FI and not GI and HI and JI);
 
        OR133 <= (not FI and not HI and not JI)
 
                or (IOR134)
 
                or (not GI and not HI and not JI) ;
 
        OR134 <= (not GI and not HI and not JI)
 
                or (FI and HI and JI)
 
                or (IOR134) ;
 
        IOR134 <= (not (HI and JI))
 
                and (not (not HI and not JI))
 
                and (not CI and not DI and not EI and not II) ;
 
 
 
        XF <= OR131
 
                or OR132 ;
 
        XG <= OR132
 
                or OR133 ;
 
        XH <= OR132
 
                or OR134 ;
 
 
 
        -- PROCESS: DEC3B; Generate and latch MS 3 decoded bits
 
        DEC3B: process (RESET, RBYTECLK, XF, XG, XH, FI, GI, HI)
 
        begin
 
                if RESET = '1' then
 
                        FO <= '0' ;
 
                        GO <= '0' ;
 
                        HO <= '0' ;
 
                elsif RBYTECLK'event and RBYTECLK ='0' then
 
                        FO <= XF XOR FI ;       -- Least significant bit 7
 
                        GO <= XG XOR GI ;
 
                        HO <= XH XOR HI ;       -- Most significant bit 10
 
                end if;
 
        end process DEC3B ;
 
 
 
end behavioral;
 
 
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.