litex.git
9 years agoUsing a newer version of iverilog.
Tim 'mithro' Ansell [Tue, 14 Apr 2015 08:28:57 +0000 (18:28 +1000)]
Using a newer version of iverilog.

9 years agoMakefile now uses iverilog-vpi
Tim 'mithro' Ansell [Tue, 14 Apr 2015 08:28:56 +0000 (18:28 +1000)]
Makefile now uses iverilog-vpi

From `man iverilog-vpi`;
> iverilog-vpi is a tool to simplify the compilation of VPI modules for use
> with Icarus Verilog. It takes on the command line a list of C or C++ source
> files, and generates as output a linked VPI module.

Fixes https://github.com/m-labs/migen/issues/11

9 years agoAdding .egg-info to the .gitignore
Tim 'mithro' Ansell [Tue, 14 Apr 2015 08:28:55 +0000 (18:28 +1000)]
Adding .egg-info to the .gitignore

9 years agoAdding simple travis-ci build.
Tim 'mithro' Ansell [Tue, 14 Apr 2015 08:28:54 +0000 (18:28 +1000)]
Adding simple travis-ci build.

Fixes https://github.com/m-labs/migen/issues/10

9 years agoREADME: add link to online docs
Sebastien Bourdeauducq [Tue, 14 Apr 2015 15:08:21 +0000 (23:08 +0800)]
README: add link to online docs

9 years agoExpanding the install instructions a little.
Tim 'mithro' Ansell [Tue, 14 Apr 2015 08:24:28 +0000 (18:24 +1000)]
Expanding the install instructions a little.

This is based on the discussion at https://github.com/m-labs/misoc/issues/6

9 years agorevert fhdl/verilog: avoid reg initialization in printheader when reset is not an...
Florent Kermarrec [Mon, 13 Apr 2015 19:47:55 +0000 (21:47 +0200)]
revert fhdl/verilog: avoid reg initialization in printheader when reset is not an int. (sorry merge issue)

9 years agomibuild/lattice: adapt diamond to last Migen changes
Florent Kermarrec [Mon, 13 Apr 2015 19:40:58 +0000 (21:40 +0200)]
mibuild/lattice: adapt diamond to last Migen changes

9 years agoglobal: more pep8
Florent Kermarrec [Mon, 13 Apr 2015 19:33:44 +0000 (21:33 +0200)]
global: more pep8
we will have to continue the work... volunteers are welcome :)

9 years agoglobal: pep8 (E265)
Florent Kermarrec [Mon, 13 Apr 2015 19:22:46 +0000 (21:22 +0200)]
global: pep8 (E265)

9 years agoglobal: pep8 (E261, E271)
Florent Kermarrec [Mon, 13 Apr 2015 19:21:30 +0000 (21:21 +0200)]
global: pep8 (E261, E271)

9 years agoglobal: pep8 (E225)
Florent Kermarrec [Mon, 13 Apr 2015 19:11:13 +0000 (21:11 +0200)]
global: pep8 (E225)

9 years agoglobal: pep8 (E222)
Florent Kermarrec [Mon, 13 Apr 2015 18:55:21 +0000 (20:55 +0200)]
global: pep8 (E222)

9 years agoglobal: pep8 (E401)
Florent Kermarrec [Mon, 13 Apr 2015 18:54:19 +0000 (20:54 +0200)]
global: pep8 (E401)

9 years agoglobal: pep8 (E231)
Florent Kermarrec [Mon, 13 Apr 2015 18:50:03 +0000 (20:50 +0200)]
global: pep8 (E231)

9 years agoglobal: pep8 (E302)
Florent Kermarrec [Mon, 13 Apr 2015 18:45:35 +0000 (20:45 +0200)]
global: pep8 (E302)

9 years agoglobal: pep8 (replace tabs with spaces)
Florent Kermarrec [Mon, 13 Apr 2015 18:07:07 +0000 (20:07 +0200)]
global: pep8 (replace tabs with spaces)

9 years agoMerge branch 'master' of https://github.com/m-labs/migen
Florent Kermarrec [Mon, 13 Apr 2015 07:37:03 +0000 (09:37 +0200)]
Merge branch 'master' of https://github.com/m-labs/migen

