Previously, dataconstructor arguments that had no arguments themselves
(eg. False, or High), would be extracted from an argument list, even
though they were just simple variable references. Since such a datacon can
be translated to a VHDL literal and VHDL supports mapping expressions (at
least constant expressions) to a port, there is no need for extraction
anymore.
* git://github.com/darchon/clash:
We now output VHDL types in the correct order
Removed the need for a special vector-type map.
Added builtin functions: concat, reverse, iterate, iteraten, generate and generaten
Christiaan Baaij [Mon, 29 Jun 2009 13:06:34 +0000 (15:06 +0200)]
Merge branch 'cλash' of http://git.stderr.nl/matthijs/projects/master-project
* 'cλash' of http://git.stderr.nl/matthijs/projects/master-project:
Make genMap support mapping applications.
Allow arguments to builtins to be applications.
* git://github.com/darchon/clash:
Added unzip
Added "zip" function
Added <+ and ++ operations
Added support for instances of tfp integer, but poorly...
Added select builtin
Parameterized fold, so that it can be used for foldl and foldr
This is a companion commit to the previous one, to handle the changes in
normal form introduced there. This only works for map so far, the other
higher order functions will be changed later.
This allows things like "map (hwand Low) as" or even "map (hwand x) as" in
normal form. Previously, the "hwand Low" part would be put into its own
function, but that could only work when mapping expression without free
variables.
Christiaan Baaij [Fri, 26 Jun 2009 12:28:34 +0000 (14:28 +0200)]
Added support for instances of tfp integer, but poorly...
They are always used as 'structural' parameters for functions
and as such should not be turned in to ports when these
arguments are applied.
Christiaan Baaij [Fri, 26 Jun 2009 11:09:19 +0000 (13:09 +0200)]
Merge branch 'cλash' of http://git.stderr.nl/matthijs/projects/master-project
* 'cλash' of http://git.stderr.nl/matthijs/projects/master-project:
Let exprToVar give a useful error message.
Use tcSplitSigmaTy for getting at value arguments.
Add is_simple predicate for applications and vars.
Add function-typed argument extraction transform.
Add has_free_vars predicate.
Remove TODO that was already solved.
Disabled foldr generation again, it should either be updated to the
shorter form from my last commits, but preferably foldl should be
abstracted to handle both.
In particular:
* The globalNameTable was moved into Generate.
* A large part of mkConcSm was moved into Generate.
* A BuiltinBuilder now accepts Either CoreBndr VHDLName and
[Either CoreExpr AST.Expr], so we can reuse them even when we no longer
have a CoreBndrs (this does not happen yet, though).
Christiaan Baaij [Thu, 25 Jun 2009 09:16:27 +0000 (11:16 +0200)]
Merge branch 'cλash' of http://git.stderr.nl/matthijs/projects/master-project
* 'cλash' of http://git.stderr.nl/matthijs/projects/master-project:
Unify all BuiltinBuilder functions.
Give HighOrdAlu an and operation.
Let tfvec_len and tfvec_elem give a proper error message.
No longer use a view pattern in HsTools.
By create a few wrapper functions, we can still leave the functions mostly
unchanged, but register them all with the same interface in the
GlobalNameTable.
Christiaan Baaij [Wed, 24 Jun 2009 10:35:50 +0000 (12:35 +0200)]
Merge branch 'cλash' of http://git.stderr.nl/matthijs/projects/master-project
* 'cλash' of http://git.stderr.nl/matthijs/projects/master-project:
Put the Builders in the VHDLSession.
Remove the globalNameTable from the VHDLState.
Swap the VHDLState and VHDLSession type names.
The globalNameTable is never modified, so it can just be referenced
directly. Additionally, having it in the VHDLSession prevents us from
putting the Builder type in the VHDLSession Monad.
Christiaan Baaij [Tue, 23 Jun 2009 14:22:58 +0000 (16:22 +0200)]
Merge branch 'cλash' of http://git.stderr.nl/matthijs/projects/master-project
* 'cλash' of http://git.stderr.nl/matthijs/projects/master-project:
Add a hardware module for a generalized Alu.
Make mkConcSm support a = b style bindings.
Make appsimpl also simplify dataconstructors.
Make subeverywhere support NonRec Lets.
These were previously left alone, since they were considered already
simple (they're simple variable references). However, a dataconstructor
can be translated to a VHDL expression, which can be assigned to a signal,
but not used in the port map of an component instantiation.
Also prevent letremovetop from inlining the datacon again.
Christiaan Baaij [Tue, 23 Jun 2009 13:39:25 +0000 (15:39 +0200)]
Merge branch 'cλash' of http://git.stderr.nl/matthijs/projects/master-project
* 'cλash' of http://git.stderr.nl/matthijs/projects/master-project:
Support turning dataconstructors into VHDL constants.
Use varToVHDLExpr in mkConcSm.
Christiaan Baaij [Tue, 23 Jun 2009 13:10:21 +0000 (15:10 +0200)]
Merge branch 'cλash' of http://git.stderr.nl/matthijs/projects/master-project
* 'cλash' of http://git.stderr.nl/matthijs/projects/master-project:
Ignore cast expressions when generating VHDL.
Add Cast propagation transform.
Make subeverywhere support Cast expressions.
Remove a double line introduced a few commits back.
Make subeverywhere complain for unknown expressions.
Do not apply eta expansion to application arguments.
Doing this can introduce expressions such as:
map (\x -> foo x) xs
which is of course not really what we want. By limiting eta expansion in
this way, we'll still get it where we really want it: At the top level.
Christiaan Baaij [Tue, 23 Jun 2009 11:38:35 +0000 (13:38 +0200)]
Merge branch 'cλash' of http://git.stderr.nl/matthijs/projects/master-project
* 'cλash' of http://git.stderr.nl/matthijs/projects/master-project:
Always add a clk port map on instantiations.
Delete all old .vhdl files before writing new ones.
Prepend "comp_ins_" to component instantiation labels.
Remove dummy mkConcSm clause for r = r bindings.
Return multiple statements instead of a block.
Let mkConcSm return a list of ConcSms.
Christiaan Baaij [Tue, 23 Jun 2009 10:24:25 +0000 (12:24 +0200)]
Merge branch 'cλash' of http://git.stderr.nl/matthijs/projects/master-project
* 'cλash' of http://git.stderr.nl/matthijs/projects/master-project:
Don't generate a signal for the output port.
Perform subsititutions one after another.
Previously, multiple substitutions would be done in a single run of
substExpr, but that did not properly handle the case where one of the
to-be-substituted values appears in the to-be-substituted values. For
example, when performing the substitution [(a, b), (b, c)] on the
expression a, we would get b (while we want to get c).
Christiaan Baaij [Mon, 22 Jun 2009 13:17:07 +0000 (15:17 +0200)]
Merge branch 'cλash' of http://git.stderr.nl/matthijs/projects/master-project
* 'cλash' of http://git.stderr.nl/matthijs/projects/master-project:
Append the Unique to generated VHDL entity id's.
Generate the VHDLId of an entity in a single place.
Remove the old builtin function support.
Add error message to mkConcSm for unsupported expressions.
Fix definition of hwor builtin operator.
Generate the VHDLId of an entity in a single place.
Additionally, make the SignatureMap indexed by CoreBndr instead of String.
This was previously not possible, because the builtin function also needed
to be in the signature map. This is no longer the case.