------------------------------------------------------------------------------- -- $Id: TwoSorter.hs#1 2009/10/01 10:31:09 REDMOND\\satnams $ ------------------------------------------------------------------------------- module Lava.Samples.TwoSorter where import Lava import Xilinx import Xilinx.Comparator ------------------------------------------------------------------------------- twoSorter :: Xilinx m bit => [[bit]] -> m [[bit]] twoSorter = listToPair >-> fork2 >-> fsT comparator >-> condSwap >-> pairToList ------------------------------------------------------------------------------- condSwap :: Xilinx m bit => (bit, ([bit], [bit])) -> m ([bit], [bit]) condSwap = fork2 >-> muxBus `hpar2` muxBus' ------------------------------------------------------------------------------- twoSorter_top :: Int -> Out () twoSorter_top size = do a <- input_vec "a" (size-1) downto 0 b <- input_vec "b" (size-1) downto 0 [c, d] <- twoSorter [a, b] output_vec "c" c (size-1) downto 0 output_vec "d" d (size-1) downto 0 -------------------------------------------------------------------------------