From 69f55a9c6716f385e22378ce8be378e08b02377d Mon Sep 17 00:00:00 2001 From: Matthijs Kooijman Date: Tue, 23 Jun 2009 16:17:23 +0200 Subject: [PATCH] Add a hardware module for a generalized Alu. --- HighOrdAlu.hs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 HighOrdAlu.hs diff --git a/HighOrdAlu.hs b/HighOrdAlu.hs new file mode 100644 index 0000000..11636f2 --- /dev/null +++ b/HighOrdAlu.hs @@ -0,0 +1,30 @@ +module HighOrdAlu where + +import Prelude hiding ( + null, length, head, tail, last, init, take, drop, (++), map, foldl, foldr, + zipWith, zip, unzip, concat, reverse, iterate ) +import Bits +import Types +import Data.Param.TFVec +import Data.RangedWord + +constant :: e -> Op D4 e +constant e a b = + e +> (e +> (e +> singleton e)) + +inv = hwnot + +invop :: Op n Bit +invop a b = map inv a + +type Op n e = (TFVec n e -> TFVec n e -> TFVec n e) +type Opcode = Bit + +alu :: Op n e -> Op n e -> Opcode -> TFVec n e -> TFVec n e -> TFVec n e +alu op1 op2 opc a b = + case opc of + Low -> op1 a b + High -> op2 a b + +zero_inv_alu :: Opcode -> TFVec D4 Bit -> TFVec D4 Bit -> TFVec D4 Bit +zero_inv_alu = alu (constant Low) invop -- 2.30.2