diff --git a/README.md b/README.md index ec88f6763..1521b0ed3 100644 --- a/README.md +++ b/README.md @@ -217,8 +217,8 @@ nitta v0.0.0.1 - tool for hard real-time CGRA processors nitta [OPTIONS] FILE Target system configuration: - --uarch=PATH Microarchitecture configuration file - -a --auto-uarch Use empty microarchitecture and + --march=PATH Microarchitecture configuration file + -a --auto-march Use empty microarchitecture and allocate PUs during synthesis process. -t --type=fxM.B Overrides data type specified in config file diff --git a/app/Main.hs b/app/Main.hs index 25280386d..24b6ff623 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -21,6 +21,7 @@ import Control.Exception import Control.Monad (when) import Data.ByteString.Lazy.Char8 qualified as BS import Data.Default (def) +import Data.Foldable (forM_) import Data.Maybe import Data.Proxy import Data.String.Utils qualified as S @@ -230,9 +231,7 @@ main = do Nothing -> return Nothing Just path -> Just <$> parseConfig path - case conf of - Nothing -> return () - Just conf_ -> saveConfig output_path conf_ + forM_ conf $ saveConfig output_path let exactFrontendType = identifyFrontendType filename frontend_language diff --git a/examples/microarch.yml b/examples/microarch.yml index 26169acb0..0517417f7 100644 --- a/examples/microarch.yml +++ b/examples/microarch.yml @@ -7,7 +7,6 @@ library: size: 32 accum{x}: type: Accum - isInt: true networks: net1: pus: diff --git a/nitta.cabal b/nitta.cabal index 47b73944b..f57406b74 100644 --- a/nitta.cabal +++ b/nitta.cabal @@ -285,6 +285,7 @@ test-suite nitta-test NITTA.Intermediate.Simulation.Tests NITTA.Intermediate.Tests.Functions NITTA.Intermediate.Value.Tests + NITTA.Model.Config.Tests NITTA.Model.Problems.Refactor.Accum.Tests NITTA.Model.Problems.Refactor.ConstantFolding.Tests NITTA.Model.Problems.Refactor.Tests diff --git a/src/NITTA/Model/Microarchitecture/Config.hs b/src/NITTA/Model/Microarchitecture/Config.hs index 77197e48b..5048cc40c 100644 --- a/src/NITTA/Model/Microarchitecture/Config.hs +++ b/src/NITTA/Model/Microarchitecture/Config.hs @@ -3,7 +3,9 @@ {-# LANGUAGE PartialTypeSignatures #-} module NITTA.Model.Microarchitecture.Config ( - MicroarchitectureConf (valueType, ioSync), + MicroarchitectureConf (..), + NetworkConf (..), + PUConf (..), parseConfig, saveConfig, mkMicroarchitecture, @@ -103,7 +105,7 @@ parseConfig path = do saveConfig :: FilePath -> MicroarchitectureConf -> IO () saveConfig path conf = do - encodeFile (path <> "/microarch.yml") conf + encodeFile (path <> "/microarch.yml") conf mkMicroarchitecture :: (Val v, Var x, ToJSON x) => MicroarchitectureConf -> BusNetwork T.Text x v Int mkMicroarchitecture MicroarchitectureConf{mock, ioSync, library, networks} = diff --git a/src/NITTA/Model/Networks/Bus.hs b/src/NITTA/Model/Networks/Bus.hs index 556db771e..aa91b134c 100644 --- a/src/NITTA/Model/Networks/Bus.hs +++ b/src/NITTA/Model/Networks/Bus.hs @@ -189,7 +189,7 @@ instance (UnitTag tag, VarValTime v x t) => ProcessorUnit (BusNetwork tag v x t) | any (allowToProcess f) (M.elems bnPus) = Right net{bnRemains = f : bnRemains} -- TODO: -- There are several issues that need to be addressed: see https://github.com/ryukzak/nitta/pull/195#discussion_r853486450 - -- 1) Now the binding of functions to the network is hardcoded, that prevents use of an empty uarch at the start + -- 1) Now the binding of functions to the network is hardcoded, that prevents use of an empty march at the start -- 2) If Allocation options are independent of the bnRemains, then they are present in all synthesis states, which means no leaves in the synthesis tree | any (\PUPrototype{pProto} -> allowToProcess f pProto) (M.elems bnPUPrototypes) = Right net{bnRemains = f : bnRemains} tryBind f BusNetwork{bnPus} = diff --git a/test/NITTA/Model/Config/Tests.hs b/test/NITTA/Model/Config/Tests.hs new file mode 100644 index 000000000..9c635056c --- /dev/null +++ b/test/NITTA/Model/Config/Tests.hs @@ -0,0 +1,55 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE IncoherentInstances #-} +{-# LANGUAGE PartialTypeSignatures #-} + +{- | +Module : NITTA.Model.Config.Tests +Description : +Copyright : (c) Valerii Butorin, 2024 +License : BSD3 +Maintainer : aleksandr.penskoi@gmail.com +Stability : experimental +-} +module NITTA.Model.Config.Tests ( + tests, +) where + +import Data.Maybe +import Data.Map as M +import Data.Text qualified as T +import NITTA.Model.Microarchitecture.Config as Conf +import Test.Tasty (testGroup) +import Test.Tasty.HUnit + +tests = + testGroup + "Configuration parsing" + [ testCase "parse config common" $ do + conf <- parseConfig "examples/microarch.yml" + let + lib = fromJust $ library conf + fram = fromJust $ M.lookup (T.pack "fram{x}") lib + nets = networks conf + net = fromJust $ M.lookup (T.pack "net1") nets + spi = fromJust $ M.lookup (T.pack "spi") (fromJust $ pus net) + proros_ = fromJust $ protos net + shift = fromJust $ M.lookup (T.pack "shift{x}") proros_ + div_ = fromJust $ M.lookup (T.pack "div{x}") proros_ + + "Sync" @=? show (ioSync conf) + True @=? mock conf + "fx32.32" @=? T.unpack (valueType conf) + 2 @=? M.size (fromJust $ library conf) + + 32 @=? Conf.size fram + Just True @=? Conf.sRight shift + 4 @=? Conf.pipeline div_ + + "mosi" @=? T.unpack (mosi spi) + "miso" @=? T.unpack (miso spi) + "sclk" @=? T.unpack (sclk spi) + "cs" @=? T.unpack (cs spi) + True @=? isSlave spi + Just 6 @=? bufferSize spi + 0 @=? bounceFilter spi + ] diff --git a/test/Spec.hs b/test/Spec.hs index 83043cee2..14227d66a 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -20,6 +20,7 @@ import NITTA.Frontends.XMILE.MathParserTests qualified import NITTA.Intermediate.Functions.Accum.Tests qualified import NITTA.Intermediate.Simulation.Tests qualified import NITTA.Intermediate.Value.Tests qualified +import NITTA.Model.Config.Tests qualified import NITTA.Model.Problems.Refactor.Accum.Tests qualified import NITTA.Model.Problems.Refactor.ConstantFolding.Tests qualified import NITTA.Model.Problems.Refactor.Tests qualified @@ -61,6 +62,7 @@ main = do , NITTA.Model.ProcessorUnits.Accum.Tests.tests , NITTA.Model.ProcessorUnits.Shift.Tests.tests , NITTA.Model.ProcessorUnits.Tests.DSL.Tests.tests + , NITTA.Model.Config.Tests.tests , NITTA.Tests.tests , NITTA.Utils.Tests.tests ]