Added "lengthT"
authorChristiaan Baaij <christiaan.baaij@gmail.com>
Mon, 29 Jun 2009 13:06:21 +0000 (15:06 +0200)
committerChristiaan Baaij <christiaan.baaij@gmail.com>
Mon, 29 Jun 2009 13:06:21 +0000 (15:06 +0200)
Constants.hs
Generate.hs
HighOrdAlu.hs

index c5382933485f574e98e69d7d25fca58976da3956..1637d582ea14c53f7841cd64b3c6a2c529d1b590 100644 (file)
@@ -197,6 +197,8 @@ hwnotId = "hwnot"
 hwandId :: String
 hwandId = "hwand"
 
+lengthTId :: String
+lengthTId = "lengthT"
 
 ------------------
 -- VHDL type marks
index 7c274e5752cf15b7851b03e4432301aebe25bda7..3e3a21d1fa356b8c20a403de4e90283a2600c37f 100644 (file)
@@ -374,6 +374,7 @@ genUnconsVectorFuns elemTM vectorTM  =
   , (selId, AST.SubProgBody selSpec  [AST.SPVD selVar] [selFor, selRet])
   , (ltplusId, AST.SubProgBody ltplusSpec [AST.SPVD ltplusVar] [ltplusExpr, ltplusRet]  )  
   , (plusplusId, AST.SubProgBody plusplusSpec [AST.SPVD plusplusVar] [plusplusExpr, plusplusRet])
+  , (lengthTId, AST.SubProgBody lengthTSpec [] [lengthTExpr])
   ]
   where 
     ixPar   = AST.unsafeVHDLBasicId "ix"
@@ -607,6 +608,9 @@ genUnconsVectorFuns elemTM vectorTM  =
                      ((AST.PrimName $ AST.NSimple vec1Par) AST.:&: 
                       (AST.PrimName $ AST.NSimple vec2Par))
     plusplusRet = AST.ReturnSm (Just $ AST.PrimName $ AST.NSimple resId)
+    lengthTSpec = AST.Function (mkVHDLExtId lengthTId) [AST.IfaceVarDec vecPar vectorTM] naturalTM
+    lengthTExpr = AST.ReturnSm (Just $ AST.PrimName (AST.NAttribute $ 
+                                AST.AttribName (AST.NSimple vecPar) (mkVHDLBasicId lengthId) Nothing))
 
 -----------------------------------------------------------------------------
 -- A table of builtin functions
@@ -637,6 +641,7 @@ globalNameTable = Map.fromList
   , (emptyId          , (0, genFCall                ) )
   , (singletonId      , (1, genFCall                ) )
   , (copyId           , (2, genFCall                ) )
+  , (lengthTId        , (1, genFCall                ) )
   , (hwxorId          , (2, genOperator2 AST.Xor    ) )
   , (hwandId          , (2, genOperator2 AST.And    ) )
   , (hworId           , (2, genOperator2 AST.Or     ) )
index 331fa1debd0b4f20a071b126398ee498b552967d..d453f640b91737a2a3dc0af0baa902d175822210 100644 (file)
@@ -10,12 +10,11 @@ import Data.RangedWord
 
 constant :: e -> Op D4 e
 constant e a b =
-  e +> (e +> (e +> (singleton e )))
+  copy (lengthT a) e
 
 invop :: Op n Bit
 invop a b = map hwnot a
 
-
 andop :: Op n Bit
 andop a b = zipWith hwand a b