------------------------------------------------------------------------------- -- $Id: Adder.hs#1 2009/10/01 10:31:09 REDMOND\\satnams $ ------------------------------------------------------------------------------- module Xilinx.Adder where import Lava import Xilinx import Xilinx.OneBitAdder ------------------------------------------------------------------------------- adder :: Xilinx m bit => Int -> (bit, ([bit], [bit])) -> m ([bit], bit) adder n (cin, (a,b)) | length a /= n = error ("adder " ++ show n ++ " but length a = " ++ show (length a)) adder n (cin, (a,b)) | length b /= n = error ("adder " ++ show n ++ " but length b = " ++ show (length b)) adder n (cin, (a,b)) = col n oneBitAdder (cin, zip a b) ------------------------------------------------------------------------------- adder_top :: Int -> Out () adder_top size = do a <- input_vec "a" (size-1) downto 0 b <- input_vec "b" (size-1) downto 0 cin <- input_bit "cin" (sum, cout) <- adder size (cin, (a, b)) output_vec "sum" sum (size-1) downto 0 output_bit "cout" cout ------------------------------------------------------------------------------- adderNoCarry :: Xilinx m bit => Int -> ([bit], [bit]) -> m [bit] adderNoCarry n (a, b) = do (addition, cout) <- adder n (zero, (a,b)) return addition -------------------------------------------------------------------------------