9 years agosim: fix to support ConvOutput
Sebastien Bourdeauducq [Sun, 12 Apr 2015 06:06:57 +0000 (14:06 +0800)]
sim: fix to support ConvOutput

9 years agofhdl/verilog: avoid reg initialization in printheader when reset is not an int.
Florent Kermarrec [Fri, 10 Apr 2015 15:18:07 +0000 (17:18 +0200)]
fhdl/verilog: avoid reg initialization in printheader when reset is not an int.

We should be able to reset a signal with the value of another one. Without this change it's not possible to do so since synthesis tools do not support initializing a signal from another one.

9 years agoAdd example of hamming generator and checker instances
Guy Hutchison [Thu, 9 Apr 2015 00:24:09 +0000 (17:24 -0700)]
Add example of hamming generator and checker instances

--089e01294e809a874205133faa19
Content-Type: text/plain; charset=UTF-8

<div dir="ltr"><br></div>

9 years agostrace_tailor: make more generic, cleanup
Robert Jordens [Thu, 9 Apr 2015 21:17:19 +0000 (15:17 -0600)]
strace_tailor: make more generic, cleanup

9 years agoforgot other cordic files
Sebastien Bourdeauducq [Thu, 9 Apr 2015 04:00:20 +0000 (12:00 +0800)]
forgot other cordic files

9 years agointroduce conversion output object (prevents file IO in FHDL backends)
Sebastien Bourdeauducq [Wed, 8 Apr 2015 12:28:23 +0000 (20:28 +0800)]
introduce conversion output object (prevents file IO in FHDL backends)

9 years agomibuild/tools/write_to_file: use context manager
Sebastien Bourdeauducq [Wed, 8 Apr 2015 11:41:54 +0000 (19:41 +0800)]
mibuild/tools/write_to_file: use context manager

9 years agogenlib: remove cordic (will live in pdq2)
Sebastien Bourdeauducq [Wed, 8 Apr 2015 03:35:53 +0000 (11:35 +0800)]
genlib: remove cordic (will live in pdq2)

9 years agodecorators: remove deprecated semantics
Robert Jordens [Sun, 5 Apr 2015 09:49:07 +0000 (03:49 -0600)]
decorators: remove deprecated semantics

9 years agodecorators: fix stacklevel, export in std
Robert Jordens [Sun, 5 Apr 2015 09:49:06 +0000 (03:49 -0600)]
decorators: fix stacklevel, export in std

9 years agodecorators: fix ControlInserter
Robert Jordens [Sun, 5 Apr 2015 06:20:23 +0000 (00:20 -0600)]
decorators: fix ControlInserter

9 years agofhdl/visit: remove TransformModule
Sebastien Bourdeauducq [Sat, 4 Apr 2015 12:12:22 +0000 (20:12 +0800)]
fhdl/visit: remove TransformModule

9 years agodecorators: fix class/instance logic
Robert Jordens [Fri, 3 Apr 2015 20:55:20 +0000 (14:55 -0600)]
decorators: fix class/instance logic

9 years agofhdl/decorators: make the transform logic more idiomatic
Robert Jordens [Thu, 2 Apr 2015 20:28:19 +0000 (14:28 -0600)]
fhdl/decorators: make the transform logic more idiomatic

* the transformers work on classes and instances.
  you can now do just do:

    @ResetInserter()
    @ClockDomainRenamer({"sys": "new"})
    class Foo(Module):
        pass

  or:

    a = ResetInserter()(FooModule())

* the old usage semantics still work
* the old DecorateModule is deprecated,
  ModuleDecorator has been refactored into ModuleTransformer
  (because it not only decorates things)

9 years agovivado: support phys_opt
Robert Jordens [Fri, 3 Apr 2015 20:55:23 +0000 (14:55 -0600)]
vivado: support phys_opt

9 years agovivado: add support for pre_synthesis_commands
Robert Jordens [Fri, 3 Apr 2015 20:55:22 +0000 (14:55 -0600)]
vivado: add support for pre_synthesis_commands

9 years agovivado: make _build_files() a method and rename
Robert Jordens [Fri, 3 Apr 2015 20:55:21 +0000 (14:55 -0600)]
vivado: make _build_files() a method and rename

9 years agomibuild: support multiple specifications of include file and sources
Sebastien Bourdeauducq [Sat, 4 Apr 2015 10:58:02 +0000 (18:58 +0800)]
mibuild: support multiple specifications of include file and sources

