├── docs
├── .gitignore
├── chapters
│ ├── branching.md
│ ├── epilogue.md
│ ├── data-memory.md
│ ├── three-operands.md
│ ├── use-byte-addressing.md
│ ├── four-bit-accumulator.md
│ ├── increased-register-count.md
│ ├── increased-register-width.md
│ ├── instruction-register.md
│ ├── change-instruction-encoding.md
│ ├── increased-instruction-size.md
│ ├── instruction-memory.md
│ ├── converting-to-armv8.md
│ ├── stored-program-computer.md
│ ├── sequential.md
│ ├── tristate.md
│ ├── logic-design-review.md
│ ├── combinational.md
│ ├── combinational-vs-pipelined-multiplier.md
│ ├── synchronous.md
│ ├── propagation-clock.md
│ └── getting-started.md
├── images
│ ├── mux4.png
│ ├── period.png
│ ├── sync.gif
│ ├── execution.gif
│ ├── full_adder.gif
│ ├── propagation.gif
│ ├── sequential.gif
│ ├── sequential.png
│ ├── combinational.png
│ ├── tristate_mux.png
│ ├── pipelined_multiplier.png
│ └── combinational_multiplier.png
├── FontAwesome
│ └── fonts
│ │ ├── FontAwesome.ttf
│ │ ├── fontawesome-webfont.eot
│ │ ├── fontawesome-webfont.ttf
│ │ ├── fontawesome-webfont.woff
│ │ └── fontawesome-webfont.woff2
├── fonts
│ ├── open-sans-v17-all-charsets-300.woff2
│ ├── open-sans-v17-all-charsets-600.woff2
│ ├── open-sans-v17-all-charsets-700.woff2
│ ├── open-sans-v17-all-charsets-800.woff2
│ ├── open-sans-v17-all-charsets-italic.woff2
│ ├── open-sans-v17-all-charsets-regular.woff2
│ ├── open-sans-v17-all-charsets-300italic.woff2
│ ├── open-sans-v17-all-charsets-600italic.woff2
│ ├── open-sans-v17-all-charsets-700italic.woff2
│ ├── open-sans-v17-all-charsets-800italic.woff2
│ ├── source-code-pro-v11-all-charsets-500.woff2
│ ├── fonts.css
│ ├── SOURCE-CODE-PRO-LICENSE.txt
│ └── OPEN-SANS-LICENSE.txt
├── 404.html
├── index.md
├── css
│ ├── print.css
│ ├── general.css
│ ├── variables.css
│ └── chrome.css
├── _includes
│ ├── footer.html
│ ├── head.html
│ └── header.html
├── Gemfile
├── ayu-highlight.css
├── highlight.css
├── _config.yml
├── Gemfile.lock
├── tomorrow-night.css
├── _layouts
│ └── default.html
├── clipboard.min.js
└── mark.min.js
├── LICENSE
├── README.md
├── sequential.circ
├── full_adder.circ
├── acc4_simplified.circ
├── sync.circ
├── propagation.circ
├── acc4_4regs.circ
├── mux4.circ
└── reg4_4regs.circ
/docs/.gitignore:
--------------------------------------------------------------------------------
1 | _site
2 | .sass-cache
3 | .jekyll-cache
4 | .jekyll-metadata
5 | vendor
6 |
--------------------------------------------------------------------------------
/docs/chapters/branching.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Adding Branching
3 | layout: default
4 | ---
5 |
6 | `TODO`
7 |
--------------------------------------------------------------------------------
/docs/chapters/epilogue.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Epilogue
3 | layout: default
4 | ---
5 |
6 | Not numbered.
7 |
--------------------------------------------------------------------------------
/docs/chapters/data-memory.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Adding a Data Memory
3 | layout: default
4 | ---
5 |
6 | `TODO`
7 |
--------------------------------------------------------------------------------
/docs/chapters/three-operands.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Using Three Operands
3 | layout: default
4 | ---
5 |
6 | `TODO`
7 |
--------------------------------------------------------------------------------
/docs/images/mux4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/images/mux4.png
--------------------------------------------------------------------------------
/docs/images/period.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/images/period.png
--------------------------------------------------------------------------------
/docs/images/sync.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/images/sync.gif
--------------------------------------------------------------------------------
/docs/chapters/use-byte-addressing.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Using Byte-Addressing
3 | layout: default
4 | ---
5 |
6 | `TODO`
7 |
--------------------------------------------------------------------------------
/docs/images/execution.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/images/execution.gif
--------------------------------------------------------------------------------
/docs/images/full_adder.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/images/full_adder.gif
--------------------------------------------------------------------------------
/docs/images/propagation.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/images/propagation.gif
--------------------------------------------------------------------------------
/docs/images/sequential.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/images/sequential.gif
--------------------------------------------------------------------------------
/docs/images/sequential.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/images/sequential.png
--------------------------------------------------------------------------------
/docs/chapters/four-bit-accumulator.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Four-bit Accumulator Machine
3 | layout: default
4 | ---
5 |
6 | `TODO`
7 |
--------------------------------------------------------------------------------
/docs/chapters/increased-register-count.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Increased Register Count
3 | layout: default
4 | ---
5 |
6 | `TODO`
7 |
--------------------------------------------------------------------------------
/docs/chapters/increased-register-width.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Increased Register Width
3 | layout: default
4 | ---
5 |
6 | `TODO`
7 |
--------------------------------------------------------------------------------
/docs/chapters/instruction-register.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Using an Instruction Register
3 | layout: default
4 | ---
5 |
6 | `TODO`
7 |
--------------------------------------------------------------------------------
/docs/images/combinational.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/images/combinational.png
--------------------------------------------------------------------------------
/docs/images/tristate_mux.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/images/tristate_mux.png
--------------------------------------------------------------------------------
/docs/chapters/change-instruction-encoding.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Changing Instruction Encoding
3 | layout: default
4 | ---
5 |
6 | `TODO`
7 |
--------------------------------------------------------------------------------
/docs/chapters/increased-instruction-size.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Increased Instruction Count
3 | layout: default
4 | ---
5 |
6 | `TODO`
7 |
--------------------------------------------------------------------------------
/docs/images/pipelined_multiplier.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/images/pipelined_multiplier.png
--------------------------------------------------------------------------------
/docs/FontAwesome/fonts/FontAwesome.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/FontAwesome/fonts/FontAwesome.ttf
--------------------------------------------------------------------------------
/docs/chapters/instruction-memory.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Converting the Instruction Register into Instruction Memory
3 | layout: default
4 | ---
5 |
6 | `TODO`
7 |
--------------------------------------------------------------------------------
/docs/images/combinational_multiplier.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/images/combinational_multiplier.png
--------------------------------------------------------------------------------
/docs/FontAwesome/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/FontAwesome/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/docs/FontAwesome/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/FontAwesome/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/docs/FontAwesome/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/FontAwesome/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/docs/fonts/open-sans-v17-all-charsets-300.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/fonts/open-sans-v17-all-charsets-300.woff2
--------------------------------------------------------------------------------
/docs/fonts/open-sans-v17-all-charsets-600.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/fonts/open-sans-v17-all-charsets-600.woff2
--------------------------------------------------------------------------------
/docs/fonts/open-sans-v17-all-charsets-700.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/fonts/open-sans-v17-all-charsets-700.woff2
--------------------------------------------------------------------------------
/docs/fonts/open-sans-v17-all-charsets-800.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/fonts/open-sans-v17-all-charsets-800.woff2
--------------------------------------------------------------------------------
/docs/FontAwesome/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/FontAwesome/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/docs/fonts/open-sans-v17-all-charsets-italic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/fonts/open-sans-v17-all-charsets-italic.woff2
--------------------------------------------------------------------------------
/docs/fonts/open-sans-v17-all-charsets-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/fonts/open-sans-v17-all-charsets-regular.woff2
--------------------------------------------------------------------------------
/docs/fonts/open-sans-v17-all-charsets-300italic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/fonts/open-sans-v17-all-charsets-300italic.woff2
--------------------------------------------------------------------------------
/docs/fonts/open-sans-v17-all-charsets-600italic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/fonts/open-sans-v17-all-charsets-600italic.woff2
--------------------------------------------------------------------------------
/docs/fonts/open-sans-v17-all-charsets-700italic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/fonts/open-sans-v17-all-charsets-700italic.woff2
--------------------------------------------------------------------------------
/docs/fonts/open-sans-v17-all-charsets-800italic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/fonts/open-sans-v17-all-charsets-800italic.woff2
--------------------------------------------------------------------------------
/docs/fonts/source-code-pro-v11-all-charsets-500.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mkayaalp/computer-organization-logisim/HEAD/docs/fonts/source-code-pro-v11-all-charsets-500.woff2
--------------------------------------------------------------------------------
/docs/chapters/converting-to-armv8.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Converting to ARMv8 Datapath
3 | layout: default
4 | ---
5 |
6 | Over multiple iterations,
7 | we can slightly modify the datapath built so far,
8 | to convert our datapath into an ARMv8 datapath.
9 |
--------------------------------------------------------------------------------
/docs/chapters/stored-program-computer.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Building a Stored Program Computer
3 | layout: default
4 | ---
5 | Through incremental assignments,
6 | with step-by-step instructions,
7 | we can show the construction of the datapath.
8 | Throughout these exercises,
9 | the stored program concept,
10 | instructions, opcodes, operands
11 | and their assembly vs. machine encodings,
12 | and branching facilities can be introduced.
13 |
--------------------------------------------------------------------------------
/docs/404.html:
--------------------------------------------------------------------------------
1 | ---
2 | permalink: /404.html
3 | layout: default
4 | ---
5 |
6 |
19 |
20 |
21 |
404
22 |
23 |
Page not found :(
24 |
The requested page could not be found.
25 |
26 |
--------------------------------------------------------------------------------
/docs/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Home
3 | layout: default
4 | ---
5 | This page demonstrates how [Logisim-evolution](https://github.com/logisim-evolution/logisim-evolution)
6 | can be used to teach and learn computer organization topics.
7 |
8 | The uses range from simple combinational and sequential circuits,
9 | to sufficiently complex ones demonstrating the instruction execution,
10 | memory, and input/output topics.
11 |
12 | The circuit files can be found in the
13 | [git repository](https://github.com/mkayaalp/computer-organization-logisim),
14 | and this documentation can be found under the
15 | [`docs`](https://github.com/mkayaalp/computer-organization-logisim/tree/main/docs) directory.
16 |
--------------------------------------------------------------------------------
/docs/chapters/sequential.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Sequential Logic
3 | layout: default
4 | ---
5 | A sequential circuit has the key addition of **state**, or **memory**:
6 | elements that remember the past.
7 |
8 | 
9 |
10 | The circuit below detects a particular sequence of input values.
11 | Note that when top input is `1` and bottom input is `0`,
12 | the output can be `0` or `1` depending on the current state (values in D flip-flops).
13 |
14 | 
15 |
16 | In fact, the output is set to `1`,
17 | if the top input stays at `1`
18 | while the bottom input goes from `0` to `1`,
19 | then to `0` again.
20 |
21 | You can open the `sequential.circ` file in Logisim to examine this circuit.
22 |
--------------------------------------------------------------------------------
/docs/chapters/tristate.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Tri-state Buffers and Multiplexers
3 | layout: default
4 | ---
5 | By adding text inside Logisim,
6 | we can create circuit files that walk the user through
7 | different examples.
8 |
9 | The figure below shows the `tristate_mux.circ` file that
10 | presents the topics of tristate buffers,
11 | "floating" values (the wire is not driven),
12 | "error" values (the wire is being driven to opposite values),
13 | and implementing multiplexers
14 | with tristate buffers or combinational gates.
15 |
16 | 
17 |
18 | The circuit file `mux4.circ` shows the difference
19 | for a multiplexer selecting from four inputs (4-to-1 multiplexer):
20 |
21 | 
22 |
--------------------------------------------------------------------------------
/docs/css/print.css:
--------------------------------------------------------------------------------
1 |
2 | #sidebar,
3 | #menu-bar,
4 | .nav-chapters,
5 | .mobile-nav-chapters {
6 | display: none;
7 | }
8 |
9 | #page-wrapper.page-wrapper {
10 | transform: none;
11 | margin-left: 0px;
12 | overflow-y: initial;
13 | }
14 |
15 | #content {
16 | max-width: none;
17 | margin: 0;
18 | padding: 0;
19 | }
20 |
21 | .page {
22 | overflow-y: initial;
23 | }
24 |
25 | code {
26 | background-color: #666666;
27 | border-radius: 5px;
28 |
29 | /* Force background to be printed in Chrome */
30 | -webkit-print-color-adjust: exact;
31 | }
32 |
33 | pre > .buttons {
34 | z-index: 2;
35 | }
36 |
37 | a, a:visited, a:active, a:hover {
38 | color: #4183c4;
39 | text-decoration: none;
40 | }
41 |
42 | h1, h2, h3, h4, h5, h6 {
43 | page-break-inside: avoid;
44 | page-break-after: avoid;
45 | }
46 |
47 | pre, code {
48 | page-break-inside: avoid;
49 | white-space: pre-wrap;
50 | }
51 |
52 | .fa {
53 | display: none !important;
54 | }
55 |
--------------------------------------------------------------------------------
/docs/chapters/logic-design-review.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Logic Design Review
3 | layout: default
4 | ---
5 |
6 | A digital logic design course covers the topics of
7 | [combinational](combinational.html) and
8 | [sequential](sequential.html) digital circuits.
9 | We can review the distinction of these circuit types
10 | by showing simple Logisim examples.
11 |
12 | For studying computer organization,
13 | we are particularly interested in
14 | [synchronous](synchronous.html) sequential circuits,
15 | which make it easy for us to analyze the
16 | [propagation delay](propagation-clock.html#propagation-delay)
17 | and determine the
18 | [clock period](propagation-clock.html#clock-period) requirements.
19 |
20 | One topic that might not have been
21 | paid enough attention in a logic design course is
22 | the very useful
23 | [tri-state buffer](tristate.html).
24 | The Logisim wire coloring is helpful
25 | in showing the cases of "floating"---a wire that is not driven,
26 | and "error"---a wire that is driven to opposite values.
27 |
--------------------------------------------------------------------------------
/docs/_includes/footer.html:
--------------------------------------------------------------------------------
1 |
2 |
15 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/docs/chapters/combinational.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Combinational Logic
3 | layout: default
4 | ---
5 | A combinational circuit has inputs, gates and outputs.
6 |
7 | 
8 |
9 | The logic shown below is called a **full adder**,
10 | where the `s` output is the sum of inputs `a`, `b`, and `c_in` (carry in), and `c_out` output is the carry out.
11 |
12 | 
13 |
14 | Note that for a given combinational circuit,
15 | each output is some function of the inputs, and nothing else.
16 | Not of time, and not of its previous inputs.
17 | Appling a particular input combination gives the same output every time.
18 |
19 | You can open the `full_adder.circ` file in Logisim and verify this by toggling the inputs.
20 |
21 | Visually, when the inputs are on the left side and the outputs on the right side,
22 | a combinational circuit can be constructed without any of its wires going from right to left.
23 | The signals would flow in the left-right direction without any loops.
24 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 mkayaalp
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/docs/Gemfile:
--------------------------------------------------------------------------------
1 | source "https://rubygems.org"
2 | # Hello! This is where you manage which Jekyll version is used to run.
3 | # When you want to use a different version, change it below, save the
4 | # file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
5 | #
6 | # bundle exec jekyll serve
7 | #
8 | # This will help ensure the proper Jekyll version is running.
9 | # Happy Jekylling!
10 | gem "jekyll", "~> 4.2.0"
11 | # This is the default theme for new Jekyll sites. You may change this to anything you like.
12 | gem "minima", "~> 2.5"
13 | # If you want to use GitHub Pages, remove the "gem "jekyll"" above and
14 | # uncomment the line below. To upgrade, run `bundle update github-pages`.
15 | # gem "github-pages", group: :jekyll_plugins
16 | # If you have any plugins, put them here!
17 | group :jekyll_plugins do
18 | gem "jekyll-feed", "~> 0.12"
19 | end
20 |
21 | # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
22 | # and associated library.
23 | platforms :mingw, :x64_mingw, :mswin, :jruby do
24 | gem "tzinfo", "~> 1.2"
25 | gem "tzinfo-data"
26 | end
27 |
28 | # Performance-booster for watching directories on Windows
29 | gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin]
30 |
31 |
--------------------------------------------------------------------------------
/docs/ayu-highlight.css:
--------------------------------------------------------------------------------
1 | /*
2 | Based off of the Ayu theme
3 | Original by Dempfi (https://github.com/dempfi/ayu)
4 | */
5 |
6 | .hljs {
7 | display: block;
8 | overflow-x: auto;
9 | background: #191f26;
10 | color: #e6e1cf;
11 | padding: 0.5em;
12 | }
13 |
14 | .hljs-comment,
15 | .hljs-quote {
16 | color: #5c6773;
17 | font-style: italic;
18 | }
19 |
20 | .hljs-variable,
21 | .hljs-template-variable,
22 | .hljs-attribute,
23 | .hljs-attr,
24 | .hljs-regexp,
25 | .hljs-link,
26 | .hljs-selector-id,
27 | .hljs-selector-class {
28 | color: #ff7733;
29 | }
30 |
31 | .hljs-number,
32 | .hljs-meta,
33 | .hljs-builtin-name,
34 | .hljs-literal,
35 | .hljs-type,
36 | .hljs-params {
37 | color: #ffee99;
38 | }
39 |
40 | .hljs-string,
41 | .hljs-bullet {
42 | color: #b8cc52;
43 | }
44 |
45 | .hljs-title,
46 | .hljs-built_in,
47 | .hljs-section {
48 | color: #ffb454;
49 | }
50 |
51 | .hljs-keyword,
52 | .hljs-selector-tag,
53 | .hljs-symbol {
54 | color: #ff7733;
55 | }
56 |
57 | .hljs-name {
58 | color: #36a3d9;
59 | }
60 |
61 | .hljs-tag {
62 | color: #00568d;
63 | }
64 |
65 | .hljs-emphasis {
66 | font-style: italic;
67 | }
68 |
69 | .hljs-strong {
70 | font-weight: bold;
71 | }
72 |
73 | .hljs-addition {
74 | color: #91b362;
75 | }
76 |
77 | .hljs-deletion {
78 | color: #d96c75;
79 | }
80 |
--------------------------------------------------------------------------------
/docs/_includes/head.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ site.title }}
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/docs/chapters/combinational-vs-pipelined-multiplier.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Combinational vs. Pipelined Multiplier
3 | layout: default
4 | ---
5 | After some propagation delay and critical path examples,
6 | a three-bit combinational multiplier is a good example to
7 | test the circuit analysis skills.
8 | It is not trivial circuit,
9 | but it is not very complex either.
10 |
11 | You can find it in the `combinational_multiplier.circ` file.
12 |
13 | 
14 |
15 | Assuming each gate has a certain latency, say 10ns,
16 | - What is the latency of the critical path?
17 | - Which gates are on the/a critical path?
18 | - If A0 is 0 and is ready at t=0,
19 | when would output C0 be ready as 0?
20 | - If all inputs arrive at t=0,
21 | when would the output C1 be ready?
22 | - If A2 is 0 and is ready at t=0,
23 | when would output C5 be ready as 0?
24 |
25 |
26 | The same circuit is implemented as
27 | a sequential (synchronous) circuit as shown below.
28 | This design is said to be **pipelined**.
29 |
30 | You can find this circuit in the `pipelined_multiplier.circ` file.
31 |
32 | 
33 |
34 | Assuming the same gate delay of 10ns, a setup time requirement
35 | of 3ns, and no clock-to-Q delay:
36 | - What is the minimum clock period?
37 | - What is the maximum clock frequency?
38 |
--------------------------------------------------------------------------------
/docs/highlight.css:
--------------------------------------------------------------------------------
1 | /*
2 | * An increased contrast highlighting scheme loosely based on the
3 | * "Base16 Atelier Dune Light" theme by Bram de Haan
4 | * (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune)
5 | * Original Base16 color scheme by Chris Kempson
6 | * (https://github.com/chriskempson/base16)
7 | */
8 |
9 | /* Comment */
10 | .hljs-comment,
11 | .hljs-quote {
12 | color: #575757;
13 | }
14 |
15 | /* Red */
16 | .hljs-variable,
17 | .hljs-template-variable,
18 | .hljs-attribute,
19 | .hljs-tag,
20 | .hljs-name,
21 | .hljs-regexp,
22 | .hljs-link,
23 | .hljs-name,
24 | .hljs-selector-id,
25 | .hljs-selector-class {
26 | color: #d70025;
27 | }
28 |
29 | /* Orange */
30 | .hljs-number,
31 | .hljs-meta,
32 | .hljs-built_in,
33 | .hljs-builtin-name,
34 | .hljs-literal,
35 | .hljs-type,
36 | .hljs-params {
37 | color: #b21e00;
38 | }
39 |
40 | /* Green */
41 | .hljs-string,
42 | .hljs-symbol,
43 | .hljs-bullet {
44 | color: #008200;
45 | }
46 |
47 | /* Blue */
48 | .hljs-title,
49 | .hljs-section {
50 | color: #0030f2;
51 | }
52 |
53 | /* Purple */
54 | .hljs-keyword,
55 | .hljs-selector-tag {
56 | color: #9d00ec;
57 | }
58 |
59 | .hljs {
60 | display: block;
61 | overflow-x: auto;
62 | background: #f6f7f6;
63 | color: #000;
64 | padding: 0.5em;
65 | }
66 |
67 | .hljs-emphasis {
68 | font-style: italic;
69 | }
70 |
71 | .hljs-strong {
72 | font-weight: bold;
73 | }
74 |
75 | .hljs-addition {
76 | color: #22863a;
77 | background-color: #f0fff4;
78 | }
79 |
80 | .hljs-deletion {
81 | color: #b31d28;
82 | background-color: #ffeef0;
83 | }
84 |
--------------------------------------------------------------------------------
/docs/chapters/synchronous.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Synchronous Logic
3 | layout: default
4 | ---
5 | In a combinational circuit, the outputs are not instantenously updated
6 | to their correct values when an input changes (or when the circuit is powered on),
7 | since each gate and interconnect has a propagation delay.
8 |
9 | For a combinational circuit,
10 | this means we have to wait for a certain amount of
11 | time after changing the inputs, before considering the outputs to be valid.
12 |
13 | For sequential circuits, however,
14 | the propagation delay represents a challenge.
15 | The outputs are not only a function of the inputs,
16 | but also of the previous inputs.
17 | We need to pay attention to the order of events,
18 | to ensure state elements and outputs are properly updated.
19 | Often, we want simultaneous updates to distinct state elements:
20 | e.g. a two-bit counter incremented from `01` to `10` without being
21 | interpreted as `00` or `11` in the process,
22 | just because one of the bits happens to be flipped slightly before the other.
23 |
24 | The synchronous logic is a solution to this problem,
25 | in which every state update is controlled by
26 | a single synchronizing **clock signal**,
27 | which is usually a periodic square wave
28 | alternating between `0` and `1` with a certain frequency,
29 | i.e. the clock rate.
30 |
31 | The logic shown below is a four-bit counter,
32 | implemented using T flip-flops.
33 |
34 | 
35 |
36 | The counter value is cleared when `RST` (reset) is `1`.
37 | If `En` is `1` (enabled), it will count up every time
38 | the `CLK` (clock) signal switches from `0` to `1`.
39 | This transition is called the "positive edge"
40 | or the "rising edge" of the clock.
41 | The small triangle in the T flip-flops indicate
42 | that updates are "triggered" by this rising edge.
43 |
44 | Note that all the state is connected to one single
45 | clock signal for synchronization.
46 | This makes it easier to design and study circuits.
47 |
48 | You can open the `sync.circ` file in Logisim to examine this circuit.
49 |
--------------------------------------------------------------------------------
/docs/_config.yml:
--------------------------------------------------------------------------------
1 | title: Computer Organization with Logisim
2 | baseurl: "/computer-organization-logisim"
3 | url: "https://mkayaalp.net"
4 | git_repository_url: "https://github.com/mkayaalp/computer-organization-logisim"
5 | edit_url_template: "https://github.com/mkayaalp/computer-organization-logisim/edit/main/docs/[path]"
6 |
7 | prologues:
8 | - path: index.md
9 | - path: chapters/getting-started.md
10 | chapters:
11 | - path: chapters/logic-design-review.md
12 | sections:
13 | - path: chapters/combinational.md
14 | - path: chapters/sequential.md
15 | - path: chapters/synchronous.md
16 | - path: chapters/propagation-clock.md
17 | - path: chapters/tristate.md
18 | - path: chapters/combinational-vs-pipelined-multiplier.md
19 | - path: chapters/stored-program-computer.md
20 | sections:
21 | - path: chapters/four-bit-accumulator.md
22 | - path: chapters/three-operands.md
23 | - path: chapters/instruction-register.md
24 | - path: chapters/instruction-memory.md
25 | - path: chapters/branching.md
26 | - path: chapters/data-memory.md
27 | - path: chapters/converting-to-armv8.md
28 | sections:
29 | - path: chapters/increased-register-width.md
30 | - path: chapters/increased-register-count.md
31 | - path: chapters/increased-instruction-size.md
32 | - path: chapters/use-byte-addressing.md
33 | - path: chapters/change-instruction-encoding.md
34 |
35 |
36 | # Build settings
37 | theme: minima
38 | plugins:
39 | - jekyll-feed
40 |
41 | # Exclude from processing.
42 | # The following items will not be processed, by default.
43 | # Any item listed under the `exclude:` key here will be automatically added to
44 | # the internal "default list".
45 | #
46 | # Excluded items can be processed by explicitly listing the directories or
47 | # their entries' file path in the `include:` list.
48 | #
49 | # exclude:
50 | # - .sass-cache/
51 | # - .jekyll-cache/
52 | # - gemfiles/
53 | # - Gemfile
54 | # - Gemfile.lock
55 | # - node_modules/
56 | # - vendor/bundle/
57 | # - vendor/cache/
58 | # - vendor/gems/
59 | # - vendor/ruby/
60 |
--------------------------------------------------------------------------------
/docs/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GEM
2 | remote: https://rubygems.org/
3 | specs:
4 | addressable (2.7.0)
5 | public_suffix (>= 2.0.2, < 5.0)
6 | colorator (1.1.0)
7 | concurrent-ruby (1.1.9)
8 | em-websocket (0.5.2)
9 | eventmachine (>= 0.12.9)
10 | http_parser.rb (~> 0.6.0)
11 | eventmachine (1.2.7)
12 | ffi (1.15.1)
13 | forwardable-extended (2.6.0)
14 | http_parser.rb (0.6.0)
15 | i18n (1.8.10)
16 | concurrent-ruby (~> 1.0)
17 | jekyll (4.2.0)
18 | addressable (~> 2.4)
19 | colorator (~> 1.0)
20 | em-websocket (~> 0.5)
21 | i18n (~> 1.0)
22 | jekyll-sass-converter (~> 2.0)
23 | jekyll-watch (~> 2.0)
24 | kramdown (~> 2.3)
25 | kramdown-parser-gfm (~> 1.0)
26 | liquid (~> 4.0)
27 | mercenary (~> 0.4.0)
28 | pathutil (~> 0.9)
29 | rouge (~> 3.0)
30 | safe_yaml (~> 1.0)
31 | terminal-table (~> 2.0)
32 | jekyll-feed (0.15.1)
33 | jekyll (>= 3.7, < 5.0)
34 | jekyll-sass-converter (2.1.0)
35 | sassc (> 2.0.1, < 3.0)
36 | jekyll-seo-tag (2.7.1)
37 | jekyll (>= 3.8, < 5.0)
38 | jekyll-watch (2.2.1)
39 | listen (~> 3.0)
40 | kramdown (2.3.1)
41 | rexml
42 | kramdown-parser-gfm (1.1.0)
43 | kramdown (~> 2.0)
44 | liquid (4.0.3)
45 | listen (3.5.1)
46 | rb-fsevent (~> 0.10, >= 0.10.3)
47 | rb-inotify (~> 0.9, >= 0.9.10)
48 | mercenary (0.4.0)
49 | minima (2.5.1)
50 | jekyll (>= 3.5, < 5.0)
51 | jekyll-feed (~> 0.9)
52 | jekyll-seo-tag (~> 2.1)
53 | pathutil (0.16.2)
54 | forwardable-extended (~> 2.6)
55 | public_suffix (4.0.6)
56 | rb-fsevent (0.11.0)
57 | rb-inotify (0.10.1)
58 | ffi (~> 1.0)
59 | rexml (3.2.5)
60 | rouge (3.26.0)
61 | safe_yaml (1.0.5)
62 | sassc (2.4.0)
63 | ffi (~> 1.9)
64 | terminal-table (2.0.0)
65 | unicode-display_width (~> 1.1, >= 1.1.1)
66 | unicode-display_width (1.7.0)
67 |
68 | PLATFORMS
69 | x86_64-linux
70 |
71 | DEPENDENCIES
72 | jekyll (~> 4.2.0)
73 | jekyll-feed (~> 0.12)
74 | minima (~> 2.5)
75 | tzinfo (~> 1.2)
76 | tzinfo-data
77 | wdm (~> 0.1.1)
78 |
79 | BUNDLED WITH
80 | 2.2.20
81 |
--------------------------------------------------------------------------------
/docs/tomorrow-night.css:
--------------------------------------------------------------------------------
1 | /* Tomorrow Night Theme */
2 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
3 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */
4 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
5 |
6 | /* Tomorrow Comment */
7 | .hljs-comment {
8 | color: #969896;
9 | }
10 |
11 | /* Tomorrow Red */
12 | .hljs-variable,
13 | .hljs-attribute,
14 | .hljs-tag,
15 | .hljs-regexp,
16 | .ruby .hljs-constant,
17 | .xml .hljs-tag .hljs-title,
18 | .xml .hljs-pi,
19 | .xml .hljs-doctype,
20 | .html .hljs-doctype,
21 | .css .hljs-id,
22 | .css .hljs-class,
23 | .css .hljs-pseudo {
24 | color: #cc6666;
25 | }
26 |
27 | /* Tomorrow Orange */
28 | .hljs-number,
29 | .hljs-preprocessor,
30 | .hljs-pragma,
31 | .hljs-built_in,
32 | .hljs-literal,
33 | .hljs-params,
34 | .hljs-constant {
35 | color: #de935f;
36 | }
37 |
38 | /* Tomorrow Yellow */
39 | .ruby .hljs-class .hljs-title,
40 | .css .hljs-rule .hljs-attribute {
41 | color: #f0c674;
42 | }
43 |
44 | /* Tomorrow Green */
45 | .hljs-string,
46 | .hljs-value,
47 | .hljs-inheritance,
48 | .hljs-header,
49 | .hljs-name,
50 | .ruby .hljs-symbol,
51 | .xml .hljs-cdata {
52 | color: #b5bd68;
53 | }
54 |
55 | /* Tomorrow Aqua */
56 | .hljs-title,
57 | .css .hljs-hexcolor {
58 | color: #8abeb7;
59 | }
60 |
61 | /* Tomorrow Blue */
62 | .hljs-function,
63 | .python .hljs-decorator,
64 | .python .hljs-title,
65 | .ruby .hljs-function .hljs-title,
66 | .ruby .hljs-title .hljs-keyword,
67 | .perl .hljs-sub,
68 | .javascript .hljs-title,
69 | .coffeescript .hljs-title {
70 | color: #81a2be;
71 | }
72 |
73 | /* Tomorrow Purple */
74 | .hljs-keyword,
75 | .javascript .hljs-function {
76 | color: #b294bb;
77 | }
78 |
79 | .hljs {
80 | display: block;
81 | overflow-x: auto;
82 | background: #1d1f21;
83 | color: #c5c8c6;
84 | padding: 0.5em;
85 | -webkit-text-size-adjust: none;
86 | }
87 |
88 | .coffeescript .javascript,
89 | .javascript .xml,
90 | .tex .hljs-formula,
91 | .xml .javascript,
92 | .xml .vbscript,
93 | .xml .css,
94 | .xml .hljs-cdata {
95 | opacity: 0.5;
96 | }
97 |
98 | .hljs-addition {
99 | color: #718c00;
100 | }
101 |
102 | .hljs-deletion {
103 | color: #c82829;
104 | }
105 |
--------------------------------------------------------------------------------
/docs/chapters/propagation-clock.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Propagation Delay and Clock Period
3 | layout: default
4 | ---
5 | ## Propagation Delay
6 |
7 | Logisim does not properly model propagation delays,
8 | but it simulates the operation of circuits in iterations,
9 | We can visualize these iterations
10 | using the `Simulate -> Single-Step Propagation` menu option,
11 | and see the order of events
12 | as changes propagate through gates and interconnects.
13 |
14 | The five-bit counter below is similar to the previous circuit,
15 | except this one is implemented with D flip-flops.
16 |
17 | 
18 |
19 | Starting with the counter value `11110`
20 | (read the flip-flops bottom to top),
21 | the rising clock edge causes
22 | flip-flop contents to be simultaneously
23 | updated---only the topmost flip-flop changes in this case.
24 | After a certain delay (called **CLK-to-Q** delay),
25 | the updated values appear on the Q output of the flip-flops,
26 | representing the counter value `11111`.
27 | Sent through the combinational gates,
28 | these bits are used to determine the next value of the counter,
29 | which is `00000`.
30 | At the next rising clock edge,
31 | all flip-flops will be changed to `0`.
32 |
33 | You can find this circuit in the Logisim file called `propagation.circ`.
34 |
35 | ## Clock Period
36 |
37 | As can be seen in the above example,
38 | the input to the bottom flip-flop is the latest
39 | to be calculated,
40 | as the signal passes through four `AND` gates,
41 | and one `XOR` gate.
42 | This path has the largest propagation delay,
43 | i.e. this is the **critical path**.
44 |
45 | Only after every flip-flop input is valid and ready,
46 | we can start the next update to flip-flop contents.
47 | For correct operation,
48 | the next rising clock edge should not happen before
49 | the signals are propagated, stabilized,
50 | **AND** are held stable for a period of
51 | time---called **setup time**---required
52 | for updating the flip-flops.
53 |
54 | These requirements are the determining factors
55 | for the minimum amount of time between successive
56 | rising clock edges, i.e. the **minimum clock period**:
57 |
58 | 
59 |
60 | Since the clock rate, or clock frequency,
61 | is the inverse of the clock period,
62 | this also determines the **maximum clock frequency**.
63 |
--------------------------------------------------------------------------------
/docs/fonts/fonts.css:
--------------------------------------------------------------------------------
1 | /* Open Sans is licensed under the Apache License, Version 2.0. See http://www.apache.org/licenses/LICENSE-2.0 */
2 | /* Source Code Pro is under the Open Font License. See https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL */
3 |
4 | /* open-sans-300 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
5 | @font-face {
6 | font-family: 'Open Sans';
7 | font-style: normal;
8 | font-weight: 300;
9 | src: local('Open Sans Light'), local('OpenSans-Light'),
10 | url('open-sans-v17-all-charsets-300.woff2') format('woff2');
11 | }
12 |
13 | /* open-sans-300italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
14 | @font-face {
15 | font-family: 'Open Sans';
16 | font-style: italic;
17 | font-weight: 300;
18 | src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'),
19 | url('open-sans-v17-all-charsets-300italic.woff2') format('woff2');
20 | }
21 |
22 | /* open-sans-regular - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
23 | @font-face {
24 | font-family: 'Open Sans';
25 | font-style: normal;
26 | font-weight: 400;
27 | src: local('Open Sans Regular'), local('OpenSans-Regular'),
28 | url('open-sans-v17-all-charsets-regular.woff2') format('woff2');
29 | }
30 |
31 | /* open-sans-italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
32 | @font-face {
33 | font-family: 'Open Sans';
34 | font-style: italic;
35 | font-weight: 400;
36 | src: local('Open Sans Italic'), local('OpenSans-Italic'),
37 | url('open-sans-v17-all-charsets-italic.woff2') format('woff2');
38 | }
39 |
40 | /* open-sans-600 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
41 | @font-face {
42 | font-family: 'Open Sans';
43 | font-style: normal;
44 | font-weight: 600;
45 | src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'),
46 | url('open-sans-v17-all-charsets-600.woff2') format('woff2');
47 | }
48 |
49 | /* open-sans-600italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
50 | @font-face {
51 | font-family: 'Open Sans';
52 | font-style: italic;
53 | font-weight: 600;
54 | src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'),
55 | url('open-sans-v17-all-charsets-600italic.woff2') format('woff2');
56 | }
57 |
58 | /* open-sans-700 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
59 | @font-face {
60 | font-family: 'Open Sans';
61 | font-style: normal;
62 | font-weight: 700;
63 | src: local('Open Sans Bold'), local('OpenSans-Bold'),
64 | url('open-sans-v17-all-charsets-700.woff2') format('woff2');
65 | }
66 |
67 | /* open-sans-700italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
68 | @font-face {
69 | font-family: 'Open Sans';
70 | font-style: italic;
71 | font-weight: 700;
72 | src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'),
73 | url('open-sans-v17-all-charsets-700italic.woff2') format('woff2');
74 | }
75 |
76 | /* open-sans-800 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
77 | @font-face {
78 | font-family: 'Open Sans';
79 | font-style: normal;
80 | font-weight: 800;
81 | src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'),
82 | url('open-sans-v17-all-charsets-800.woff2') format('woff2');
83 | }
84 |
85 | /* open-sans-800italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
86 | @font-face {
87 | font-family: 'Open Sans';
88 | font-style: italic;
89 | font-weight: 800;
90 | src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'),
91 | url('open-sans-v17-all-charsets-800italic.woff2') format('woff2');
92 | }
93 |
94 | /* source-code-pro-500 - latin_vietnamese_latin-ext_greek_cyrillic-ext_cyrillic */
95 | @font-face {
96 | font-family: 'Source Code Pro';
97 | font-style: normal;
98 | font-weight: 500;
99 | src: url('source-code-pro-v11-all-charsets-500.woff2') format('woff2');
100 | }
101 |
--------------------------------------------------------------------------------
/docs/_layouts/default.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {%- include head.html -%}
5 |
6 |
7 |
8 | {%- include header.html -%}
9 |
10 |
11 |
12 |
13 |
43 |
44 |
51 |
52 |
53 |
54 |
55 |
56 | {{ content }}
57 |
58 |
72 |
73 |
74 |
86 |
87 |
88 | {%- include footer.html -%}
89 |
90 |
91 |
92 |
93 |
--------------------------------------------------------------------------------
/docs/fonts/SOURCE-CODE-PRO-LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
2 |
3 | This Font Software is licensed under the SIL Open Font License, Version 1.1.
4 | This license is copied below, and is also available with a FAQ at:
5 | http://scripts.sil.org/OFL
6 |
7 |
8 | -----------------------------------------------------------
9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10 | -----------------------------------------------------------
11 |
12 | PREAMBLE
13 | The goals of the Open Font License (OFL) are to stimulate worldwide
14 | development of collaborative font projects, to support the font creation
15 | efforts of academic and linguistic communities, and to provide a free and
16 | open framework in which fonts may be shared and improved in partnership
17 | with others.
18 |
19 | The OFL allows the licensed fonts to be used, studied, modified and
20 | redistributed freely as long as they are not sold by themselves. The
21 | fonts, including any derivative works, can be bundled, embedded,
22 | redistributed and/or sold with any software provided that any reserved
23 | names are not used by derivative works. The fonts and derivatives,
24 | however, cannot be released under any other type of license. The
25 | requirement for fonts to remain under this license does not apply
26 | to any document created using the fonts or their derivatives.
27 |
28 | DEFINITIONS
29 | "Font Software" refers to the set of files released by the Copyright
30 | Holder(s) under this license and clearly marked as such. This may
31 | include source files, build scripts and documentation.
32 |
33 | "Reserved Font Name" refers to any names specified as such after the
34 | copyright statement(s).
35 |
36 | "Original Version" refers to the collection of Font Software components as
37 | distributed by the Copyright Holder(s).
38 |
39 | "Modified Version" refers to any derivative made by adding to, deleting,
40 | or substituting -- in part or in whole -- any of the components of the
41 | Original Version, by changing formats or by porting the Font Software to a
42 | new environment.
43 |
44 | "Author" refers to any designer, engineer, programmer, technical
45 | writer or other person who contributed to the Font Software.
46 |
47 | PERMISSION & CONDITIONS
48 | Permission is hereby granted, free of charge, to any person obtaining
49 | a copy of the Font Software, to use, study, copy, merge, embed, modify,
50 | redistribute, and sell modified and unmodified copies of the Font
51 | Software, subject to the following conditions:
52 |
53 | 1) Neither the Font Software nor any of its individual components,
54 | in Original or Modified Versions, may be sold by itself.
55 |
56 | 2) Original or Modified Versions of the Font Software may be bundled,
57 | redistributed and/or sold with any software, provided that each copy
58 | contains the above copyright notice and this license. These can be
59 | included either as stand-alone text files, human-readable headers or
60 | in the appropriate machine-readable metadata fields within text or
61 | binary files as long as those fields can be easily viewed by the user.
62 |
63 | 3) No Modified Version of the Font Software may use the Reserved Font
64 | Name(s) unless explicit written permission is granted by the corresponding
65 | Copyright Holder. This restriction only applies to the primary font name as
66 | presented to the users.
67 |
68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69 | Software shall not be used to promote, endorse or advertise any
70 | Modified Version, except to acknowledge the contribution(s) of the
71 | Copyright Holder(s) and the Author(s) or with their explicit written
72 | permission.
73 |
74 | 5) The Font Software, modified or unmodified, in part or in whole,
75 | must be distributed entirely under this license, and must not be
76 | distributed under any other license. The requirement for fonts to
77 | remain under this license does not apply to any document created
78 | using the Font Software.
79 |
80 | TERMINATION
81 | This license becomes null and void if any of the above conditions are
82 | not met.
83 |
84 | DISCLAIMER
85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93 | OTHER DEALINGS IN THE FONT SOFTWARE.
94 |
--------------------------------------------------------------------------------
/docs/css/general.css:
--------------------------------------------------------------------------------
1 | /* Base styles and content styles */
2 |
3 | @import 'variables.css';
4 |
5 | :root {
6 | /* Browser default font-size is 16px, this way 1 rem = 10px */
7 | font-size: 62.5%;
8 | }
9 |
10 | html {
11 | font-family: "Open Sans", sans-serif;
12 | color: var(--fg);
13 | background-color: var(--bg);
14 | text-size-adjust: none;
15 | }
16 |
17 | body {
18 | margin: 0;
19 | font-size: 1.6rem;
20 | overflow-x: hidden;
21 | }
22 |
23 | code {
24 | font-family: "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", monospace, monospace !important;
25 | font-size: 0.875em; /* please adjust the ace font size accordingly in editor.js */
26 | }
27 |
28 | /* Don't change font size in headers. */
29 | h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
30 | font-size: unset;
31 | }
32 |
33 | .left { float: left; }
34 | .right { float: right; }
35 | .boring { opacity: 0.6; }
36 | .hide-boring .boring { display: none; }
37 | .hidden { display: none !important; }
38 |
39 | h2, h3 { margin-top: 2.5em; }
40 | h4, h5 { margin-top: 2em; }
41 |
42 | .header + .header h3,
43 | .header + .header h4,
44 | .header + .header h5 {
45 | margin-top: 1em;
46 | }
47 |
48 | h1:target::before,
49 | h2:target::before,
50 | h3:target::before,
51 | h4:target::before,
52 | h5:target::before,
53 | h6:target::before {
54 | display: inline-block;
55 | content: "»";
56 | margin-left: -30px;
57 | width: 30px;
58 | }
59 |
60 | /* This is broken on Safari as of version 14, but is fixed
61 | in Safari Technology Preview 117 which I think will be Safari 14.2.
62 | https://bugs.webkit.org/show_bug.cgi?id=218076
63 | */
64 | :target {
65 | scroll-margin-top: calc(var(--menu-bar-height) + 0.5em);
66 | }
67 |
68 | .page {
69 | outline: 0;
70 | padding: 0 var(--page-padding);
71 | margin-top: calc(0px - var(--menu-bar-height)); /* Compensate for the #menu-bar-hover-placeholder */
72 | }
73 | .page-wrapper {
74 | box-sizing: border-box;
75 | }
76 | .js:not(.sidebar-resizing) .page-wrapper {
77 | transition: margin-left 0.3s ease, transform 0.3s ease; /* Animation: slide away */
78 | }
79 |
80 | .content {
81 | overflow-y: auto;
82 | padding: 0 15px;
83 | padding-bottom: 50px;
84 | }
85 | .content main {
86 | margin-left: auto;
87 | margin-right: auto;
88 | max-width: var(--content-max-width);
89 | }
90 | .content p { line-height: 1.45em; }
91 | .content ol { line-height: 1.45em; }
92 | .content ul { line-height: 1.45em; }
93 | .content a { text-decoration: none; }
94 | .content a:hover { text-decoration: underline; }
95 | .content img, .content video {
96 | max-width: 100%;
97 | margin-left: auto;
98 | margin-right: auto;
99 | display: block;
100 | }
101 | .content .header:link,
102 | .content .header:visited {
103 | color: var(--fg);
104 | }
105 | .content .header:link,
106 | .content .header:visited:hover {
107 | text-decoration: none;
108 | }
109 |
110 | table {
111 | margin: 0 auto;
112 | border-collapse: collapse;
113 | }
114 | table td {
115 | padding: 3px 20px;
116 | border: 1px var(--table-border-color) solid;
117 | }
118 | table thead {
119 | background: var(--table-header-bg);
120 | }
121 | table thead td {
122 | font-weight: 700;
123 | border: none;
124 | }
125 | table thead th {
126 | padding: 3px 20px;
127 | }
128 | table thead tr {
129 | border: 1px var(--table-header-bg) solid;
130 | }
131 | /* Alternate background colors for rows */
132 | table tbody tr:nth-child(2n) {
133 | background: var(--table-alternate-bg);
134 | }
135 |
136 |
137 | blockquote {
138 | margin: 20px 0;
139 | padding: 0 20px;
140 | color: var(--fg);
141 | background-color: var(--quote-bg);
142 | border-top: .1em solid var(--quote-border);
143 | border-bottom: .1em solid var(--quote-border);
144 | }
145 |
146 |
147 | :not(.footnote-definition) + .footnote-definition,
148 | .footnote-definition + :not(.footnote-definition) {
149 | margin-top: 2em;
150 | }
151 | .footnote-definition {
152 | font-size: 0.9em;
153 | margin: 0.5em 0;
154 | }
155 | .footnote-definition p {
156 | display: inline;
157 | }
158 |
159 | .tooltiptext {
160 | position: absolute;
161 | visibility: hidden;
162 | color: #fff;
163 | background-color: #333;
164 | transform: translateX(-50%); /* Center by moving tooltip 50% of its width left */
165 | left: -8px; /* Half of the width of the icon */
166 | top: -35px;
167 | font-size: 0.8em;
168 | text-align: center;
169 | border-radius: 6px;
170 | padding: 5px 8px;
171 | margin: 5px;
172 | z-index: 1000;
173 | }
174 | .tooltipped .tooltiptext {
175 | visibility: visible;
176 | }
177 |
178 | .chapter li.part-title {
179 | color: var(--sidebar-fg);
180 | margin: 5px 0px;
181 | font-weight: bold;
182 | }
183 |
--------------------------------------------------------------------------------
/docs/chapters/getting-started.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Getting Started with Logisim
3 | layout: default
4 | ---
5 |
6 | Logisim is a Java program.
7 | Therefore the first step is ensuring a Java Runtime Environment is installed properly.
8 | If so, you can [download Logisim](#download-logisim),
9 | and then [open the beginner's tutorial](#open-the-beginners-tutorial).
10 |
11 | ## Java Installation
12 |
13 | ### Check if Java is already installed
14 | Easiest way is to run Command Prompt (in Windows) or Terminal (macOS/Linux) and execute the following command:
15 |
16 | java -version
17 |
18 | #### Java is not installed
19 | If you see the following (in Windows):
20 |
21 | 'java' is not recognized as an internal or external command, operable program or batch file.
22 |
23 | Or the following (in macOS/Linux):
24 |
25 | -bash: java: command not found
26 |
27 | it means that Java is not installed.
28 |
29 | #### Java version is not 11 or greater
30 | If you see the following:
31 |
32 | java version "1.8.0_181"
33 | Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
34 | Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
35 |
36 | Or something similar, for example:
37 |
38 | openjdk version "1.8.0_232"
39 | OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_232-b09)
40 | OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.232-b09, mixed mode)
41 |
42 | It means you have Java 8 (the number above after "1." is the short name for Java version),
43 | which does not support the program we use in this course.
44 |
45 | ### Install Java
46 |
47 | #### JRE vs. JDK
48 | The Java program needed to run Java applications is distributed in JRE (Java Runtime Environment).
49 | The Java compiler and libraries needed to build Java applications is distributed as JDK (Java Development Kit).
50 | The JDK includes the JRE.
51 |
52 | You only need the JRE for running Logisim, which is a lot smaller than JDK
53 | (Installer: JRE: 30-40 MB, JDK: 200MB, On disk: JRE: 120 MB, JDK: 330MB).
54 |
55 | #### Option 1: Install the JDK
56 | Go to [adoptopenjdk.net](https://adoptopenjdk.net) and install the OpenJDK 16 (Latest) build (with HotSpot JVM).
57 | The blue download button will download the installer for JDK (which, again, includes the JRE).
58 | Run the installer file (.msi in Windows, .pkg in macOS) and follow the steps.
59 | For Linux, you might download a tarball (.tar.gz file)
60 | and need to follow the additional instructions in
61 | [adoptopenjdk.net/installation.html](https://adoptopenjdk.net/installation.html).
62 |
63 | #### Option 2: Install the JRE
64 | Go to [adoptopenjdk.net](https://adoptopenjdk.net) and click on the "Other platforms" button.
65 | Select your Operating System, and select "x64" as the architecture (aarch64 for newer Macs).
66 | Find the download button for a JRE installer/tarball (.msi in Windows, .pkg in macOS, .tar.gz in Linux).
67 | In Windows or macOS, run the installer file and follow the steps.
68 | For Linux, follow the additional instructions in
69 | [adoptopenjdk.net/installation.html](https://adoptopenjdk.net/installation.html).
70 |
71 | ### Verify that Java is working
72 | Repeat the first step above to check that your Java installation is working.
73 | This time, you should see a message like this:
74 |
75 | openjdk version "16.0.1" 2021-04-20
76 | OpenJDK Runtime Environment AdoptOpenJDK-16.0.1+9 (build 16.0.1+9)
77 | OpenJDK 64-Bit Server VM AdoptOpenJDK-16.0.1+9 (build 16.0.1+9, mixed mode, sharing)
78 |
79 | ## Download Logisim
80 |
81 | You can download the latest version from the following link:
82 |
83 | [https://github.com/logisim-evolution/logisim-evolution/releases/latest](https://github.com/logisim-evolution/logisim-evolution/releases/latest)
84 |
85 | You can select the installer for your system:
86 | `.msi` for Windows, `.dmg` for macOS,
87 | `.deb` for Debian/Ubuntu, and `.rpm` for RHEL/Fedora.
88 | The installer should create links for running the application as usual.
89 |
90 | You can also download the JAR file, which can be used on any platform without installation.
91 |
92 | ### Running the JAR file
93 |
94 | Usually, when Java is installed, you can directly open JAR files as Java applications.
95 | In case it does not work, you can run it from the Command Prompt/Terminal.
96 |
97 | First, change the current directory to where the downloaded file is stored.
98 | For example, in Windows you might switch to
99 | the "Downloads" directory under your username (e.g. `mkayaalp`):
100 |
101 | cd c:\Users\mkayaalp\Downloads
102 |
103 | In macOS/Linux, you can use the following:
104 |
105 | cd ~/Downloads
106 |
107 | You can then run the application with the following command:
108 |
109 | java -jar logisim-evolution.jar
110 |
111 | ## Open the Beginner's Tutorial
112 |
113 | The Logisim application has a nice tutorial you can follow.
114 | Find it under `Help -> Tutorial` menu.
115 | Go through Steps 0 through 5 to learn how the program works.
116 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Computer Organization with Logisim
2 | Logisim designs for teaching computer organization.
3 |
4 | © 2021 Mehmet Kayaalp.
5 |
6 | Cite as:
7 | > Mehmet Kayaalp. 2021.
8 | Using Logisim-evolution for Teaching Datapath and Control.
9 | In Proceedings of WCAE ’21:
10 | Workshop on Computer Architecture Education (WCAE ’21).
11 | ACM, New York, NY, USA, 8 pages.
12 |
13 | See [mkayaalp.net/computer-organization-logisim](https://mkayaalp.net/computer-organization-logisim) for details.
14 |
15 | 
16 |
17 | The circuit files in this repository:
18 |
19 | - Logic design review examples
20 | - Combinational circuit example (full adder): [`full_adder.circ`](full_adder.circ)
21 | - Sequential circuit example: [`sequential.circ`](sequential.circ)
22 | - Synchronous circuit example (four-bit T flip-flop counter: [`sync.circ`](sync.circ)
23 | - Propagation delay example (five-bit D flip-flop counter: [`propagation.circ`](propagation.circ)
24 | - Tristate buffer and multiplexer example: [`tristate_mux.circ`](tristate_mux.circ)
25 | - 4-to-1 multiplexer: [`mux4.circ`](mux4.circ)
26 | - Combinational vs. pipelined multiplier
27 | - Combinational 3-bit multiplier: [`combinational_multiplier.circ`](combinational_multiplier.circ)
28 | - Pipelined 3-bit multiplier: [`pipelined_multiplier.circ`](pipelined_multiplier.circ)
29 | - Incrementally building a *Stored Program* computer
30 | - 3-bit accumulator machine: [`acc3.circ`](acc3.circ)
31 | - 4-bit accumulator machine: [`acc4.circ`](acc4.circ)
32 | - Simplified 4-bit accumulator machine: [`acc4_simplified.circ`](acc4_simplified.circ)
33 | - 4-bit accumulator machine with 4 registers: [`acc4_4regs.circ`](acc4_4regs.circ)
34 | - 4-bit register (3-operand) machine with 4 registers: [`reg4_4regs.circ`](reg4_4regs.circ)
35 | - Added an instruction register: [`ins_register.circ`](ins_register.circ)
36 | - Added an instruction memory: [`ins_memory.circ`](ins_memory.circ)
37 | - Added a branch instruction: [`branch.circ`](branch.circ)
38 | - Added a conditional branch instruction: [`conditional_branch.circ`](conditional_branch.circ)
39 | - Added a load (from data memory) instruction: [`load_data_memory.circ`](load_data_memory.circ)
40 | - Added a store (into data memory) instruction: [`store_data_memory.circ`](store_data_memory.circ)
41 | - Converting the design into ARMv8
42 | - Increase register width to 64-bits: [`1_use64bitregs.circ`](1_use64bitregs.circ)
43 | - Increase the number of registers to 8: [`2_use8regs.circ`](2_use8regs.circ)
44 | - Increase the number of registers to 16: [`3_use16regs.circ`](3_use16regs.circ)
45 | - Increase the number of registers to 32: [`4_use32regs.circ`](4_use32regs.circ)
46 | - Put registers into a Register File subcircuit: [`5_useregfile.circ`](5_useregfile.circ)
47 | - Increase instruction size to 32-bits: [`6_use32bitinstructions.circ`](6_use32bitinstructions.circ)
48 | - Use byte-addressed instruction memory: [`7_usebyteaddressedinsmem.circ`](7_usebyteaddressedinsmem.circ)
49 | - Use the ARMv8 instruction encoding format: [`8_usearmv8instructionformat.circ`](8_usearmv8instructionformat.circ)
50 | - Add the `sub` (register) instruction: [`9_implement_sub.circ`](9_implement_sub.circ)
51 | - Add the `sub` (immediate) instruction: [`10_implement_sub_imm.circ`](10_implement_sub_imm.circ)
52 | - Fix the offset for `ldur` and `stur`: [`11_fixldursturoffset.circ`](11_fixldursturoffset.circ)
53 | - Physical lab
54 | - LED Blink circuit: [`led_blink.circ`](led_blink.circ)
55 | - Improved ARMv8 datapath with subcircuits
56 | - Added LED outputs and subcircuit layouts for easy debugging
57 | - Added instructions: `bl`, `cbnz`, `ldur` (word), `stur` (word), `lsl`, `lsr`
58 | - Added PC resetting to `0080_0000` (the program starting address for Raspberry Pi 3)
59 | - Added a memory controller with peripheral addresses starting at `3F00_0000` (matching Raspberry Pi 3)
60 | - Added a GPIO peripheral at address `3F20_0000` (matching BCM2837 of Raspberry Pi 3)
61 | - Added BCM2837 GPIO registers: `GPFSELn`, `GPSETn`, `GPCLRn`
62 | - Datapath improvements: [`added_sp_br_flags_adds_subs_ands_bcond.circ`](added_sp_br_flags_adds_subs_ands_bcond.circ)
63 | - Added proper handling of `SP` register
64 | - Added flags register used in conditional branching
65 | - Added flag-setting variants: `adds`, `subs`, `ands`
66 | - Added indirect branch instruction: `br`
67 | - Added flag-based conditional branch instructions: `b.cond`
68 | - More instructions: [`added_imms_mul_div_accesssize_varshift.circ`](added_imms_mul_div_accesssize_varshift.circ)
69 | - Added logical immediate encoding
70 | - Added wide-immediate instructions: `movz`, `movk`, `movn`
71 | - Added variable logical shift: `lslv`, `lsrv`
72 | - Added multiplication and division: `mul`, `umulh`, `smulh`, `udiv`, `sdiv`
73 | - Added half-word- and byte-sized memory access: `ldurh`, `sturh`, `ldurb`, `sturb`
74 | - LCD display: [`added_lcd_display.circ`](added_lcd_display.circ)
75 | - Added PC-relative address instruction: `adr`
76 | - Added an I2C peripheral (send-only) at address `3F80_4000` (matching BSC1 of BCM2837 of Raspberry Pi 3)
77 | - Added BCM2837 BSC registers: `C`, `S`, `DLEN`, `ADDR`, `FIFO_DATA`
78 | - Added an I2C device (receive-only) (matching the PCF8574 on the LCD backpack)
79 | - Added an HD44780 module with a character matrix LCD display
80 | - Pipelined LEGv8 datapath with forwarding unit (no hazard detection or stalling): [`pipeline.circ`](pipeline.circ)
81 |
--------------------------------------------------------------------------------
/docs/_includes/header.html:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
22 |
23 |
24 |
34 |
35 |
36 |
46 |
47 | {%- assign base_url = site.baseurl | append: "/" -%}
48 | {%- assign lang = site -%}
49 |
132 |
--------------------------------------------------------------------------------
/docs/css/variables.css:
--------------------------------------------------------------------------------
1 |
2 | /* Globals */
3 |
4 | :root {
5 | --sidebar-width: 300px;
6 | --page-padding: 15px;
7 | --content-max-width: 750px;
8 | --menu-bar-height: 50px;
9 | }
10 |
11 | /* Themes */
12 |
13 | .ayu {
14 | --bg: hsl(210, 25%, 8%);
15 | --fg: #c5c5c5;
16 |
17 | --sidebar-bg: #14191f;
18 | --sidebar-fg: #c8c9db;
19 | --sidebar-non-existant: #5c6773;
20 | --sidebar-active: #ffb454;
21 | --sidebar-spacer: #2d334f;
22 |
23 | --scrollbar: var(--sidebar-fg);
24 |
25 | --icons: #737480;
26 | --icons-hover: #b7b9cc;
27 |
28 | --links: #0096cf;
29 |
30 | --inline-code-color: #ffb454;
31 |
32 | --theme-popup-bg: #14191f;
33 | --theme-popup-border: #5c6773;
34 | --theme-hover: #191f26;
35 |
36 | --quote-bg: hsl(226, 15%, 17%);
37 | --quote-border: hsl(226, 15%, 22%);
38 |
39 | --table-border-color: hsl(210, 25%, 13%);
40 | --table-header-bg: hsl(210, 25%, 28%);
41 | --table-alternate-bg: hsl(210, 25%, 11%);
42 |
43 | --searchbar-border-color: #848484;
44 | --searchbar-bg: #424242;
45 | --searchbar-fg: #fff;
46 | --searchbar-shadow-color: #d4c89f;
47 | --searchresults-header-fg: #666;
48 | --searchresults-border-color: #888;
49 | --searchresults-li-bg: #252932;
50 | --search-mark-bg: #e3b171;
51 | }
52 |
53 | .coal {
54 | --bg: hsl(200, 7%, 8%);
55 | --fg: #98a3ad;
56 |
57 | --sidebar-bg: #292c2f;
58 | --sidebar-fg: #a1adb8;
59 | --sidebar-non-existant: #505254;
60 | --sidebar-active: #3473ad;
61 | --sidebar-spacer: #393939;
62 |
63 | --scrollbar: var(--sidebar-fg);
64 |
65 | --icons: #43484d;
66 | --icons-hover: #b3c0cc;
67 |
68 | --links: #2b79a2;
69 |
70 | --inline-code-color: #c5c8c6;;
71 |
72 | --theme-popup-bg: #141617;
73 | --theme-popup-border: #43484d;
74 | --theme-hover: #1f2124;
75 |
76 | --quote-bg: hsl(234, 21%, 18%);
77 | --quote-border: hsl(234, 21%, 23%);
78 |
79 | --table-border-color: hsl(200, 7%, 13%);
80 | --table-header-bg: hsl(200, 7%, 28%);
81 | --table-alternate-bg: hsl(200, 7%, 11%);
82 |
83 | --searchbar-border-color: #aaa;
84 | --searchbar-bg: #b7b7b7;
85 | --searchbar-fg: #000;
86 | --searchbar-shadow-color: #aaa;
87 | --searchresults-header-fg: #666;
88 | --searchresults-border-color: #98a3ad;
89 | --searchresults-li-bg: #2b2b2f;
90 | --search-mark-bg: #355c7d;
91 | }
92 |
93 | .light {
94 | --bg: hsl(0, 0%, 100%);
95 | --fg: hsl(0, 0%, 0%);
96 |
97 | --sidebar-bg: #fafafa;
98 | --sidebar-fg: hsl(0, 0%, 0%);
99 | --sidebar-non-existant: #aaaaaa;
100 | --sidebar-active: #1f1fff;
101 | --sidebar-spacer: #f4f4f4;
102 |
103 | --scrollbar: #8F8F8F;
104 |
105 | --icons: #747474;
106 | --icons-hover: #000000;
107 |
108 | --links: #20609f;
109 |
110 | --inline-code-color: #301900;
111 |
112 | --theme-popup-bg: #fafafa;
113 | --theme-popup-border: #cccccc;
114 | --theme-hover: #e6e6e6;
115 |
116 | --quote-bg: hsl(197, 37%, 96%);
117 | --quote-border: hsl(197, 37%, 91%);
118 |
119 | --table-border-color: hsl(0, 0%, 95%);
120 | --table-header-bg: hsl(0, 0%, 80%);
121 | --table-alternate-bg: hsl(0, 0%, 97%);
122 |
123 | --searchbar-border-color: #aaa;
124 | --searchbar-bg: #fafafa;
125 | --searchbar-fg: #000;
126 | --searchbar-shadow-color: #aaa;
127 | --searchresults-header-fg: #666;
128 | --searchresults-border-color: #888;
129 | --searchresults-li-bg: #e4f2fe;
130 | --search-mark-bg: #a2cff5;
131 | }
132 |
133 | .navy {
134 | --bg: hsl(226, 23%, 11%);
135 | --fg: #bcbdd0;
136 |
137 | --sidebar-bg: #282d3f;
138 | --sidebar-fg: #c8c9db;
139 | --sidebar-non-existant: #505274;
140 | --sidebar-active: #2b79a2;
141 | --sidebar-spacer: #2d334f;
142 |
143 | --scrollbar: var(--sidebar-fg);
144 |
145 | --icons: #737480;
146 | --icons-hover: #b7b9cc;
147 |
148 | --links: #2b79a2;
149 |
150 | --inline-code-color: #c5c8c6;;
151 |
152 | --theme-popup-bg: #161923;
153 | --theme-popup-border: #737480;
154 | --theme-hover: #282e40;
155 |
156 | --quote-bg: hsl(226, 15%, 17%);
157 | --quote-border: hsl(226, 15%, 22%);
158 |
159 | --table-border-color: hsl(226, 23%, 16%);
160 | --table-header-bg: hsl(226, 23%, 31%);
161 | --table-alternate-bg: hsl(226, 23%, 14%);
162 |
163 | --searchbar-border-color: #aaa;
164 | --searchbar-bg: #aeaec6;
165 | --searchbar-fg: #000;
166 | --searchbar-shadow-color: #aaa;
167 | --searchresults-header-fg: #5f5f71;
168 | --searchresults-border-color: #5c5c68;
169 | --searchresults-li-bg: #242430;
170 | --search-mark-bg: #a2cff5;
171 | }
172 |
173 | .rust {
174 | --bg: hsl(60, 9%, 87%);
175 | --fg: #262625;
176 |
177 | --sidebar-bg: #3b2e2a;
178 | --sidebar-fg: #c8c9db;
179 | --sidebar-non-existant: #505254;
180 | --sidebar-active: #e69f67;
181 | --sidebar-spacer: #45373a;
182 |
183 | --scrollbar: var(--sidebar-fg);
184 |
185 | --icons: #737480;
186 | --icons-hover: #262625;
187 |
188 | --links: #2b79a2;
189 |
190 | --inline-code-color: #6e6b5e;
191 |
192 | --theme-popup-bg: #e1e1db;
193 | --theme-popup-border: #b38f6b;
194 | --theme-hover: #99908a;
195 |
196 | --quote-bg: hsl(60, 5%, 75%);
197 | --quote-border: hsl(60, 5%, 70%);
198 |
199 | --table-border-color: hsl(60, 9%, 82%);
200 | --table-header-bg: #b3a497;
201 | --table-alternate-bg: hsl(60, 9%, 84%);
202 |
203 | --searchbar-border-color: #aaa;
204 | --searchbar-bg: #fafafa;
205 | --searchbar-fg: #000;
206 | --searchbar-shadow-color: #aaa;
207 | --searchresults-header-fg: #666;
208 | --searchresults-border-color: #888;
209 | --searchresults-li-bg: #dec2a2;
210 | --search-mark-bg: #e69f67;
211 | }
212 |
213 | @media (prefers-color-scheme: dark) {
214 | .light.no-js {
215 | --bg: hsl(200, 7%, 8%);
216 | --fg: #98a3ad;
217 |
218 | --sidebar-bg: #292c2f;
219 | --sidebar-fg: #a1adb8;
220 | --sidebar-non-existant: #505254;
221 | --sidebar-active: #3473ad;
222 | --sidebar-spacer: #393939;
223 |
224 | --scrollbar: var(--sidebar-fg);
225 |
226 | --icons: #43484d;
227 | --icons-hover: #b3c0cc;
228 |
229 | --links: #2b79a2;
230 |
231 | --inline-code-color: #c5c8c6;;
232 |
233 | --theme-popup-bg: #141617;
234 | --theme-popup-border: #43484d;
235 | --theme-hover: #1f2124;
236 |
237 | --quote-bg: hsl(234, 21%, 18%);
238 | --quote-border: hsl(234, 21%, 23%);
239 |
240 | --table-border-color: hsl(200, 7%, 13%);
241 | --table-header-bg: hsl(200, 7%, 28%);
242 | --table-alternate-bg: hsl(200, 7%, 11%);
243 |
244 | --searchbar-border-color: #aaa;
245 | --searchbar-bg: #b7b7b7;
246 | --searchbar-fg: #000;
247 | --searchbar-shadow-color: #aaa;
248 | --searchresults-header-fg: #666;
249 | --searchresults-border-color: #98a3ad;
250 | --searchresults-li-bg: #2b2b2f;
251 | --search-mark-bg: #355c7d;
252 | }
253 | }
254 |
--------------------------------------------------------------------------------
/sequential.circ:
--------------------------------------------------------------------------------
1 |
2 |
3 | This file is intended to be loaded by Logisim-evolution (https://github.com/reds-heig/logisim-evolution).
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 | addr/data: 8 8
62 | 0
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 | library ieee;
71 | use ieee.std_logic_1164.all;
72 |
73 | entity TCL_Generic is
74 | port(
75 | --Insert input ports below
76 | horloge_i : in std_logic; -- input bit example
77 | val_i : in std_logic_vector(3 downto 0); -- input vector example
78 |
79 | --Insert output ports below
80 | max_o : out std_logic; -- output bit example
81 | cpt_o : out std_logic_Vector(3 downto 0) -- output vector example
82 | );
83 | end TCL_Generic;
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
--------------------------------------------------------------------------------
/full_adder.circ:
--------------------------------------------------------------------------------
1 |
2 |
3 | This file is intended to be loaded by Logisim-evolution (https://github.com/reds-heig/logisim-evolution).
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 | addr/data: 8 8
62 | 0
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 | library ieee;
71 | use ieee.std_logic_1164.all;
72 |
73 | entity TCL_Generic is
74 | port(
75 | --Insert input ports below
76 | horloge_i : in std_logic; -- input bit example
77 | val_i : in std_logic_vector(3 downto 0); -- input vector example
78 |
79 | --Insert output ports below
80 | max_o : out std_logic; -- output bit example
81 | cpt_o : out std_logic_Vector(3 downto 0) -- output vector example
82 | );
83 | end TCL_Generic;
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
--------------------------------------------------------------------------------
/acc4_simplified.circ:
--------------------------------------------------------------------------------
1 |
2 |
3 | This file is intended to be loaded by Logisim-evolution (https://github.com/reds-heig/logisim-evolution).
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | addr/data: 8 8
66 | 0
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 | library ieee;
75 | use ieee.std_logic_1164.all;
76 |
77 | entity TCL_Generic is
78 | port(
79 | --Insert input ports below
80 | horloge_i : in std_logic; -- input bit example
81 | val_i : in std_logic_vector(3 downto 0); -- input vector example
82 |
83 | --Insert output ports below
84 | max_o : out std_logic; -- output bit example
85 | cpt_o : out std_logic_Vector(3 downto 0) -- output vector example
86 | );
87 | end TCL_Generic;
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
--------------------------------------------------------------------------------
/sync.circ:
--------------------------------------------------------------------------------
1 |
2 |
3 | This file is intended to be loaded by Logisim-evolution (https://github.com/reds-heig/logisim-evolution).
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 | addr/data: 8 8
62 | 0
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 | library ieee;
71 | use ieee.std_logic_1164.all;
72 |
73 | entity TCL_Generic is
74 | port(
75 | --Insert input ports below
76 | horloge_i : in std_logic; -- input bit example
77 | val_i : in std_logic_vector(3 downto 0); -- input vector example
78 |
79 | --Insert output ports below
80 | max_o : out std_logic; -- output bit example
81 | cpt_o : out std_logic_Vector(3 downto 0) -- output vector example
82 | );
83 | end TCL_Generic;
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
--------------------------------------------------------------------------------
/docs/clipboard.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * clipboard.js v2.0.4
3 | * https://zenorocha.github.io/clipboard.js
4 | *
5 | * Licensed MIT © Zeno Rocha
6 | */
7 | !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n
2 |
3 | This file is intended to be loaded by Logisim-evolution (https://github.com/reds-heig/logisim-evolution).
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 | addr/data: 8 8
62 | 0
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 | library ieee;
71 | use ieee.std_logic_1164.all;
72 |
73 | entity TCL_Generic is
74 | port(
75 | --Insert input ports below
76 | horloge_i : in std_logic; -- input bit example
77 | val_i : in std_logic_vector(3 downto 0); -- input vector example
78 |
79 | --Insert output ports below
80 | max_o : out std_logic; -- output bit example
81 | cpt_o : out std_logic_Vector(3 downto 0) -- output vector example
82 | );
83 | end TCL_Generic;
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
--------------------------------------------------------------------------------
/docs/css/chrome.css:
--------------------------------------------------------------------------------
1 | /* CSS for UI elements (a.k.a. chrome) */
2 |
3 | @import 'variables.css';
4 |
5 | ::-webkit-scrollbar {
6 | background: var(--bg);
7 | }
8 | ::-webkit-scrollbar-thumb {
9 | background: var(--scrollbar);
10 | }
11 | html {
12 | scrollbar-color: var(--scrollbar) var(--bg);
13 | }
14 | #searchresults a,
15 | .content a:link,
16 | a:visited,
17 | a > .hljs {
18 | color: var(--links);
19 | }
20 |
21 | /* Menu Bar */
22 |
23 | #menu-bar,
24 | #menu-bar-hover-placeholder {
25 | z-index: 101;
26 | margin: auto calc(0px - var(--page-padding));
27 | }
28 | #menu-bar {
29 | position: relative;
30 | display: flex;
31 | flex-wrap: wrap;
32 | background-color: var(--bg);
33 | border-bottom-color: var(--bg);
34 | border-bottom-width: 1px;
35 | border-bottom-style: solid;
36 | }
37 | #menu-bar.sticky,
38 | .js #menu-bar-hover-placeholder:hover + #menu-bar,
39 | .js #menu-bar:hover,
40 | .js.sidebar-visible #menu-bar {
41 | position: -webkit-sticky;
42 | position: sticky;
43 | top: 0 !important;
44 | }
45 | #menu-bar-hover-placeholder {
46 | position: sticky;
47 | position: -webkit-sticky;
48 | top: 0;
49 | height: var(--menu-bar-height);
50 | }
51 | #menu-bar.bordered {
52 | border-bottom-color: var(--table-border-color);
53 | }
54 | #menu-bar i, #menu-bar .icon-button {
55 | position: relative;
56 | padding: 0 8px;
57 | z-index: 10;
58 | line-height: var(--menu-bar-height);
59 | cursor: pointer;
60 | transition: color 0.5s;
61 | }
62 | @media only screen and (max-width: 420px) {
63 | #menu-bar i, #menu-bar .icon-button {
64 | padding: 0 5px;
65 | }
66 | }
67 |
68 | .icon-button {
69 | border: none;
70 | background: none;
71 | padding: 0;
72 | color: inherit;
73 | }
74 | .icon-button i {
75 | margin: 0;
76 | }
77 |
78 | .right-buttons {
79 | margin: 0 15px;
80 | }
81 | .right-buttons a {
82 | text-decoration: none;
83 | }
84 |
85 | .left-buttons {
86 | display: flex;
87 | margin: 0 5px;
88 | }
89 | .no-js .left-buttons {
90 | display: none;
91 | }
92 |
93 | .menu-title {
94 | display: inline-block;
95 | font-weight: 200;
96 | font-size: 2.4rem;
97 | line-height: var(--menu-bar-height);
98 | text-align: center;
99 | margin: 0;
100 | flex: 1;
101 | white-space: nowrap;
102 | overflow: hidden;
103 | text-overflow: ellipsis;
104 | }
105 | .js .menu-title {
106 | cursor: pointer;
107 | }
108 |
109 | .menu-bar,
110 | .menu-bar:visited,
111 | .nav-chapters,
112 | .nav-chapters:visited,
113 | .mobile-nav-chapters,
114 | .mobile-nav-chapters:visited,
115 | .menu-bar .icon-button,
116 | .menu-bar a i {
117 | color: var(--icons);
118 | }
119 |
120 | .menu-bar i:hover,
121 | .menu-bar .icon-button:hover,
122 | .nav-chapters:hover,
123 | .mobile-nav-chapters i:hover {
124 | color: var(--icons-hover);
125 | }
126 |
127 | /* Nav Icons */
128 |
129 | .nav-chapters {
130 | font-size: 2.5em;
131 | text-align: center;
132 | text-decoration: none;
133 |
134 | position: fixed;
135 | top: 0;
136 | bottom: 0;
137 | margin: 0;
138 | max-width: 150px;
139 | min-width: 90px;
140 |
141 | display: flex;
142 | justify-content: center;
143 | align-content: center;
144 | flex-direction: column;
145 |
146 | transition: color 0.5s, background-color 0.5s;
147 | }
148 |
149 | .nav-chapters:hover {
150 | text-decoration: none;
151 | background-color: var(--theme-hover);
152 | transition: background-color 0.15s, color 0.15s;
153 | }
154 |
155 | .nav-wrapper {
156 | margin-top: 50px;
157 | display: none;
158 | }
159 |
160 | .mobile-nav-chapters {
161 | font-size: 2.5em;
162 | text-align: center;
163 | text-decoration: none;
164 | width: 90px;
165 | border-radius: 5px;
166 | background-color: var(--sidebar-bg);
167 | }
168 |
169 | .previous {
170 | float: left;
171 | }
172 |
173 | .next {
174 | float: right;
175 | right: var(--page-padding);
176 | }
177 |
178 | @media only screen and (max-width: 1080px) {
179 | .nav-wide-wrapper { display: none; }
180 | .nav-wrapper { display: block; }
181 | }
182 |
183 | @media only screen and (max-width: 1380px) {
184 | .sidebar-visible .nav-wide-wrapper { display: none; }
185 | .sidebar-visible .nav-wrapper { display: block; }
186 | }
187 |
188 | /* Inline code */
189 |
190 | :not(pre) > .hljs {
191 | display: inline;
192 | padding: 0.1em 0.3em;
193 | border-radius: 3px;
194 | }
195 |
196 | :not(pre):not(a) > .hljs {
197 | color: var(--inline-code-color);
198 | overflow-x: initial;
199 | }
200 |
201 | a:hover > .hljs {
202 | text-decoration: underline;
203 | }
204 |
205 | pre {
206 | position: relative;
207 | }
208 | pre > .buttons {
209 | position: absolute;
210 | z-index: 100;
211 | right: 5px;
212 | top: 5px;
213 |
214 | color: var(--sidebar-fg);
215 | cursor: pointer;
216 | }
217 | pre > .buttons :hover {
218 | color: var(--sidebar-active);
219 | }
220 | pre > .buttons i {
221 | margin-left: 8px;
222 | }
223 | pre > .buttons button {
224 | color: inherit;
225 | background: transparent;
226 | border: none;
227 | cursor: inherit;
228 | }
229 | pre > .result {
230 | margin-top: 10px;
231 | }
232 |
233 | /* Search */
234 |
235 | #searchresults a {
236 | text-decoration: none;
237 | }
238 |
239 | mark {
240 | border-radius: 2px;
241 | padding: 0 3px 1px 3px;
242 | margin: 0 -3px -1px -3px;
243 | background-color: var(--search-mark-bg);
244 | transition: background-color 300ms linear;
245 | cursor: pointer;
246 | }
247 |
248 | mark.fade-out {
249 | background-color: rgba(0,0,0,0) !important;
250 | cursor: auto;
251 | }
252 |
253 | .searchbar-outer {
254 | margin-left: auto;
255 | margin-right: auto;
256 | max-width: var(--content-max-width);
257 | }
258 |
259 | #searchbar {
260 | width: 100%;
261 | margin: 5px auto 0px auto;
262 | padding: 10px 16px;
263 | transition: box-shadow 300ms ease-in-out;
264 | border: 1px solid var(--searchbar-border-color);
265 | border-radius: 3px;
266 | background-color: var(--searchbar-bg);
267 | color: var(--searchbar-fg);
268 | }
269 | #searchbar:focus,
270 | #searchbar.active {
271 | box-shadow: 0 0 3px var(--searchbar-shadow-color);
272 | }
273 |
274 | .searchresults-header {
275 | font-weight: bold;
276 | font-size: 1em;
277 | padding: 18px 0 0 5px;
278 | color: var(--searchresults-header-fg);
279 | }
280 |
281 | .searchresults-outer {
282 | margin-left: auto;
283 | margin-right: auto;
284 | max-width: var(--content-max-width);
285 | border-bottom: 1px dashed var(--searchresults-border-color);
286 | }
287 |
288 | ul#searchresults {
289 | list-style: none;
290 | padding-left: 20px;
291 | }
292 | ul#searchresults li {
293 | margin: 10px 0px;
294 | padding: 2px;
295 | border-radius: 2px;
296 | }
297 | ul#searchresults li.focus {
298 | background-color: var(--searchresults-li-bg);
299 | }
300 | ul#searchresults span.teaser {
301 | display: block;
302 | clear: both;
303 | margin: 5px 0 0 20px;
304 | font-size: 0.8em;
305 | }
306 | ul#searchresults span.teaser em {
307 | font-weight: bold;
308 | font-style: normal;
309 | }
310 |
311 | /* Sidebar */
312 |
313 | .sidebar {
314 | position: fixed;
315 | left: 0;
316 | top: 0;
317 | bottom: 0;
318 | width: var(--sidebar-width);
319 | font-size: 0.875em;
320 | box-sizing: border-box;
321 | -webkit-overflow-scrolling: touch;
322 | overscroll-behavior-y: contain;
323 | background-color: var(--sidebar-bg);
324 | color: var(--sidebar-fg);
325 | }
326 | .sidebar-resizing {
327 | -moz-user-select: none;
328 | -webkit-user-select: none;
329 | -ms-user-select: none;
330 | user-select: none;
331 | }
332 | .js:not(.sidebar-resizing) .sidebar {
333 | transition: transform 0.3s; /* Animation: slide away */
334 | }
335 | .sidebar code {
336 | line-height: 2em;
337 | }
338 | .sidebar .sidebar-scrollbox {
339 | overflow-y: auto;
340 | position: absolute;
341 | top: 0;
342 | bottom: 0;
343 | left: 0;
344 | right: 0;
345 | padding: 10px 10px;
346 | }
347 | .sidebar .sidebar-resize-handle {
348 | position: absolute;
349 | cursor: col-resize;
350 | width: 0;
351 | right: 0;
352 | top: 0;
353 | bottom: 0;
354 | }
355 | .js .sidebar .sidebar-resize-handle {
356 | cursor: col-resize;
357 | width: 5px;
358 | }
359 | .sidebar-hidden .sidebar {
360 | transform: translateX(calc(0px - var(--sidebar-width)));
361 | }
362 | .sidebar::-webkit-scrollbar {
363 | background: var(--sidebar-bg);
364 | }
365 | .sidebar::-webkit-scrollbar-thumb {
366 | background: var(--scrollbar);
367 | }
368 |
369 | .sidebar-visible .page-wrapper {
370 | transform: translateX(var(--sidebar-width));
371 | }
372 | @media only screen and (min-width: 620px) {
373 | .sidebar-visible .page-wrapper {
374 | transform: none;
375 | margin-left: var(--sidebar-width);
376 | }
377 | }
378 |
379 | .chapter {
380 | list-style: none outside none;
381 | padding-left: 0;
382 | line-height: 2.2em;
383 | }
384 |
385 | .chapter ol {
386 | width: 100%;
387 | }
388 |
389 | .chapter li {
390 | display: flex;
391 | color: var(--sidebar-non-existant);
392 | }
393 | .chapter li a {
394 | display: block;
395 | padding: 0;
396 | text-decoration: none;
397 | color: var(--sidebar-fg);
398 | }
399 |
400 | .chapter li a:hover {
401 | color: var(--sidebar-active);
402 | }
403 |
404 | .chapter li a.active {
405 | color: var(--sidebar-active);
406 | }
407 |
408 | .chapter li > a.toggle {
409 | cursor: pointer;
410 | display: block;
411 | margin-left: auto;
412 | padding: 0 10px;
413 | user-select: none;
414 | opacity: 0.68;
415 | }
416 |
417 | .chapter li > a.toggle div {
418 | transition: transform 0.5s;
419 | }
420 |
421 | /* collapse the section */
422 | .chapter li:not(.expanded) + li > ol {
423 | display: none;
424 | }
425 |
426 | .chapter li.chapter-item {
427 | line-height: 1.5em;
428 | margin-top: 0.6em;
429 | }
430 |
431 | .chapter li.expanded > a.toggle div {
432 | transform: rotate(90deg);
433 | }
434 |
435 | .spacer {
436 | width: 100%;
437 | height: 3px;
438 | margin: 5px 0px;
439 | }
440 | .chapter .spacer {
441 | background-color: var(--sidebar-spacer);
442 | }
443 |
444 | @media (-moz-touch-enabled: 1), (pointer: coarse) {
445 | .chapter li a { padding: 5px 0; }
446 | .spacer { margin: 10px 0; }
447 | }
448 |
449 | .section {
450 | list-style: none outside none;
451 | padding-left: 20px;
452 | line-height: 1.9em;
453 | }
454 |
455 | /* Theme Menu Popup */
456 |
457 | .theme-popup {
458 | position: absolute;
459 | left: 10px;
460 | top: var(--menu-bar-height);
461 | z-index: 1000;
462 | border-radius: 4px;
463 | font-size: 0.7em;
464 | color: var(--fg);
465 | background: var(--theme-popup-bg);
466 | border: 1px solid var(--theme-popup-border);
467 | margin: 0;
468 | padding: 0;
469 | list-style: none;
470 | display: none;
471 | }
472 | .theme-popup .default {
473 | color: var(--icons);
474 | }
475 | .theme-popup .theme {
476 | width: 100%;
477 | border: 0;
478 | margin: 0;
479 | padding: 2px 10px;
480 | line-height: 25px;
481 | white-space: nowrap;
482 | text-align: left;
483 | cursor: pointer;
484 | color: inherit;
485 | background: inherit;
486 | font-size: inherit;
487 | }
488 | .theme-popup .theme:hover {
489 | background-color: var(--theme-hover);
490 | }
491 | .theme-popup .theme:hover:first-child,
492 | .theme-popup .theme:hover:last-child {
493 | border-top-left-radius: inherit;
494 | border-top-right-radius: inherit;
495 | }
496 |
--------------------------------------------------------------------------------
/docs/fonts/OPEN-SANS-LICENSE.txt:
--------------------------------------------------------------------------------
1 |
2 | Apache License
3 | Version 2.0, January 2004
4 | http://www.apache.org/licenses/
5 |
6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7 |
8 | 1. Definitions.
9 |
10 | "License" shall mean the terms and conditions for use, reproduction,
11 | and distribution as defined by Sections 1 through 9 of this document.
12 |
13 | "Licensor" shall mean the copyright owner or entity authorized by
14 | the copyright owner that is granting the License.
15 |
16 | "Legal Entity" shall mean the union of the acting entity and all
17 | other entities that control, are controlled by, or are under common
18 | control with that entity. For the purposes of this definition,
19 | "control" means (i) the power, direct or indirect, to cause the
20 | direction or management of such entity, whether by contract or
21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
22 | outstanding shares, or (iii) beneficial ownership of such entity.
23 |
24 | "You" (or "Your") shall mean an individual or Legal Entity
25 | exercising permissions granted by this License.
26 |
27 | "Source" form shall mean the preferred form for making modifications,
28 | including but not limited to software source code, documentation
29 | source, and configuration files.
30 |
31 | "Object" form shall mean any form resulting from mechanical
32 | transformation or translation of a Source form, including but
33 | not limited to compiled object code, generated documentation,
34 | and conversions to other media types.
35 |
36 | "Work" shall mean the work of authorship, whether in Source or
37 | Object form, made available under the License, as indicated by a
38 | copyright notice that is included in or attached to the work
39 | (an example is provided in the Appendix below).
40 |
41 | "Derivative Works" shall mean any work, whether in Source or Object
42 | form, that is based on (or derived from) the Work and for which the
43 | editorial revisions, annotations, elaborations, or other modifications
44 | represent, as a whole, an original work of authorship. For the purposes
45 | of this License, Derivative Works shall not include works that remain
46 | separable from, or merely link (or bind by name) to the interfaces of,
47 | the Work and Derivative Works thereof.
48 |
49 | "Contribution" shall mean any work of authorship, including
50 | the original version of the Work and any modifications or additions
51 | to that Work or Derivative Works thereof, that is intentionally
52 | submitted to Licensor for inclusion in the Work by the copyright owner
53 | or by an individual or Legal Entity authorized to submit on behalf of
54 | the copyright owner. For the purposes of this definition, "submitted"
55 | means any form of electronic, verbal, or written communication sent
56 | to the Licensor or its representatives, including but not limited to
57 | communication on electronic mailing lists, source code control systems,
58 | and issue tracking systems that are managed by, or on behalf of, the
59 | Licensor for the purpose of discussing and improving the Work, but
60 | excluding communication that is conspicuously marked or otherwise
61 | designated in writing by the copyright owner as "Not a Contribution."
62 |
63 | "Contributor" shall mean Licensor and any individual or Legal Entity
64 | on behalf of whom a Contribution has been received by Licensor and
65 | subsequently incorporated within the Work.
66 |
67 | 2. Grant of Copyright License. Subject to the terms and conditions of
68 | this License, each Contributor hereby grants to You a perpetual,
69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70 | copyright license to reproduce, prepare Derivative Works of,
71 | publicly display, publicly perform, sublicense, and distribute the
72 | Work and such Derivative Works in Source or Object form.
73 |
74 | 3. Grant of Patent License. Subject to the terms and conditions of
75 | this License, each Contributor hereby grants to You a perpetual,
76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77 | (except as stated in this section) patent license to make, have made,
78 | use, offer to sell, sell, import, and otherwise transfer the Work,
79 | where such license applies only to those patent claims licensable
80 | by such Contributor that are necessarily infringed by their
81 | Contribution(s) alone or by combination of their Contribution(s)
82 | with the Work to which such Contribution(s) was submitted. If You
83 | institute patent litigation against any entity (including a
84 | cross-claim or counterclaim in a lawsuit) alleging that the Work
85 | or a Contribution incorporated within the Work constitutes direct
86 | or contributory patent infringement, then any patent licenses
87 | granted to You under this License for that Work shall terminate
88 | as of the date such litigation is filed.
89 |
90 | 4. Redistribution. You may reproduce and distribute copies of the
91 | Work or Derivative Works thereof in any medium, with or without
92 | modifications, and in Source or Object form, provided that You
93 | meet the following conditions:
94 |
95 | (a) You must give any other recipients of the Work or
96 | Derivative Works a copy of this License; and
97 |
98 | (b) You must cause any modified files to carry prominent notices
99 | stating that You changed the files; and
100 |
101 | (c) You must retain, in the Source form of any Derivative Works
102 | that You distribute, all copyright, patent, trademark, and
103 | attribution notices from the Source form of the Work,
104 | excluding those notices that do not pertain to any part of
105 | the Derivative Works; and
106 |
107 | (d) If the Work includes a "NOTICE" text file as part of its
108 | distribution, then any Derivative Works that You distribute must
109 | include a readable copy of the attribution notices contained
110 | within such NOTICE file, excluding those notices that do not
111 | pertain to any part of the Derivative Works, in at least one
112 | of the following places: within a NOTICE text file distributed
113 | as part of the Derivative Works; within the Source form or
114 | documentation, if provided along with the Derivative Works; or,
115 | within a display generated by the Derivative Works, if and
116 | wherever such third-party notices normally appear. The contents
117 | of the NOTICE file are for informational purposes only and
118 | do not modify the License. You may add Your own attribution
119 | notices within Derivative Works that You distribute, alongside
120 | or as an addendum to the NOTICE text from the Work, provided
121 | that such additional attribution notices cannot be construed
122 | as modifying the License.
123 |
124 | You may add Your own copyright statement to Your modifications and
125 | may provide additional or different license terms and conditions
126 | for use, reproduction, or distribution of Your modifications, or
127 | for any such Derivative Works as a whole, provided Your use,
128 | reproduction, and distribution of the Work otherwise complies with
129 | the conditions stated in this License.
130 |
131 | 5. Submission of Contributions. Unless You explicitly state otherwise,
132 | any Contribution intentionally submitted for inclusion in the Work
133 | by You to the Licensor shall be under the terms and conditions of
134 | this License, without any additional terms or conditions.
135 | Notwithstanding the above, nothing herein shall supersede or modify
136 | the terms of any separate license agreement you may have executed
137 | with Licensor regarding such Contributions.
138 |
139 | 6. Trademarks. This License does not grant permission to use the trade
140 | names, trademarks, service marks, or product names of the Licensor,
141 | except as required for reasonable and customary use in describing the
142 | origin of the Work and reproducing the content of the NOTICE file.
143 |
144 | 7. Disclaimer of Warranty. Unless required by applicable law or
145 | agreed to in writing, Licensor provides the Work (and each
146 | Contributor provides its Contributions) on an "AS IS" BASIS,
147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148 | implied, including, without limitation, any warranties or conditions
149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150 | PARTICULAR PURPOSE. You are solely responsible for determining the
151 | appropriateness of using or redistributing the Work and assume any
152 | risks associated with Your exercise of permissions under this License.
153 |
154 | 8. Limitation of Liability. In no event and under no legal theory,
155 | whether in tort (including negligence), contract, or otherwise,
156 | unless required by applicable law (such as deliberate and grossly
157 | negligent acts) or agreed to in writing, shall any Contributor be
158 | liable to You for damages, including any direct, indirect, special,
159 | incidental, or consequential damages of any character arising as a
160 | result of this License or out of the use or inability to use the
161 | Work (including but not limited to damages for loss of goodwill,
162 | work stoppage, computer failure or malfunction, or any and all
163 | other commercial damages or losses), even if such Contributor
164 | has been advised of the possibility of such damages.
165 |
166 | 9. Accepting Warranty or Additional Liability. While redistributing
167 | the Work or Derivative Works thereof, You may choose to offer,
168 | and charge a fee for, acceptance of support, warranty, indemnity,
169 | or other liability obligations and/or rights consistent with this
170 | License. However, in accepting such obligations, You may act only
171 | on Your own behalf and on Your sole responsibility, not on behalf
172 | of any other Contributor, and only if You agree to indemnify,
173 | defend, and hold each Contributor harmless for any liability
174 | incurred by, or claims asserted against, such Contributor by reason
175 | of your accepting any such warranty or additional liability.
176 |
177 | END OF TERMS AND CONDITIONS
178 |
179 | APPENDIX: How to apply the Apache License to your work.
180 |
181 | To apply the Apache License to your work, attach the following
182 | boilerplate notice, with the fields enclosed by brackets "[]"
183 | replaced with your own identifying information. (Don't include
184 | the brackets!) The text should be enclosed in the appropriate
185 | comment syntax for the file format. We also recommend that a
186 | file or class name and description of purpose be included on the
187 | same "printed page" as the copyright notice for easier
188 | identification within third-party archives.
189 |
190 | Copyright [yyyy] [name of copyright owner]
191 |
192 | Licensed under the Apache License, Version 2.0 (the "License");
193 | you may not use this file except in compliance with the License.
194 | You may obtain a copy of the License at
195 |
196 | http://www.apache.org/licenses/LICENSE-2.0
197 |
198 | Unless required by applicable law or agreed to in writing, software
199 | distributed under the License is distributed on an "AS IS" BASIS,
200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201 | See the License for the specific language governing permissions and
202 | limitations under the License.
203 |
--------------------------------------------------------------------------------
/acc4_4regs.circ:
--------------------------------------------------------------------------------
1 |
2 |
3 | This file is intended to be loaded by Logisim-evolution (https://github.com/reds-heig/logisim-evolution).
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | addr/data: 8 8
66 | 0
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 | library ieee;
75 | use ieee.std_logic_1164.all;
76 |
77 | entity TCL_Generic is
78 | port(
79 | --Insert input ports below
80 | horloge_i : in std_logic; -- input bit example
81 | val_i : in std_logic_vector(3 downto 0); -- input vector example
82 |
83 | --Insert output ports below
84 | max_o : out std_logic; -- output bit example
85 | cpt_o : out std_logic_Vector(3 downto 0) -- output vector example
86 | );
87 | end TCL_Generic;
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
--------------------------------------------------------------------------------
/mux4.circ:
--------------------------------------------------------------------------------
1 |
2 |
3 | This file is intended to be loaded by Logisim-evolution (https://github.com/reds-heig/logisim-evolution).
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 | addr/data: 8 8
62 | 0
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 | library ieee;
71 | use ieee.std_logic_1164.all;
72 |
73 | entity TCL_Generic is
74 | port(
75 | --Insert input ports below
76 | horloge_i : in std_logic; -- input bit example
77 | val_i : in std_logic_vector(3 downto 0); -- input vector example
78 |
79 | --Insert output ports below
80 | max_o : out std_logic; -- output bit example
81 | cpt_o : out std_logic_Vector(3 downto 0) -- output vector example
82 | );
83 | end TCL_Generic;
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
350 |
351 |
352 |
353 |
354 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 |
373 |
374 |
--------------------------------------------------------------------------------
/reg4_4regs.circ:
--------------------------------------------------------------------------------
1 |
2 |
3 | This file is intended to be loaded by Logisim-evolution (https://github.com/reds-heig/logisim-evolution).
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | addr/data: 8 8
66 | 0
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 | library ieee;
75 | use ieee.std_logic_1164.all;
76 |
77 | entity TCL_Generic is
78 | port(
79 | --Insert input ports below
80 | horloge_i : in std_logic; -- input bit example
81 | val_i : in std_logic_vector(3 downto 0); -- input vector example
82 |
83 | --Insert output ports below
84 | max_o : out std_logic; -- output bit example
85 | cpt_o : out std_logic_Vector(3 downto 0) -- output vector example
86 | );
87 | end TCL_Generic;
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
350 |
351 |
352 |
353 |
354 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 |
373 |
374 |
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 |
--------------------------------------------------------------------------------
/docs/mark.min.js:
--------------------------------------------------------------------------------
1 | /*!***************************************************
2 | * mark.js v8.11.1
3 | * https://markjs.io/
4 | * Copyright (c) 2014–2018, Julian Kühnel
5 | * Released under the MIT license https://git.io/vwTVl
6 | *****************************************************/
7 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Mark=t()}(this,function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=i,this.iframesTimeout=o}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach(function(t){var n=e.filter(function(e){return e.contains(t)}).length>0;-1!==e.indexOf(t)||n||e.push(t)}),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var i=e.contentWindow;if(r=i.document,!i||!r)throw new Error("iframe inaccessible")}catch(e){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,i=!1,o=null,a=function a(){if(!i){i=!0,clearTimeout(o);try{r.isIframeBlank(e)||(e.removeEventListener("load",a),r.getIframeContents(e,t,n))}catch(e){n()}}};e.addEventListener("load",a),o=setTimeout(a,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(e){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,function(){return!0},function(e){r++,n.waitForIframes(e.querySelector("html"),function(){--r||t()})},function(e){e||t()})}},{key:"forEachIframe",value:function(t,n,r){var i=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=t.querySelectorAll("iframe"),s=a.length,c=0;a=Array.prototype.slice.call(a);var u=function(){--s<=0&&o(c)};s||u(),a.forEach(function(t){e.matches(t,i.exclude)?u():i.onIframeReady(t,function(e){n(t)&&(c++,r(e)),u()},u)})}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:null===t?e.nextNode():e.nextNode()&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var i=!1,o=!1;return r.forEach(function(e,t){e.val===n&&(i=t,o=e.handled)}),this.compareNodeIframe(e,t,n)?(!1!==i||o?!1===i||o||(r[i].handled=!0):r.push({val:n,handled:!0}),!0):(!1===i&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var i=this;e.forEach(function(e){e.handled||i.getIframeContents(e.val,function(e){i.createInstanceOnIframe(e).forEachNode(t,n,r)})})}},{key:"iterateThroughNodes",value:function(e,t,n,r,i){for(var o,a=this,s=this.createIterator(t,e,r),c=[],u=[],l=void 0,h=void 0;void 0,o=a.getIteratorNode(s),h=o.prevNode,l=o.node;)this.iframes&&this.forEachIframe(t,function(e){return a.checkIframeFilter(l,h,e,c)},function(t){a.createInstanceOnIframe(t).forEachNode(e,function(e){return u.push(e)},r)}),u.push(l);u.forEach(function(e){n(e)}),this.iframes&&this.handleOpenIframes(c,e,n,r),i()}},{key:"forEachNode",value:function(e,t,n){var r=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},o=this.getContexts(),a=o.length;a||i(),o.forEach(function(o){var s=function(){r.iterateThroughNodes(e,o,t,n,function(){--a<=0&&i()})};r.iframes?r.waitForIframes(o,s):s()})}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var i=!1;return n.every(function(t){return!r.call(e,t)||(i=!0,!1)}),i}return!1}}]),e}(),o=function(){function e(n){t(this,e),this.opt=r({},{diacritics:!0,synonyms:{},accuracy:"partially",caseSensitive:!1,ignoreJoiners:!1,ignorePunctuation:[],wildcards:"disabled"},n)}return n(e,[{key:"create",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),new RegExp(e,"gm"+(this.opt.caseSensitive?"":"i"))}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var i in t)if(t.hasOwnProperty(i)){var o=t[i],a="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(i):this.escapeStr(i),s="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o);""!==a&&""!==s&&(e=e.replace(new RegExp("("+this.escapeStr(a)+"|"+this.escapeStr(s)+")","gm"+n),r+"("+this.processSynonyms(a)+"|"+this.processSynonyms(s)+")"+r))}return e}},{key:"processSynonyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,function(e){return"\\"===e.charAt(0)?"?":""})).replace(/(?:\\)*\*/g,function(e){return"\\"===e.charAt(0)?"*":""})}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"})}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"],r=[];return e.split("").forEach(function(i){n.every(function(n){if(-1!==n.indexOf(i)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0})}),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n=this.opt.accuracy,r="string"==typeof n?n:n.value,i="";switch(("string"==typeof n?[]:n.limiters).forEach(function(e){i+="|"+t.escapeStr(e)}),r){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿")))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach(function(e){t.opt.separateWordSearch?e.split(" ").forEach(function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)}):e.trim()&&-1===n.indexOf(e)&&n.push(e)}),{keywords:n.sort(function(e,t){return t.length-e.length}),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort(function(e,t){return e.start-t.start}).forEach(function(e){var i=t.callNoMatchOnInvalidRanges(e,r),o=i.start,a=i.end;i.valid&&(e.start=o,e.length=a-o,n.push(e),r=a)}),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,i=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?i=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:i}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,i=!0,o=n.length,a=t-o,s=parseInt(e.start,10)-a;return(r=(s=s>o?o:s)+parseInt(e.length,10))>o&&(r=o,this.log("End range automatically set to the max value of "+o)),s<0||r-s<0||s>o||r>o?(i=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(s,r).replace(/\s+/g,"")&&(i=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:s,end:r,valid:i}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})},function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},function(){e({value:n,nodes:r})})}},{key:"matchesExclude",value:function(e){return i.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",i=e.splitText(t),o=i.splitText(n-t),a=document.createElement(r);return a.setAttribute("data-markjs","true"),this.opt.className&&a.setAttribute("class",this.opt.className),a.textContent=i.textContent,i.parentNode.replaceChild(a,i),o}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,i){var o=this;e.nodes.every(function(a,s){var c=e.nodes[s+1];if(void 0===c||c.start>t){if(!r(a.node))return!1;var u=t-a.start,l=(n>a.end?a.end:n)-a.start,h=e.value.substr(0,a.start),f=e.value.substr(l+a.start);if(a.node=o.wrapRangeInTextNode(a.node,u,l),e.value=h+f,e.nodes.forEach(function(t,n){n>=s&&(e.nodes[n].start>0&&n!==s&&(e.nodes[n].start-=l),e.nodes[n].end-=l)}),n-=l,i(a.node.previousSibling,a.start),!(n>a.end))return!1;t=a.end}return!0})}},{key:"wrapGroups",value:function(e,t,n,r){return r((e=this.wrapRangeInTextNode(e,t,t+n)).previousSibling),e}},{key:"separateGroups",value:function(e,t,n,r,i){for(var o=t.length,a=1;a-1&&r(t[a],e)&&(e=this.wrapGroups(e,s,t[a].length,i))}return e}},{key:"wrapMatches",value:function(e,t,n,r,i){var o=this,a=0===t?0:t+1;this.getTextNodes(function(t){t.nodes.forEach(function(t){t=t.node;for(var i=void 0;null!==(i=e.exec(t.textContent))&&""!==i[a];){if(o.opt.separateGroups)t=o.separateGroups(t,i,a,n,r);else{if(!n(i[a],t))continue;var s=i.index;if(0!==a)for(var c=1;c