# CircuitVerse project

This page contains the details of a technical writing project accepted for
Google Season of Docs.

### Project summary

Open source organization:
:   CircuitVerse

Technical writer:
:   dvls

Project name:
:   CircuitVerse Interactive Book Consolidation and Improvements

Project length:
:   Standard length (3 months)

### Project description

# 1 Abstract

CircuitVerse is an open source project aiming to provide a platform
where circuits can be designed and simulated using a web-based
graphical user interface. The logic simulator can be used to design up
to complete CPU implementations, although it is designed primarily for
educational use. Besides the technical documentation for the
software, an online interactive book guides the user in learning
digital logic design. The book allows the user to try out circuits
directly from within the book for an interactive experience.

The book is in an early state of development and is currently lacking
some relevant sections, the general structure is loose in terms of a
flow connecting the different sections, and requires more detailed
content. Moreover, according to the organization, there are not
guidelines to help contributors to collaborate to the project nor is a
plan or road-map to guide contributions on which contents are needed
and with which priority.

The aims of this proposal are to collaborate with the mentors to
create contribution guidelines, produce a topic development plan and
contribute with improving current content as well as create new
content according to the development plan.

# 2 The Current State of the Interactive Book

Since the project's kick-start in Google Summer of Code 2019, it has
exhibited an "unmanaged growth", with the help of the student
community. The project organization itself is formed mainly by
developers, therefore they have taken part of the GSoD to seek for
external help to improve the Interactive Book. The project's
developers have identifies that the book is currently requiring the
rewrite of some sections, new content addition and make it more
detailed and comprehensive. Moreover, the team expect to have, after
the GSoD, guidelines for new contributions as well as a general
"master plan" for the content development.

# 3 What is the contribution of this proposal

This proposal will contribute with the co-creation of a first version
of contribution guidelines, aiming to ensure a more harmonic process
of collaboration for contributors, thus leading to more consistent
contents. A development plan for the book's topics will also be
outlined. The most urgent additions and changes according to the new
development plan will also be contributed.

# 4 Analysis of available alternatives

Several mature open source projects of similar characteristics have
already developed contribution guidelines for documentation, such as
Wikibooks (\[Help:Contributing\], \[Wikibooks:Policies and guidelines\]),
OpenStreetMap (\[Organised Editing Guidelines\]) or The Linux
Documentation Project (\[LDP Author Guide\]). These examples can be used
to build the project's guidelines based on the experience of
successful open source projects.

For the topic's development plan it is possible to compare syllabi of
open courses (e.g. \[MIT Open Courseware\]) as well as reference books
about digital logic circuits, including open books such as \[Lessons In
Electric Circuits -- Volume IV -Digital\], \[Wikibooks: Digital
Circuits\] and \[Wikibooks: Digital Electronics\].

\[Help:Contributing\] https://en.wikibooks.org/wiki/Help:Contributing

\[Wikibooks:Policies and guidelines\]
https://en.wikibooks.org/wiki/Wikibooks:Policies_and_guidelines

\[Organised Editing Guidelines\]
https://wiki.osmfoundation.org/wiki/Organised_Editing_Guidelines

\[LDP Author Guide\]
https://www.tldp.org/LDP/LDP-Author-Guide/html/index.html

\[MIT Open Courseware\] https://ocw.mit.edu/

\[Lessons In Electric Circuits -- Volume IV -Digital\]
https://www.ibiblio.org/kuphaldt/electricCircuits/Digital/index.html

\[Wikibooks: Digital Circuits\]
https://en.wikibooks.org/wiki/Digital_Circuits

\[Wikibooks: Digital Electronics\]
https://en.wikibooks.org/wiki/Digital_Electronics

# 5 Structure of the proposed documentation

The interactive book has the potential to be useful for a broad
audience ranging from amateur electronic hobbyist and secondary
education students to tertiary education students and professionals in
need of refreshing or strengthening their skills in digital logic
circuits.

In order to address the heterogeneity in the book's users a
"multi-layer" structure is proposed, where each layer correspond to
increasing level of complexity and theoretical depth of the contents.

Therefore, the documentation's structure grows in two dimensions, the
first dimension corresponds to the logical or traditional sequence of
topics in digital logic systems, while the second dimension represents
the level.

In the following structured list the proposed two-dimensional structure is represented. The
standard topic sequence is presented in the topmost level. For simplicity, only
three layers of complexity are defined for each topic, corresponding
to basic, medium and advanced levels. For each level the
contents related to the specific general topic are listed.

- Representation using binarty numbers:
  - Basic level: Binary numbers, Negative quantities, Other bases, Codification.
  - Medium level: \[no specific content\]
  - Advanced level: Modules and rings
- Mathematical operations with binary numbers:
  - Basic level: Addition, Subtraction, Multiplication, Division
  - Medium level: Boolean algebra, Boolean functions
  - Advanced level: Other algebras, Shannon decomposition
- Combinational SSI components:
  - Basic level: Symbols, Logic gates, Truth tables
  - Medium level: Logic families, Universal gates
  - Advanced level: Time behaviour (timing models, hazards)
- Combinational logic design:
  - Basic level: Functional description, Implementation
  - Medium level: Canonical functions, k-Maps
  - Advanced level: Map-entered variables, Quine McCluskey, Binary cubes representation
