-- THIS SOURCE CODE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -- IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -- IN NO EVENT SHALL THE AUTHORT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED -- AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR -- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -- OF THIS CODE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. library ieee; use ieee.std_logic_1164.all; entity gf_mul_1d is port( iA : in std_logic_vector(7 downto 0); iB : in std_logic_vector(7 downto 0); oC : out std_logic_vector(7 downto 0) ); end entity; architecture syn of gf_mul_1d is signal a, b : std_logic_vector(7 downto 0); signal d0, d1, d2, d3, d4, d5, d6, d7 : std_logic; signal e0, e1, e2, e3, e4, e5, e6, e7 : std_logic; signal c0, c1, c2, c3, c4, c5, c6, c7 : std_logic; begin a <= iA; b <= iB; d0 <= (a(0) and b(0)); d1 <= (a(1) and b(0)) xor (a(0) and b(1)); d2 <= (a(2) and b(0)) xor (a(1) and b(1)) xor (a(0) and b(2)); d3 <= (a(3) and b(0)) xor (a(2) and b(1)) xor (a(1) and b(2)) xor (a(0) and b(3)); d4 <= (a(4) and b(0)) xor (a(3) and b(1)) xor (a(2) and b(2)) xor (a(1) and b(3)) xor (a(0) and b(4)); d5 <= (a(5) and b(0)) xor (a(4) and b(1)) xor (a(3) and b(2)) xor (a(2) and b(3)) xor (a(1) and b(4)) xor (a(0) and b(5)); d6 <= (a(6) and b(0)) xor (a(5) and b(1)) xor (a(4) and b(2)) xor (a(3) and b(3)) xor (a(2) and b(4)) xor (a(1) and b(5)) xor (a(0) and b(6)); d7 <= (a(7) and b(0)) xor (a(6) and b(1)) xor (a(5) and b(2)) xor (a(4) and b(3)) xor (a(3) and b(4)) xor (a(2) and b(5)) xor (a(1) and b(6)) xor (a(0) and b(7)); e0 <= (a(7) and b(1)) xor (a(6) and b(2)) xor (a(5) and b(3)) xor (a(4) and b(4)) xor (a(3) and b(5)) xor (a(2) and b(6)) xor (a(1) and b(7)); e1 <= (a(7) and b(2)) xor (a(6) and b(3)) xor (a(5) and b(4)) xor (a(4) and b(5)) xor (a(3) and b(6)) xor (a(2) and b(7)); e2 <= (a(7) and b(3)) xor (a(6) and b(4)) xor (a(5) and b(5)) xor (a(4) and b(6)) xor (a(3) and b(7)); e3 <= (a(7) and b(4)) xor (a(6) and b(5)) xor (a(5) and b(6)) xor (a(4) and b(7)); e4 <= (a(7) and b(5)) xor (a(6) and b(6)) xor (a(5) and b(7)); e5 <= (a(7) and b(6)) xor (a(6) and b(7)); e6 <= (a(7) and b(7)); c0 <= d0 xor e0 xor e4 xor e5 xor e6; c1 <= d1 xor e1 xor e5 xor e6; c2 <= d2 xor e0 xor e2 xor e4 xor e5; c3 <= d3 xor e0 xor e1 xor e3 xor e4; c4 <= d4 xor e0 xor e1 xor e2 xor e6; c5 <= d5 xor e1 xor e2 xor e3; c6 <= d6 xor e2 xor e3 xor e4; c7 <= d7 xor e3 xor e4 xor e5; oC(0) <= c0; oC(1) <= c1; oC(2) <= c2; oC(3) <= c3; oC(4) <= c4; oC(5) <= c5; oC(6) <= c6; oC(7) <= c7; end syn;