2025-01-17 21:58:02 +00:00
|
|
|
## Boolean Engineering
|
|
|
|
- Truth tables
|
|
|
|
- Only practical for small circuits
|
|
|
|
- Schematic capture
|
|
|
|
- Using CAD to place logic gates on a virtual canvas
|
|
|
|
- Facilitates *hierarchical design*
|
|
|
|
- Good for larger circuits
|
|
|
|
- Don't scale well for very large circuits
|
|
|
|
- Hardware Description Languages
|
|
|
|
- Enables hierarchical design
|
|
|
|
- Standardized by IEEE
|
|
|
|
- Design is more portable
|
|
|
|
- Usable in combination with schematic design
|
|
|
|
|
|
|
|
# Verilog
|
2025-01-17 22:03:02 +00:00
|
|
|
- Originally developed by Gateway Design Automation
|
|
|
|
- Put in public domain in 1990
|
|
|
|
- Standardized in 1995
|
|
|
|
- Originally intended for simulation of logic networks, later adapted to synthesis
|
|
|
|
|
|
|
|
```verilog
|
2025-01-17 23:01:27 +00:00
|
|
|
// V---V---v--v-----portlist (not ordered)
|
2025-01-17 22:03:02 +00:00
|
|
|
module example1(x1, x2, s, f);
|
2025-01-17 23:01:27 +00:00
|
|
|
// Defining the types of the various ports
|
2025-01-17 22:03:02 +00:00
|
|
|
input x1, x2, s;
|
2025-01-17 22:51:27 +00:00
|
|
|
output f;
|
2025-01-17 23:01:27 +00:00
|
|
|
// The first argument is the output value.
|
|
|
|
// In this example, `k`, `g`, `h`, `f` are implicitly declared.
|
|
|
|
// They could also be declared manually with the syntax `wire foo`, alongside the `input` and `output` declarations
|
2025-01-17 23:06:27 +00:00
|
|
|
not(k, s); // You can also NOT a variable using a tilde, eg `~s`
|
2025-01-17 22:51:27 +00:00
|
|
|
and(g, k, x1);
|
|
|
|
and(h, s, x2);
|
|
|
|
or(f, g, h);
|
2025-01-17 22:56:27 +00:00
|
|
|
endmodule
|
|
|
|
```
|
|
|
|
|
2025-01-17 23:06:27 +00:00
|
|
|
- Behavioral Verilog describes broader behavior, at a higher level
|
|
|
|
- Structural Verilog describes how things are laid out at a logic level
|
|
|
|
|