-
Notifications
You must be signed in to change notification settings - Fork 67
Open
Description
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
- Introduction
- About SpinalHDL
- What is SpinalHDL?
- The Spinal flow
- Advantages of using SpinalHDL over VHDL and Verilog
- A simple example (from the template)
- Component
- Ports
- Internal logic
- Projects using SpinalHDL
- Getting in touch
- License
- Contributing
- FAQ
- More learning materials (add cheatsheets)
- Help for people coming from VHDL
- About SpinalHDL
- Getting Started
- Install and setup
- Using spinal from *
- A simple guided exercise
- Writing the logic step by step
- Writing the test step by step (with only assignments sleep, also mention requirements and how to generate code if no compatible simulator)
- Running the test and open the waves in Gtkwave
- Congratulations! page
- Common hardware description concepts
- Notion of comb and seq logic (mention a few design errors)
- Data types & basic operators, literals
- Rules / conditions / muxing (+ setWhen/clearWhen + a few design errors)
- Component (+ interface, directions, how to instantiate)
- Comments (Huh, fast part)
- Areas (preview of clockdomains)
- Compound types (Bundle and Vec)
- Enumerated types (& encoding)
- Configuring generation (SpinalConfig)
- Blackboxing
- Managing growing projects (with package and import)
- More simulation facilities
- Simulation time vs hardware (types, syntax equivalent constructs at elaboration time/hardware/sim #145 + read & write into hardware)
- Interacting with a clockdomain
- Random tests
- Control flow and functions (like before but focusing on simulation)
- Common hardware generation concepts
- Elaboration-time vs hardware (types, syntax equivalent constructs at elaboration time/hardware/sim #145)
- Component parameters
- Creating a configuration
- Elaboration-time control flow (
if,for, also mentionnulland mutability) - Functions (+ when an Area should be created)
- Pre-conditions (require)
- The standard library
- Interconnections
- Flow
- Stream
- Fragment
- Buses
- Logic
- State machine
- Peripheral
5. UART - TODO other things
- Interconnections
- Writing better code
- Style guidelines
- Idioms (Add section for idioms #131)
- At least one harder / less guided project for exercise (TODO)
- Helper scripts
- 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)
- Ubuntu full-flow installer (for teaching)
- Use one GTKWave config with several wave files
- GTKWave user configuration example
- More advanced stuff
- Clock domains
- Assertions
- Report
- RAM/ROM
- Analog and
inout - Details about simulation
- Formal verification
- Scope property
- Interaction with Scala
- Examples
- Appendix
- All other, more formal, contents
- 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/
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels