------------------------------------------------------------------------------- -- $Id: Subtractor.hs#1 2009/10/01 10:31:09 REDMOND\\satnams $ ------------------------------------------------------------------------------- module Xilinx.Subtractor where import Lava import Xilinx import Xilinx.OneBitSubtractor ------------------------------------------------------------------------------- subtractor :: Xilinx m bit => Int -> (bit, ([bit], [bit])) -> m ([bit], bit) subtractor n (cin, (a,b)) | length a /= n = error ("subtractor " ++ show n ++ " but length a = " ++ show (length a)) subtractor n (cin, (a,b)) | length b /= n = error ("subtractor " ++ show n ++ " but length b = " ++ show (length b)) subtractor n (cin, (a,b)) = col n oneBitSubtractor (cin, zip a b) ------------------------------------------------------------------------------- subtractor_top :: Int -> Out () subtractor_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) <- subtractor size (cin, (a, b)) output_vec "sum" sum (size-1) downto 0 output_bit "cout" cout ------------------------------------------------------------------------------- subtractorNoCarryIn :: Xilinx m bit => Int -> ([bit], [bit]) -> m ([bit], bit) subtractorNoCarryIn n (a, b) = subtractor n (one, (a,b)) -------------------------------------------------------------------------------