- Combinational MSI components:
  - Basic level: MUX, DEMUX, Encoder, Decoder, Half adder, Full adder
  - Medium level: MUX based functions
  - Advanced level: \[no specific content\]
- Combinational LSI components:
  - Basic level: ROM, ALU
  - Medium level: PLDs (PLA, PAL, GAL)
  - Advanced level: \[no specific content\]
- Sequential SSI components:
  - Basic level: Latches, Flip-flops, Clock signals, Time diagrams
  - Medium level: Memory Feedback, Synchronous systems, Asynchronous systems
  - Advanced level: \[no specific content\]
- Sequential MSI components:
  - Basic level: Registers, Counters
  - Medium level: \[no specific content\]
  - Advanced level: \[no specific content\]
- Sequential design:

  - Basic level: \[no specific content\]
  - Medium level: Sequential synthesis, FSM (Mealy, Moore), State diagrams, State minimization, State assignment, Race conditions
  - Advanced level: MSI based design, LSI based design, Flow diagrams, MDS diagrams

  The basic level should allow users to understand how digital logic
  circuits work and how to use them, without requiring knowledge of
  higher maths. Thus, it could be suitable for amateur hobbyist and
  secondary education students. If these users have the necessary skills
  and want to build a deeper understanding, they can work some or all
  the contents of the medium level.

  The medium level should be equivalent in contents and requirements to
  a tertiary education level introductory course in digital logic
  system.

  Finally, the advanced level includes contents which can usually be
  found in complementary or optional advanced courses of digital systems
  in universities.

  This proposed structure will be discussed with the mentors in the
  early phase of the project (Week 3), which will then be used as an
  input to outline a long-term topic development plan.

  The proposed structure can make use of most, if not all, the current
  content of the documentation, which will be revised and extended or
  corrected accordingly, when necessary. Moreover, new sections will be
  written for those contents which are not yet covered by the existing
  documentation.

# 6 Goals

1. Produce a first draft of contribution guidelines for the Interactive Book project.
2. Outline a development for the book's topics.
3. Rewrite and restructure current content.
4. Create new content according to the development plan.

# 7 Timeline

Week 1: (Sep. 14th - Sep. 20th) Analyse and discuss with the mentors the
best guidelines based on other project's examples as well as the
experience obtained so far in the project.
Week 2: (Sep. 21st - Sep. 27th) Write the draft of the guidelines
Week 3: (Sep. 28th - Oct. 4th) Discuss draft of topic development plan
with mentors.
Week 4: (Oct. 5th - Oct. 11th) Write development plan.
Weeks 5 to 11: (Oct. 12th - Nov. 29th) Write the contributions,
consisting in restructured content as well as new topics.
Week 12: (Nov. 30th - Dec. 5th) Project report submission.
Project evaluation: (Dec. 3rd - Dec. 10th)
- Technical writer's evaluation submission.
- Mentors' evaluation submission.

# 8 Why the CircuitVerse Interactive Book

Due to the COVID-19 global crisis, I started looking for on-line
resources which would help my students of a undergraduate course on
digital logic systems. I have been an advocate of Free-Libre Open
Source technologies for several decades now, so I give priority to
these kind of projects. I found the CircuitVerse simulator and I
decided it was a great tool to supplement the lack of laboratory
activities due to the COVID-19 containment measures of our
University. While testing the simulator, I also found their
Interactive Book, and even though the content was not yet enough as
the main reference for a complete course on digital logic systems its
current contents were correct and easy to understand so I included it
to the learning resources.

Since I was using their simulator and book intensively I was contacted
by the organization to tell me about the GSoD. I saw in this an
opportunity to contribute back to the project straight from my area of
expertise.

# 9 References

- \[Wikibooks Help:Contributing\],
- \[Wikibooks:Policies and guidelines\]
- \[OpenStreetMap Organised Editing Guidelines\]
- \[The Linux Documentation Project (LDP) Author Guide\]
- \[MIT Open Courseware Introductory Digital Systems Laboratory Syllabus\]
- \[Lessons In Electric Circuits -- Volume IV -Digital\]
- \[Wikibooks: Digital Circuits\]
- \[Wikibooks: Digital Electronics\]
- \[The Linux Brochure Project\]

  \[Wikibooks Help:Contributing\]
  https://en.wikibooks.org/wiki/Help:Contributing

  \[Wikibooks:Policies and guidelines\]
  https://en.wikibooks.org/wiki/Wikibooks:Policies_and_guidelines

  \[OpenStreetMap Organised Editing Guidelines\]
  https://wiki.osmfoundation.org/wiki/Organised_Editing_Guidelines

  \[The Linux Documentation Project (LDP) Author Guide\]
  https://www.tldp.org/LDP/LDP-Author-Guide/html/index.html

  \[MIT Open Courseware Introductory Digital Systems Laboratory Syllabus\]
  https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-111-introductory-digital-systems-laboratory-spring-2006/syllabus/

  \[Lessons In Electric Circuits -- Volume IV -Digital\]
  https://www.ibiblio.org/kuphaldt/electricCircuits/Digital/index.html

  \[Wikibooks: Digital Circuits\]
  https://en.wikibooks.org/wiki/Digital_Circuits

  \[Wikibooks: Digital Electronics\]
  https://en.wikibooks.org/wiki/Digital_Electronics

  \[The Linux Brochure Project\] http://lbproject.sourceforge.net/