Skip to content

Commit

Permalink
replace toml to yaml
Browse files Browse the repository at this point in the history
  • Loading branch information
Valerii Butorin committed Mar 10, 2024
1 parent 84acffd commit bf08551
Show file tree
Hide file tree
Showing 10 changed files with 88 additions and 127 deletions.
17 changes: 6 additions & 11 deletions app/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ import NITTA.Synthesis (TargetSynthesis (..), mlScoreKeyPrefix, noSynthesis, sta
import NITTA.Synthesis.MlBackend.ServerInstance
import NITTA.UIBackend
import NITTA.UIBackend.Types (BackendCtx, mlBackendGetter, nodeScores, outputPath, receivedValues, root)
import NITTA.Utils
import Paths_nitta
import System.Console.CmdArgs hiding (def)
import System.Exit
Expand Down Expand Up @@ -199,8 +198,6 @@ nittaArgs =
getNittaArgs :: IO Nitta
getNittaArgs = cmdArgs nittaArgs

fromConf toml s = getFromTomlSection s =<< toml

main = do
( Nitta
filename
Expand Down Expand Up @@ -230,9 +227,7 @@ main = do
-- it's critical for successful parsing of NITTA's stdout in python scripts
hSetBuffering stdout LineBuffering

toml <- case uarch of
Nothing -> return Nothing
Just path -> Just . getToml <$> T.readFile path
conf <- parseConfig $ fromJust uarch

let exactFrontendType = identifyFrontendType filename frontend_language

Expand All @@ -241,17 +236,17 @@ main = do
let frontendResult@FrontendResult{frDataFlow, frTrace, frPrettyLog} =
translate exactFrontendType src
received = [("u#0", map (\i -> read $ show $ sin ((2 :: Double) * 3.14 * 50 * 0.001 * i)) [0 .. toEnum n])]
ioSync = fromJust $ io_sync <|> fromConf toml "ioSync" <|> Just Sync
confMa = toml >>= Just . mkMicroarchitecture ioSync
ioSync_ = fromJust $ io_sync <|> Just (ioSync' conf) <|> Just Sync
confMa = Just (mkMicroarchitecture conf)
ma :: BusNetwork T.Text T.Text (Attr (FX m b)) Int
ma
| auto_uarch && isJust confMa =
error $
"auto_uarch flag means that an empty uarch with default prototypes will be used. "
<> "Remove uarch flag or specify prototypes list in config file and remove auto_uarch."
| auto_uarch = microarchWithProtos ioSync
| auto_uarch = microarchWithProtos ioSync_
| isJust confMa = fromJust confMa
| otherwise = defMicroarch ioSync
| otherwise = defMicroarch ioSync_

infoM "NITTA" $ "will trace: " <> S.join ", " (map (show . tvVar) frTrace)

Expand Down Expand Up @@ -302,7 +297,7 @@ main = do
exitSuccess
)
$ parseFX . fromJust
$ type_ <|> fromConf toml "type" <|> Just "fx32.32"
$ type_ <|> Just (T.unpack $ type' conf) <|> Just "fx32.32"

parseFX input =
let typePattern = mkRegex "fx([0-9]+).([0-9]+)"
Expand Down
46 changes: 0 additions & 46 deletions examples/microarch.toml

This file was deleted.

32 changes: 32 additions & 0 deletions examples/microarch.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
type: fx32.32
ioSync: Sync
networks:
- name: net1
pus:
- type: SPI
name: spi
mosi: mosi
miso: miso
sclk: sclk
cs: cs
isSlave: true
bufferSize: 6
bounceFilter: 0
protos:
- type: Fram
name: fram{x} # If you want a PU can be allocated only once, remove {x} from the PU name.
size: 32
- type: Shift
name: shift{x}
sRight: true
- type: Multiplier
name: mul{x}
mock: true
- type: Accum
name: accum{x}
isInt: true
- type: Divider
name: div{x}
mock: true
pipeline: 4

8 changes: 4 additions & 4 deletions nitta.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,6 @@ library
, hashable
, heap
, hslogger
, htoml
, http-api-data
, http-conduit
, hxt
Expand Down Expand Up @@ -178,6 +177,7 @@ library
, wai-app-static
, wai-cors
, warp
, yaml
default-language: Haskell2010

executable nitta
Expand Down Expand Up @@ -211,7 +211,6 @@ executable nitta
, ginger
, heap
, hslogger
, htoml
, intervals
, mtl
, nitta
Expand All @@ -223,6 +222,7 @@ executable nitta
, tostring
, unordered-containers
, wai-app-static
, yaml
default-language: Haskell2010

executable nitta-api-gen
Expand Down Expand Up @@ -259,7 +259,6 @@ executable nitta-api-gen
, ginger
, heap
, hslogger
, htoml
, intervals
, mtl
, nitta
Expand All @@ -271,6 +270,7 @@ executable nitta-api-gen
, tostring
, unordered-containers
, wai-app-static
, yaml
default-language: Haskell2010

test-suite nitta-test
Expand Down Expand Up @@ -337,7 +337,6 @@ test-suite nitta-test
, genvalidity-property
, ginger
, heap
, htoml
, hxt
, intervals
, language-lua
Expand All @@ -359,4 +358,5 @@ test-suite nitta-test
, tostring
, unordered-containers
, wai-app-static
, yaml
default-language: Haskell2010
2 changes: 1 addition & 1 deletion package.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ dependencies:
- data-default
- filepath
- ginger
- htoml
- yaml
- intervals
- mtl
- prettyprinter
Expand Down
39 changes: 28 additions & 11 deletions src/NITTA/Model/Microarchitecture/Config.hs
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,26 @@
{-# LANGUAGE PartialTypeSignatures #-}

module NITTA.Model.Microarchitecture.Config (
MicroarchitectureConf (type', ioSync'),
parseConfig,
mkMicroarchitecture,
) where

import Data.Aeson (
FromJSON (parseJSON),
Options (sumEncoding),
SumEncoding (TaggedObject, contentsFieldName, tagFieldName),
ToJSON (toJSON),
defaultOptions,
genericParseJSON,
genericToJSON,
)
import Data.Default (Default (def))
import Data.HashMap.Internal.Strict (HashMap)
import Data.Yaml (
decodeFileThrow,
(.:),
Value (Object),
FromJSON (parseJSON),
ToJSON (toJSON),
)
import Data.Text qualified as T
import GHC.Generics (Generic)
import NITTA.Intermediate.Value (Val)
Expand All @@ -30,7 +36,6 @@ import NITTA.Model.Networks.Bus (
)
import NITTA.Model.Networks.Types (IOSynchronization)
import NITTA.Model.ProcessorUnits qualified as PU
import NITTA.Utils (getFromToml)

data PUConf
= Accum
Expand Down Expand Up @@ -86,16 +91,28 @@ data NetworkConf = NetworkConf
instance FromJSON NetworkConf
instance ToJSON NetworkConf

newtype MicroarchitectureConf = MicroarchitectureConf
{ networks :: [NetworkConf]
data MicroarchitectureConf = MicroarchitectureConf
{ type' :: T.Text
, ioSync' :: IOSynchronization
, networks :: [NetworkConf]
}
deriving (Generic, Show)

instance FromJSON MicroarchitectureConf
instance FromJSON MicroarchitectureConf where
parseJSON (Object v) = do
type' <- v .: "type"
ioSync' <- v .: "ioSync"
networks <- v .: "networks"
return MicroarchitectureConf { type' = type', ioSync' = ioSync', networks = networks }
parseJSON v = fail $ show v
instance ToJSON MicroarchitectureConf

mkMicroarchitecture :: (Val v, Var x, ToJSON a, ToJSON x) => IOSynchronization -> HashMap T.Text a -> BusNetwork T.Text x v Int
mkMicroarchitecture ioSync toml =
parseConfig :: FilePath -> IO MicroarchitectureConf
parseConfig path = do
decodeFileThrow path :: IO MicroarchitectureConf

mkMicroarchitecture :: (Val v, Var x, ToJSON x) => MicroarchitectureConf -> BusNetwork T.Text x v Int
mkMicroarchitecture conf =
let addPU proto
| proto = addCustomPrototype
| otherwise = addCustom
Expand Down Expand Up @@ -125,8 +142,8 @@ mkMicroarchitecture ioSync toml =
, master_sclk = PU.OutputPortTag sclk
, master_cs = PU.OutputPortTag cs
}
nets = networks (getFromToml toml :: MicroarchitectureConf)
mkNetwork net@NetworkConf{name} = modifyNetwork (busNetwork name ioSync) (build net)
nets = networks conf
mkNetwork net@NetworkConf{name} = modifyNetwork (busNetwork name $ ioSync' conf) (build net)
in case nets of
[n] -> mkNetwork n
_ -> error "multi-networks are not currently supported"
32 changes: 10 additions & 22 deletions src/NITTA/Project/Template.hs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import Data.Maybe
import Data.String.Interpolate
import Data.Text qualified as T
import Data.Text.IO qualified as T
import Data.Yaml
import GHC.Generics hiding (moduleName)
import NITTA.Project.Context
import NITTA.Project.Types
Expand All @@ -39,13 +40,15 @@ import System.FilePath
import System.Log.Logger
import System.Path.WildMatch
import Text.Ginger
import Text.Toml

data Conf = Conf
{ template :: TemplateConf
, signals :: M.HashMap T.Text T.Text
}
deriving (Show)
deriving (Generic, Show)

instance FromJSON Conf
instance ToJSON Conf

data TemplateConf = TemplateConf
{ nittaPath :: Maybe FilePath
Expand All @@ -54,7 +57,7 @@ data TemplateConf = TemplateConf
deriving (Generic, Show)

defNittaPath = "."
templateConfFileName = "template.toml"
templateConfFileName = "template.yml"

instance Default TemplateConf where
def =
Expand Down Expand Up @@ -86,26 +89,11 @@ collectNittaPath templates = do
where
getNittaPath = fromMaybe (error "internal error") . nittaPath . template

readTemplateConfDef :: FilePath -> IO Conf
readTemplateConfDef fn = do
text <-
doesFileExist fn >>= \case
True -> T.readFile fn
False -> return ""
let conf = either (error . show) id $ parseTomlDoc (fn <> ": parse error: ") text
return
Conf
{ template = confLookup fn "template" conf
, signals = confLookup fn "signals" conf
}

confLookup fn sec conf =
maybe
def
(unwrap (fn <> " in section [" <> T.unpack sec <> "]: ") . fromJSON . toJSON)
$ M.lookup sec conf
where
unwrap _prefix (Success a) = a
unwrap prefix (Error msg) = error $ prefix <> msg
doesFileExist fn >>= \case
True -> decodeFileThrow fn :: IO Conf
False -> return Conf{template = def, signals = def}

applyCustomSignal
signals
Expand Down
Loading

0 comments on commit bf08551

Please sign in to comment.