Skip to content

Suggestion of structure for docs #151

@numero-744

Description

@numero-744

The goal is to both:

  • Make it easier for all people discovering SpinalHDL (knowing VHDL and Verilog might help but it is not a requirement)
  • Make it easier for people to find information

Root:

  • short description
  • short motivation
  • where to find docs
  1. Introduction
    1. About SpinalHDL
      1. What is SpinalHDL?
      2. The Spinal flow
      3. Advantages of using SpinalHDL over VHDL and Verilog
    2. A simple example (from the template)
      1. Component
      2. Ports
      3. Internal logic
    3. Projects using SpinalHDL
    4. Getting in touch
    5. License
    6. Contributing
    7. FAQ
    8. More learning materials (add cheatsheets)
      1. Help for people coming from VHDL
  2. Getting Started
    1. Install and setup
    2. Using spinal from *
    3. A simple guided exercise
      1. Writing the logic step by step
      2. Writing the test step by step (with only assignments sleep, also mention requirements and how to generate code if no compatible simulator)
      3. Running the test and open the waves in Gtkwave
      4. Congratulations! page
  3. Common hardware description concepts
    1. Notion of comb and seq logic (mention a few design errors)
    2. Data types & basic operators, literals
    3. Rules / conditions / muxing (+ setWhen/clearWhen + a few design errors)
    4. Component (+ interface, directions, how to instantiate)
    5. Comments (Huh, fast part)
    6. Areas (preview of clockdomains)
  4. Compound types (Bundle and Vec)
  5. Enumerated types (& encoding)
  6. Configuring generation (SpinalConfig)
  7. Blackboxing
  8. Managing growing projects (with package and import)
  9. More simulation facilities
    1. Simulation time vs hardware (types, syntax equivalent constructs at elaboration time/hardware/sim #145 + read & write into hardware)
    2. Interacting with a clockdomain
    3. Random tests
    4. Control flow and functions (like before but focusing on simulation)
  10. Common hardware generation concepts
    1. Elaboration-time vs hardware (types, syntax equivalent constructs at elaboration time/hardware/sim #145)
    2. Component parameters
    3. Creating a configuration
    4. Elaboration-time control flow (if, for, also mention null and mutability)
    5. Functions (+ when an Area should be created)
    6. Pre-conditions (require)
  11. The standard library
    1. Interconnections
      1. Flow
      2. Stream
      3. Fragment
    2. Buses
    3. Logic
      1. State machine
    4. Peripheral
      5. UART
    5. TODO other things
  12. Writing better code
    1. Style guidelines
    2. Idioms (Add section for idioms #131)
  13. At least one harder / less guided project for exercise (TODO)
  14. Helper scripts
    1. HTML test report generation (easy, just sbt config) + XML parser to match test list with spec if I have time (spoiler: I won't, unless my manager tells me to, and he is quite interested)
    2. Ubuntu full-flow installer (for teaching)
    3. Use one GTKWave config with several wave files
    4. GTKWave user configuration example
  15. More advanced stuff
    1. Clock domains
    2. Assertions
    3. Report
    4. RAM/ROM
    5. Analog and inout
    6. Details about simulation
    7. Formal verification
    8. Scope property
    9. Interaction with Scala
  16. Examples
  17. Appendix
    1. All other, more formal, contents
    2. Design errors

I would like "developers area" (about internals I guess) to be apart, because when searching things sometimes it appears first…
An idea could be to manage master and dev in parallel: dev has this and master doesn't.
Pushing/merging into master automatically opens a PR from master to dev, and contributions to this section are PR'd to dev.
Or maybe even two separate branches with completely different contents.

For reference, structure is inspired from: https://doc.rust-lang.org/stable/book/

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions