clash-lib-1.2.2: CAES Language for Synchronous Hardware - As a Library
Copyright(C) 2012-2016 University of Twente
2016-2017 Myrtle Software Ltd
2017-2018 Google Inc.
LicenseBSD2 (see the file LICENSE)
MaintainerChristiaan Baaij <christiaan.baaij@gmail.com>
Safe HaskellNone
LanguageHaskell2010

Clash.Netlist

Description

Create Netlists out of normalized CoreHW Terms

Synopsis

Documentation

genNetlist Source #

Arguments

:: Bool

Whether this we're compiling a testbench (suppresses certain warnings)

-> ClashOpts

Options Clash was called with

-> CustomReprs

Custom bit representations for certain types

-> BindingMap

Global binders

-> [TopEntityT]

All the TopEntities

-> CompiledPrimMap

Primitive definitions

-> TyConMap

TyCon cache

-> (CustomReprs -> TyConMap -> Type -> State HWMap (Maybe (Either String FilteredHWType)))

Hardcoded Type -> HWType translator

-> Int

IntWordInteger bit-width

-> (IdType -> Identifier -> Identifier)

valid identifiers

-> (IdType -> Identifier -> Identifier -> Identifier)

extend valid identifiers

-> Bool

Whether the backend supports ifThenElse expressions

-> SomeBackend

The current HDL backend

-> HashMap Identifier Word

Seen components

-> FilePath

HDL dir

-> ComponentPrefix

Component name prefix

-> Id

Name of the topEntity

-> IO ([([Bool], SrcSpan, HashMap Identifier Word, Component)], HashMap Identifier Word) 

Generate a hierarchical netlist out of a set of global binders with topEntity at the top.

runNetlistMonad Source #

Arguments

:: Bool

Whether this we're compiling a testbench (suppresses certain warnings)

-> ClashOpts

Options Clash was called with

-> CustomReprs

Custom bit representations for certain types

-> BindingMap

Global binders

-> VarEnv TopEntityT

TopEntity annotations

-> CompiledPrimMap

Primitive Definitions

-> TyConMap

TyCon cache

-> (CustomReprs -> TyConMap -> Type -> State HWMap (Maybe (Either String FilteredHWType)))

Hardcode Type -> HWType translator

-> Int

IntWordInteger bit-width

-> (IdType -> Identifier -> Identifier)

valid identifiers

-> (IdType -> Identifier -> Identifier -> Identifier)

extend valid identifiers

-> Bool

Whether the backend supports ifThenElse expressions

-> SomeBackend

The current HDL backend

-> HashMap Identifier Word

Seen components

-> FilePath

HDL dir

-> ComponentPrefix

Component name prefix

-> NetlistMonad a

Action to run

-> IO (a, NetlistState) 

Run a NetlistMonad action in a given environment

genComponent Source #

Arguments

:: HasCallStack 
=> Id

Name of the function

-> NetlistMonad ([Bool], SrcSpan, HashMap Identifier Word, Component) 

Generate a component for a given function (caching)

genComponentT Source #

Arguments

:: HasCallStack 
=> Id

Name of the function

-> Term

Corresponding term

-> NetlistMonad ([Bool], SrcSpan, HashMap Identifier Word, Component) 

Generate a component for a given function

mkDeclarations Source #

Arguments

:: HasCallStack 
=> Id

LHS of the let-binder

-> Term

RHS of the let-binder

-> NetlistMonad [Declaration] 

Generate a list of concurrent Declarations for a let-binder, return an empty list if the bound expression is represented by 0 bits

mkDeclarations' Source #

Arguments

:: HasCallStack 
=> DeclarationType

Concurrent of sequential declaration

-> Id

LHS of the let-binder

-> Term

RHS of the let-binder

-> NetlistMonad [Declaration] 

Generate a list of Declarations for a let-binder, return an empty list if the bound expression is represented by 0 bits

mkSelection :: DeclarationType -> NetlistId -> Term -> Type -> [Alt] -> [Declaration] -> NetlistMonad [Declaration] Source #

Generate a declaration that selects an alternative based on the value of the scrutinee

reorderCustom :: TyConMap -> CustomReprs -> Type -> [(Pat, Term)] -> [(Pat, Term)] Source #

patPos :: CustomReprs -> Pat -> Int Source #

mkFunApp Source #

Arguments

:: HasCallStack 
=> Identifier

LHS of the let-binder

-> Id

Name of the applied function

-> [Term]

Function arguments

-> [Declaration]

Tick declarations

-> NetlistMonad [Declaration] 

Generate a list of Declarations for a let-binder where the RHS is a function application

mkExpr Source #

Arguments

:: HasCallStack 
=> Bool

Treat BlackBox expression as declaration

-> DeclarationType

Should the returned declarations be concurrent or sequential?

-> NetlistId

Id to assign the result to

-> Term

Term to convert to an expression

-> NetlistMonad (Expr, [Declaration])

Returned expression and a list of generate BlackBox declarations

Generate an expression for a term occurring on the RHS of a let-binder

mkProjection Source #

Arguments

:: Bool

Projection must bind to a simple variable

-> NetlistId

The signal to which the projection is (potentially) assigned

-> Term

The subject/scrutinee of the projection

-> Type

The type of the result

-> Alt

The field to be projected

-> NetlistMonad (Expr, [Declaration]) 

Generate an expression that projects a field out of a data-constructor.

Works for both product types, as sum-of-product types.

mkDcApplication Source #

Arguments

:: HasCallStack 
=> [HWType]

HWType of the LHS of the let-binder, can multiple types when we're creating a "split" product type (e.g. a tuple of a Clock and Reset)

-> NetlistId

Id to assign the result to

-> DataCon

Applied DataCon

-> [Term]

DataCon Arguments

-> NetlistMonad (Expr, [Declaration])

Returned expression and a list of generate BlackBox declarations

Generate an expression for a DataCon application occurring on the RHS of a let-binder