9 years agoMerge branch 'master' of github.com:m-labs/migen
Sebastien Bourdeauducq [Thu, 2 Apr 2015 12:23:12 +0000 (20:23 +0800)]
Merge branch 'master' of github.com:m-labs/migen

9 years agokc705: fix typo in platform file (LPC definition)
Yann Sionneau [Thu, 2 Apr 2015 11:58:20 +0000 (13:58 +0200)]
kc705: fix typo in platform file (LPC definition)

9 years agoremove use of _r prefix on CSRs
Florent Kermarrec [Thu, 2 Apr 2015 10:15:56 +0000 (12:15 +0200)]
remove use of _r prefix on CSRs

9 years agomigen/bank/description: remove support of _r prefix in CSRs
Florent Kermarrec [Thu, 2 Apr 2015 10:13:22 +0000 (12:13 +0200)]
migen/bank/description: remove support of _r prefix in CSRs

9 years agoremove redundant xilinx_strace_tailor.sh
Florent Kermarrec [Mon, 30 Mar 2015 16:58:34 +0000 (18:58 +0200)]
remove redundant xilinx_strace_tailor.sh

9 years agomove xilinx_strace_tailor to tools
Sebastien Bourdeauducq [Mon, 30 Mar 2015 11:42:11 +0000 (19:42 +0800)]
move xilinx_strace_tailor to tools

9 years agoRevert "migen: create VerilogConvert and EDIFConvert classes and return it with conve...
Sebastien Bourdeauducq [Mon, 30 Mar 2015 11:41:16 +0000 (19:41 +0800)]
Revert "migen: create VerilogConvert and EDIFConvert classes and return it with convert functions"

This reverts commit f03aa7629256c6ff6ae3129e3c353a8cb141444d.

9 years agoRevert "migen/fhdl: pass fdict filename --> contents to specials"
Sebastien Bourdeauducq [Mon, 30 Mar 2015 11:41:13 +0000 (19:41 +0800)]
Revert "migen/fhdl: pass fdict filename --> contents to specials"

This reverts commit ea04947519224628948b10c9b9e42cd0ed2252d6.

9 years agoRevert "migen/fhdl/specials: use fdict to pass memory initialization files to Verilog...
Sebastien Bourdeauducq [Mon, 30 Mar 2015 11:41:04 +0000 (19:41 +0800)]
Revert "migen/fhdl/specials: use fdict to pass memory initialization files to VerilogConvert and print them in __str__ method"

This reverts commit 95cfc444e60ea18fa0efef229582923b2e695631.

9 years agomibuild/platforms: fix minispartan6
Florent Kermarrec [Mon, 30 Mar 2015 09:42:14 +0000 (11:42 +0200)]
mibuild/platforms: fix minispartan6

9 years agomigen/fhdl/specials: use fdict to pass memory initialization files to VerilogConvert...
Florent Kermarrec [Mon, 30 Mar 2015 09:26:10 +0000 (11:26 +0200)]
migen/fhdl/specials: use fdict to pass memory initialization files to VerilogConvert and print them in __str__ method

9 years agomigen/fhdl: pass fdict filename --> contents to specials
Florent Kermarrec [Mon, 30 Mar 2015 09:09:29 +0000 (11:09 +0200)]
migen/fhdl: pass fdict filename --> contents to specials

9 years agomigen: create VerilogConvert and EDIFConvert classes and return it with convert functions
Florent Kermarrec [Mon, 30 Mar 2015 08:42:42 +0000 (10:42 +0200)]
migen: create VerilogConvert and EDIFConvert classes and return it with convert functions

9 years agoMerge branch 'master' of github.com:m-labs/migen
Sebastien Bourdeauducq [Sun, 29 Mar 2015 16:52:15 +0000 (00:52 +0800)]
Merge branch 'master' of github.com:m-labs/migen

9 years agoplatforms/lx9_microboard,usrp_b100: fix bitgen opts
Sebastien Bourdeauducq [Sun, 29 Mar 2015 16:44:56 +0000 (00:44 +0800)]
platforms/lx9_microboard,usrp_b100: fix bitgen opts

9 years agoplatforms/kc705: fix .bin generation with ISE and Vivado
Florent Kermarrec [Sun, 29 Mar 2015 10:16:33 +0000 (12:16 +0200)]
platforms/kc705: fix .bin generation with ISE and Vivado

9 years agoplatforms/kc705: add iMPACT programmer
Florent Kermarrec [Sun, 29 Mar 2015 10:15:39 +0000 (12:15 +0200)]
platforms/kc705: add iMPACT programmer

9 years agoMerge branch 'master' of https://github.com/m-labs/migen
Sebastien Bourdeauducq [Fri, 27 Mar 2015 18:22:03 +0000 (19:22 +0100)]
Merge branch 'master' of https://github.com/m-labs/migen

9 years agoadd tool to build minimal xilinx toolchains
Robert Jordens [Fri, 27 Mar 2015 18:21:16 +0000 (19:21 +0100)]
add tool to build minimal xilinx toolchains

9 years agomibuild/sim: use the same architecture we use for others backends
Florent Kermarrec [Fri, 27 Mar 2015 13:14:49 +0000 (14:14 +0100)]
mibuild/sim: use the same architecture we use for others backends

9 years agoplatforms/minispartan6: add ftdi_fifo pins
Florent Kermarrec [Sun, 22 Mar 2015 10:20:22 +0000 (11:20 +0100)]
platforms/minispartan6: add ftdi_fifo pins

9 years agoplatforms/minispartan6: fix IOStandard/Slew, add FpgaProg programmer, change default...
Florent Kermarrec [Sun, 22 Mar 2015 02:23:17 +0000 (03:23 +0100)]
platforms/minispartan6: fix IOStandard/Slew, add FpgaProg programmer, change default clock to 32MHz

