Weaver Hardware Description Language
func fetch(chan<void> Inc; chan<uint<32> > Jmp) chan<uint<32> > Addr {
var uint<32> pc = 0
while {
Addr.send(pc)
await Jmp {
pc = Jmp.recv()
} or await Inc {
Inc.recv()
pc = pc + 1
}
}
}
Weaver is a hardware description language whose mission is to help software engineers design complex hardware systems without the need for deep hardware expertise.
New Here?
- Start with a Tutorial to get hands-on experience
- Refer to the Reference for syntax and details
- Read Explanations to deepen your understanding
Tutorials
Welcome to the Weaver tutorials! These step-by-step guides will teach you how to use Weaver to design hardware. Tutorials are designed to be completed in order. Each tutorial builds on concepts from previous ones.
- Getting Started with Weaver - Learn the basics: write your first Weaver program, understand the toolchain, and see your code in action.
- Building Your First Process - Create a simple process that demonstrates basic Weaver concepts: variables, loops, and channel communication.
- Working with Channels - Learn how processes communicate using channels, including sending, receiving, and waiting for data.
- Building a Complete Circuit - Put it all together: create a functional circuit using processes, channels, and custom types.
Reference
This is the complete technical reference for the Weaver hardware description language. Use this when you need to look up syntax, operators, types, or language features.
- Types - Describe how data is grouped (type definitions)
- Behavior - Describe what the circuit does (processes and functions)
- Structure - Describe how the circuit is organized (structural descriptions)
Design Philosophy
This section provides conceptual background, design rationale, and deeper understanding of Weaver’s architecture and design decisions. These explanations help you understand why things are the way they are.
- Design Philosophy - The core principles that guide Weaver’s design
- Validity and Truthiness - Why validity exists and how it enables flexible timing
- Composition Model - The rationale behind parallel, sequential, and choice composition operators
- Processes and Message Passing - Why processes have perpetual loops and how they map to hardware
Version 0.15
This documentation covers the lastest version of Loom, v0.15.