summaryrefslogtreecommitdiff
path: root/docs/src/wiki-deprecated/functional-module-creation.md
diff options
context:
space:
mode:
authorMegan Wachs2021-03-18 16:47:58 -0700
committerGitHub2021-03-18 16:47:58 -0700
commitf1ad5b58e8a749d558758288d03ce75bf6b8ff9c (patch)
tree2150d6f41a55f81c9f4cf3b037b715cb75ea617f /docs/src/wiki-deprecated/functional-module-creation.md
parent2a56c6540e914611ac12647e157aec4c5c595758 (diff)
Reorganize website docs (#1806)
Updates to chisel3 documentation for website: * guard code examples with mdoc and fix errors encountered along the way * move some website content here vs splitting the content across two repos * Bring in the interval-types and loading memories content so that it will be visible from the website * remove all references to the wiki (deprecated) * Remove reference to Wiki from the README * fix tabbing and compile of chisel3-vs-chisel2 section * Appendix: faqs now guarded and compile * FAQs: move to resources section
Diffstat (limited to 'docs/src/wiki-deprecated/functional-module-creation.md')
-rw-r--r--docs/src/wiki-deprecated/functional-module-creation.md79
1 files changed, 0 insertions, 79 deletions
diff --git a/docs/src/wiki-deprecated/functional-module-creation.md b/docs/src/wiki-deprecated/functional-module-creation.md
deleted file mode 100644
index 3e2e95bc..00000000
--- a/docs/src/wiki-deprecated/functional-module-creation.md
+++ /dev/null
@@ -1,79 +0,0 @@
----
-layout: docs
-title: "Functional Module Creation"
-section: "chisel3"
----
-Objects in Scala have a pre-existing creation function (method) called `apply`.
-When an object is used as value in an expression (which basically means that the constructor was called), this method determines the returned value.
-When dealing with hardware modules, one would expect the module output to be representative of the hardware module's functionality.
-Therefore, we would sometimes like the module output to be the value returned when using the object as a value in an expression.
-Since hardware modules are represented as Scala objects, this can be done by defining the object's `apply` method to return the module's output.
-This can be referred to as creating a functional interface for module construction.
-If we apply this on the standard mux2 example, we would to return the mux2 output ports when we used mux2 in an expression.
-Implementing this requires building a constructor that takes multiplexer inputs as parameters and returns the multiplexer output:
-
-```scala
-object Mux2 {
- def apply(sel: UInt, in0: UInt, in1: UInt) = {
- val m = Module(new Mux2)
- m.io.in0 := in0
- m.io.in1 := in1
- m.io.sel := sel
- m.io.out
- }
-}
-```
-
-As we can see in the code example, we defined the `apply` method to take the Mux2 inputs as the method parameters, and return the Mux2 output as the function's return value.
-By defining modules in this way, it is easier to later implement larger and more complex version of this regular module.
-For example, we previously implemented Mux4 like this:
-
-```scala
-class Mux4 extends Module {
- val io = IO(new Bundle {
- val in0 = Input(UInt(1.W))
- val in1 = Input(UInt(1.W))
- val in2 = Input(UInt(1.W))
- val in3 = Input(UInt(1.W))
- val sel = Input(UInt(2.W))
- val out = Output(UInt(1.W))
- })
- val m0 = Module(new Mux2)
- m0.io.sel := io.sel(0)
- m0.io.in0 := io.in0
- m0.io.in1 := io.in1
-
- val m1 = Module(new Mux2)
- m1.io.sel := io.sel(0)
- m1.io.in0 := io.in2
- m1.io.in1 := io.in3
-
- val m3 = Module(new Mux2)
- m3.io.sel := io.sel(1)
- m3.io.in0 := m0.io.out
- m3.io.in1 := m1.io.out
-
- io.out := m3.io.out
-}
-```
-
-However, by using the creation function we redefined for Mux2, we can now use the Mux2 outputs as values of the modules themselves
-when writing the Mux4 output expression:
-
-```scala
-class Mux4 extends Module {
- val io = IO(new Bundle {
- val in0 = Input(UInt(1.W))
- val in1 = Input(UInt(1.W))
- val in2 = Input(UInt(1.W))
- val in3 = Input(UInt(1.W))
- val sel = Input(UInt(2.W))
- val out = Output(UInt(1.W))
- })
- io.out := Mux2(io.sel(1),
- Mux2(io.sel(0), io.in0, io.in1),
- Mux2(io.sel(0), io.in2, io.in3))
-}
-```
-
-This allows to write more intuitively readable hardware connection descriptions, which are similar to software expression evaluation.