9 years agomibuild/xilinx/programmer: add iMPACT programmer (for sb: I need it in Windows for...
Florent Kermarrec [Sat, 21 Mar 2015 19:27:11 +0000 (20:27 +0100)]
mibuild/xilinx/programmer: add iMPACT programmer (for sb: I need it in Windows for now since I was not able to get XC3SPROG working)

9 years agomibuild/platforms/minispartan6: adapt to recent changes (able to build simple example)
Florent Kermarrec [Sat, 21 Mar 2015 17:31:50 +0000 (18:31 +0100)]
mibuild/platforms/minispartan6: adapt to recent changes (able to build simple example)

9 years agomibuild/platforms/minispartan6: add device parameter (board can be populated with...
Florent Kermarrec [Sat, 21 Mar 2015 17:28:09 +0000 (18:28 +0100)]
mibuild/platforms/minispartan6: add device parameter (board can be populated with lx9 or lx25)

9 years agomibuild/platforms: review and fix small mistakes
Florent Kermarrec [Sat, 21 Mar 2015 17:23:35 +0000 (18:23 +0100)]
mibuild/platforms: review and fix small mistakes

9 years agomibuild/platforms: add minispartan6 (from Matt O'Gorman)
Florent Kermarrec [Sat, 21 Mar 2015 17:22:26 +0000 (18:22 +0100)]
mibuild/platforms: add minispartan6 (from Matt O'Gorman)

9 years agotest_actor: add unittests for SimActor
Robert Jordens [Fri, 20 Mar 2015 21:10:41 +0000 (15:10 -0600)]
test_actor: add unittests for SimActor

* also implicitly tests for the access of signals during simulation that are
not referenced in any statements

* before, if the busy signal is never used, it is stripped
  and could not be accessed in simulation

9 years agosim: keep track of unreferenced items
Robert Jordens [Fri, 20 Mar 2015 21:10:40 +0000 (15:10 -0600)]
sim: keep track of unreferenced items

* items that are never referenced in any statements do not end up in the
namespace or in the verilog

* this memorizes items if they can not be found in the namespace and keeps
track of their values

9 years agopipistrello: switch is a button
Robert Jordens [Thu, 19 Mar 2015 17:27:05 +0000 (11:27 -0600)]
pipistrello: switch is a button

9 years agopipistrello: compress and load bitstream at 6MHz
Robert Jordens [Thu, 19 Mar 2015 17:48:43 +0000 (18:48 +0100)]
pipistrello: compress and load bitstream at 6MHz

9 years agopipistrello: rename sdram->ddram
Robert Jordens [Thu, 19 Mar 2015 17:47:54 +0000 (18:47 +0100)]
pipistrello: rename sdram->ddram

9 years agofhdl/verilog: fix dummy signal initial event
Sebastien Bourdeauducq [Wed, 18 Mar 2015 23:24:30 +0000 (00:24 +0100)]
fhdl/verilog: fix dummy signal initial event

9 years agomibuild/lattice/diamond: add verilog include path (thanks Lattice's FAE since it...
Florent Kermarrec [Wed, 18 Mar 2015 17:54:22 +0000 (18:54 +0100)]
mibuild/lattice/diamond: add verilog include path (thanks Lattice's FAE since it's not documented)

9 years agofhdl/specials/memory: use $readmemh to initialize memories
Florent Kermarrec [Wed, 18 Mar 2015 14:16:11 +0000 (15:16 +0100)]
fhdl/specials/memory: use $readmemh to initialize memories

9 years agofhdl/verilog: change the way we initialize reg: reg name = init_value;
Florent Kermarrec [Wed, 18 Mar 2015 14:04:58 +0000 (15:04 +0100)]
fhdl/verilog: change the way we initialize reg: reg name = init_value;
This allows simplifications (init in _printsync and _printinit no longer needed)

9 years agofhdl/verilog: revert "fhdl/verilog: add simulation parameter to avoid simulation...
Florent Kermarrec [Wed, 18 Mar 2015 13:58:40 +0000 (14:58 +0100)]
fhdl/verilog: revert "fhdl/verilog: add simulation parameter to avoid simulation tricks in synthetizable code"

This probably breaks simulation with Icarus Verilog (and others simulators?)

9 years agomigen/genlib/io: use 0 instead of Signal() for default rst value (immutable thanks sb)
Florent Kermarrec [Wed, 18 Mar 2015 13:41:43 +0000 (14:41 +0100)]
migen/genlib/io: use 0 instead of Signal() for default rst value (immutable thanks sb)

9 years agoRevert "fhdl/verilog: do not use initial begin in _printinit (not accepted by all...
Sebastien Bourdeauducq [Wed, 18 Mar 2015 11:08:25 +0000 (12:08 +0100)]
Revert "fhdl/verilog: do not use initial begin in _printinit (not accepted by all synthesis tools ex: Synplify Pro does not accept it)"

This breaks simulations, and we will try to use the "reg name = value" syntax instead.

This reverts commit e946f6e4538277308e374cd1f0b1b9a31f66dc5a.

9 years agogenlib/io: add optional external rst to CRG
Florent Kermarrec [Tue, 17 Mar 2015 15:22:22 +0000 (16:22 +0100)]
genlib/io: add optional external rst to CRG

9 years agomibuild/platform/versa: fix clock_constraints
Florent Kermarrec [Tue, 17 Mar 2015 14:25:10 +0000 (15:25 +0100)]
mibuild/platform/versa: fix clock_constraints

9 years agomibuild/lattice: use ODDRXD1 and new synthesis directive
Florent Kermarrec [Tue, 17 Mar 2015 13:59:36 +0000 (14:59 +0100)]
mibuild/lattice: use ODDRXD1 and new synthesis directive

9 years agofhdl/special: add optional synthesis directive (needed by Synplify Pro)
Florent Kermarrec [Tue, 17 Mar 2015 13:59:05 +0000 (14:59 +0100)]
fhdl/special: add optional synthesis directive (needed by Synplify Pro)

9 years agomibuild/lattice: add LatticeAsyncResetSynchronizer
Florent Kermarrec [Tue, 17 Mar 2015 11:42:36 +0000 (12:42 +0100)]
mibuild/lattice: add LatticeAsyncResetSynchronizer

9 years agomibuild/platforms/versa: add ethernet clock constraints
Florent Kermarrec [Tue, 17 Mar 2015 11:04:00 +0000 (12:04 +0100)]
mibuild/platforms/versa: add ethernet clock constraints

9 years agomibuild/platforms/versa: add rst_n
Florent Kermarrec [Tue, 17 Mar 2015 10:51:34 +0000 (11:51 +0100)]
mibuild/platforms/versa: add rst_n

9 years agomibuild/lattice: fix LatticeDDROutput
Florent Kermarrec [Tue, 17 Mar 2015 08:40:25 +0000 (09:40 +0100)]
mibuild/lattice: fix LatticeDDROutput

9 years agofhdl/verilog: add simulation parameter to avoid simulation tricks in synthetizable...
Florent Kermarrec [Mon, 16 Mar 2015 23:25:19 +0000 (00:25 +0100)]
fhdl/verilog: add simulation parameter to avoid simulation tricks in synthetizable code
it's generally better to have identical code between simulations and synthesis, but here tricks inserted for simulation are clearly expected to be simplified by synthesis tools, so it's better not inserting them.

9 years agofhdl/verilog: do not use initial begin in _printinit (not accepted by all synthesis...
Florent Kermarrec [Mon, 16 Mar 2015 22:39:32 +0000 (23:39 +0100)]
fhdl/verilog: do not use initial begin in _printinit (not accepted by all synthesis tools ex: Synplify Pro does not accept it)

9 years agomibuild/xilinx/common: add LatticeDDROutput
Florent Kermarrec [Mon, 16 Mar 2015 21:57:18 +0000 (22:57 +0100)]
mibuild/xilinx/common: add LatticeDDROutput

9 years agomibuild/xilinx/common: add XilinxDDROutput
Florent Kermarrec [Mon, 16 Mar 2015 21:53:05 +0000 (22:53 +0100)]
mibuild/xilinx/common: add XilinxDDROutput

9 years agomigen/genlib/io: add DDRInput and DDROutput
Florent Kermarrec [Mon, 16 Mar 2015 21:47:13 +0000 (22:47 +0100)]
migen/genlib/io: add DDRInput and DDROutput

9 years agomibuild/platforms: add ethernet to versa
Florent Kermarrec [Mon, 16 Mar 2015 21:23:20 +0000 (22:23 +0100)]
mibuild/platforms: add ethernet to versa

9 years agomibuild/platforms: add user_dip_btn to versa
Florent Kermarrec [Mon, 16 Mar 2015 21:11:15 +0000 (22:11 +0100)]
mibuild/platforms: add user_dip_btn to versa

9 years agomibuild/lattice: use new Toolchain/Platform architecture
Florent Kermarrec [Mon, 16 Mar 2015 20:13:54 +0000 (21:13 +0100)]
mibuild/lattice: use new Toolchain/Platform architecture

9 years agomibuild/altera: use new Toolchain/Platform architecture
Florent Kermarrec [Mon, 16 Mar 2015 19:44:29 +0000 (20:44 +0100)]
mibuild/altera: use new Toolchain/Platform architecture

9 years agomibuild: add initial Lattice Diamond support (with ECP3 Versa board platform skeleton)
Florent Kermarrec [Mon, 16 Mar 2015 11:01:27 +0000 (12:01 +0100)]
mibuild: add initial Lattice Diamond support (with ECP3 Versa board platform skeleton)

9 years agomove pytholite to separate repos
Sebastien Bourdeauducq [Sat, 14 Mar 2015 21:48:03 +0000 (22:48 +0100)]
move pytholite to separate repos

9 years agofhdl/visit: fix TransformModule
Sebastien Bourdeauducq [Sat, 14 Mar 2015 16:45:11 +0000 (17:45 +0100)]
fhdl/visit: fix TransformModule

9 years agomibuild/xilinx: export special_overrides dictionary
Sebastien Bourdeauducq [Sat, 14 Mar 2015 09:45:11 +0000 (10:45 +0100)]
mibuild/xilinx: export special_overrides dictionary

9 years agomibuild/xilinx: remove obsolete CRG_DS
Sebastien Bourdeauducq [Fri, 13 Mar 2015 23:27:24 +0000 (00:27 +0100)]
mibuild/xilinx: remove obsolete CRG_DS

9 years agomibuild: sanitize default clock management
Sebastien Bourdeauducq [Fri, 13 Mar 2015 23:10:08 +0000 (00:10 +0100)]
mibuild: sanitize default clock management

9 years agomibuild: get rid of Platform factory function, cleanup
Sebastien Bourdeauducq [Fri, 13 Mar 2015 22:17:45 +0000 (23:17 +0100)]
mibuild: get rid of Platform factory function, cleanup

9 years agomigen/genlib/io: add DifferentialOutput and Xilinx implementation
Florent Kermarrec [Thu, 12 Mar 2015 18:30:57 +0000 (19:30 +0100)]
migen/genlib/io: add DifferentialOutput and Xilinx implementation