Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

replace toml to yaml #275

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 5 additions & 9 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 @@ -229,10 +226,9 @@ main = do
-- force line buffering (always, not just when stdout is connected to a tty),
-- it's critical for successful parsing of NITTA's stdout in python scripts
hSetBuffering stdout LineBuffering

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

let exactFrontendType = identifyFrontendType filename frontend_language

Expand All @@ -241,8 +237,8 @@ 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 <|> ioSync' <$> conf <|> Just Sync
confMa = mkMicroarchitecture <$> conf
ma :: BusNetwork T.Text T.Text (Attr (FX m b)) Int
ma
| auto_uarch && isJust confMa =
Expand Down Expand Up @@ -302,7 +298,7 @@ main = do
exitSuccess
)
$ parseFX . fromJust
$ type_ <|> fromConf toml "type" <|> Just "fx32.32"
$ type_ <|> 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,21 +3,27 @@
{-# 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.Text qualified as T
import Data.Yaml (
FromJSON (parseJSON),
ToJSON (toJSON),
Value (Object),
decodeFileThrow,
(.:),
)
import GHC.Generics (Generic)
import NITTA.Intermediate.Value (Val)
import NITTA.Intermediate.Variable (Var)
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
21 changes: 0 additions & 21 deletions src/NITTA/Utils.hs
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,9 @@ module NITTA.Utils (
getIntermediates,
isInstruction,
module NITTA.Utils.Base,

-- * Toml
getToml,
getFromToml,
getFromTomlSection,
) where

import Data.Aeson
import Data.Bits (setBit, testBit)
import Data.HashMap.Strict qualified as HM
import Data.List (sortOn)
import Data.Maybe
import Data.String.Utils qualified as S
Expand All @@ -56,7 +49,6 @@ import Numeric.Interval.NonEmpty (inf, sup, (...))
import Numeric.Interval.NonEmpty qualified as I
import Prettyprinter
import Prettyprinter.Render.Text
import Text.Toml (parseTomlDoc)

type Verilog = Doc ()
doc2text :: Verilog -> T.Text
Expand Down Expand Up @@ -129,16 +121,3 @@ stepsInterval ss =
in a ... b

stepStart Step{pInterval} = I.inf pInterval

getToml text = either (error . show) id $ parseTomlDoc "parse error: " text

getFromToml toml = getFromTomlSection T.empty toml

getFromTomlSection section toml
| section == T.empty = unwrap $ fromJSON $ toJSON toml
| otherwise = case HM.lookup section toml of
Just s -> unwrap $ fromJSON $ toJSON s
Nothing -> error $ "section not found - " <> T.unpack section
where
unwrap (Success conf) = conf
unwrap (Error msg) = error msg
Loading
Loading