Number of bits for an Index is the Ceiling of the log2 of its upperbound, not the...
authorchristiaanb <christiaan.baaij@gmail.com>
Wed, 23 Jun 2010 10:07:34 +0000 (12:07 +0200)
committerchristiaanb <christiaan.baaij@gmail.com>
Wed, 23 Jun 2010 10:07:34 +0000 (12:07 +0200)
clash/CLasH/VHDL/Generate.hs

index 06bc2655cec986b48e5257a71e99d3a04ab33588..df0991c39a25698fc656d6aa12dffa8f5a87d7fe 100644 (file)
@@ -500,7 +500,7 @@ genFromInteger' (Left res) f args = do
     "Unsigned" -> MonadState.lift tsType $ tfp_to_int (sized_word_len_ty ty)
     "Index" -> do
       bound <- MonadState.lift tsType $ tfp_to_int (ranged_word_bound_ty ty)
-      return $ floor (logBase 2 (fromInteger (toInteger (bound)))) + 1
+      return $ (ceiling (logBase 2 (fromInteger (toInteger (bound)))))
   let fname = case name of "Signed" -> toSignedId ; "Unsigned" -> toUnsignedId ; "Index" -> toUnsignedId
   case args of
     [integer] -> do -- The type and dictionary arguments are removed by genApplication