/verilog-basics-for-lowlevel
Verilog basics skill for firmware and kernel engineers. Use when reading RTL to understand hardware behavior, reset/clock domains, bus protocols, or collaborating with hardware teams. Activates on queries about Verilog basics, RTL, hardware description, clock domain, reset
$ npx -y skills add mohitmishra786/low-level-dev-skills --skill verilog-basics-for-lowlevel --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/verilog-basics-for-lowlevel
Context preview
The summary Claude sees to decide when to auto-load this skill.
Verilog basics skill for firmware and kernel engineers. Use when reading RTL to understand hardware behavior, reset/clock domains, bus protocols, or collaborating with hardware teams. Activates on queries about Verilog basics, RTL, hardware description, clock domain, reset
SKILL.md
verilog-basics-for-lowlevel.SKILL.mdname: verilog-basics-for-lowlevel
description: Verilog basics skill for firmware and kernel engineers. Use when reading RTL to understand hardware behavior, reset/clock domains, bus protocols, or collaborating with hardware teams. Activates on queries about Verilog basics, RTL, hardware description, clock domain, reset synchronizer, or MMU in hardware.
Verilog Basics for Low-Level Engineers
Purpose
Give firmware and kernel engineers enough Verilog/SystemVerilog literacy to read RTL: modules, clocks/resets, combinational vs sequential logic, bus interfaces, and why hardware behavior explains driver bugs — not a replacement for HDL design courses.
When to Use
- Reference manual unclear — RTL clarifies register behavior
- Understanding CDC (clock domain crossing) bugs
- Correlating DMA/AXI transactions with driver ordering
- Reviewing SoC block diagram with hardware team
Workflow
1. Module structure
module uart_tx (
input wire clk,
input wire rst_n, /* active-low async reset */
input wire start,
input wire [7:0] data,
output reg busy
);
/* sequential logic */
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
busy <= 1'b0;
else if (start)
busy <= 1'b1;
/* ... */
end
endmodule`wire` = combinational/network; `reg` in `always` block = flip-flop unless combinational `always @(*)`.
2. Synthesizable subset (what firmware folks need)
| Construct | Meaning | |-----------|---------| | `posedge clk` | Registered update | | `assign x = a & b` | Combinational | | `case` / `if` in `always @(*)` | Mux logic | | Parameters `#(.WIDTH(32))` | Configurable width |
Avoid `#delay` in synthesizable RTL — simulation only.
3. Reset discipline
- Async assert, sync deassert common (`rst_sync_n`)
- Firmware must wait post-reset setup times — see RM reset chapter
- Multiple reset domains → peripheral may need explicit soft reset bit
4. Bus protocols (reading SoC diagrams)
| Bus | Typical use | |-----|-------------| | APB | Slow peripherals, simple reg interface | | AHB | Higher throughput on-chip | | AXI | DMA, modern SoCs — bursts, channels |
Linux `regmap` MMIO maps to APB/AXI slave decode in RTL address map.
5. Clock domains
Signals crossing `clk_a` → `clk_b` need synchronizers (2+ FFs). Metastability causes **intermittent** firmware bugs — not fixed in software alone.
6. Simulation vs silicon
# Typical open-source sim (conceptual)
iverilog -o sim.vvp design.v tb.v
vvp sim.vvp
QEMU/peripheral models may not match RTL edge cases.
7. Agent usage
/verilog-basics-for-lowlevel Explain this APB register block and when STATUS bit updates relative to WRITE
Common Problems
| Symptom | Cause | Fix | |---------|-------|-----| | Bit toggles once | Pulse in RTL | Poll latch / clear-on-read in driver | | Random corruption | CDC | Hardware synchronizer; don't hack delays | | Read stale data | Bus bridge buffer | Follow RM ordering / barrier | | IRQ stuck | Level vs pulse in RTL | Match handler ACK sequence | | Verilog vs VHDL | Mixed SoC docs | Focus on interface signals table |
Related Skills
- `skills/baremetal/mmio-and-bit-manipulation` — register access from C
- `skills/baremetal/peripherals-from-datasheet` — RM ↔ RTL
- `skills/baremetal/datasheet-and-refmanual-reading` — doc navigation
- `skills/kernel-dev/device-tree` — hardware integration in Linux
- `skills/qemu/protocol-analysis` — validate bus timing
Read more
name: verilog-basics-for-lowlevel description: Verilog basics skill for firmware and kernel engineers. Use when reading RTL to understand hardware behavior, reset/clock domains, bus protocols, or collaborating with hardware teams. Activates on queries about Verilog basics, RTL, hardware description, clock domain, reset synchronizer, or MMU in hardware.
Verilog Basics for Low-Level Engineers
Purpose
Give firmware and kernel engineers enough Verilog/SystemVerilog literacy to read RTL: modules, clocks/resets, combinational vs sequential logic, bus interfaces, and why hardware behavior explains driver bugs — not a replacement for HDL design courses.
When to Use
- Reference manual unclear — RTL clarifies register behavior
- Understanding CDC (clock domain crossing) bugs
- Correlating DMA/AXI transactions with driver ordering
- Reviewing SoC block diagram with hardware team
Workflow
1. Module structure
module uart_tx (
input wire clk,
input wire rst_n, /* active-low async reset */
input wire start,
input wire [7:0] data,
output reg busy
);
/* sequential logic */
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
busy <= 1'b0;
else if (start)
busy <= 1'b1;
/* ... */
end
endmodule`wire` = combinational/network; `reg` in `always` block = flip-flop unless combinational `always @(*)`.
2. Synthesizable subset (what firmware folks need)
| Construct | Meaning | |-----------|---------| | `posedge clk` | Registered update | | `assign x = a & b` | Combinational | | `case` / `if` in `always @(*)` | Mux logic | | Parameters `#(.WIDTH(32))` | Configurable width |
Avoid `#delay` in synthesizable RTL — simulation only.
3. Reset discipline
- Async assert, sync deassert common (`rst_sync_n`)
- Firmware must wait post-reset setup times — see RM reset chapter
- Multiple reset domains → peripheral may need explicit soft reset bit
4. Bus protocols (reading SoC diagrams)
| Bus | Typical use | |-----|-------------| | APB | Slow peripherals, simple reg interface | | AHB | Higher throughput on-chip | | AXI | DMA, modern SoCs — bursts, channels |
Linux `regmap` MMIO maps to APB/AXI slave decode in RTL address map.
5. Clock domains
Signals crossing `clk_a` → `clk_b` need synchronizers (2+ FFs). Metastability causes **intermittent** firmware bugs — not fixed in software alone.
6. Simulation vs silicon
# Typical open-source sim (conceptual) iverilog -o sim.vvp design.v tb.v vvp sim.vvp
QEMU/peripheral models may not match RTL edge cases.
7. Agent usage
/verilog-basics-for-lowlevel Explain this APB register block and when STATUS bit updates relative to WRITE
Common Problems
| Symptom | Cause | Fix | |---------|-------|-----| | Bit toggles once | Pulse in RTL | Poll latch / clear-on-read in driver | | Random corruption | CDC | Hardware synchronizer; don't hack delays | | Read stale data | Bus bridge buffer | Follow RM ordering / barrier | | IRQ stuck | Level vs pulse in RTL | Match handler ACK sequence | | Verilog vs VHDL | Mixed SoC docs | Focus on interface signals table |
Related Skills
- `skills/baremetal/mmio-and-bit-manipulation` — register access from C
- `skills/baremetal/peripherals-from-datasheet` — RM ↔ RTL
- `skills/baremetal/datasheet-and-refmanual-reading` — doc navigation
- `skills/kernel-dev/device-tree` — hardware integration in Linux
- `skills/qemu/protocol-analysis` — validate bus timing
A curated suite of AI agent skills for systems and low-level programming — C/C++, Rust, Zig, GPU, bare-metal firmware, Linux kernel/driver development, computer architecture, compiler internals, HPC, and more.
Repo: mohitmishra786/low-level-dev-skills
Other skills on low-level-dev-skills.
- /custom-allocators
Custom allocator skill for memory allocation strategies. Use when implementing pool/slab/arena allocators, tuning jemalloc/mimalloc, writing Rust GlobalAlloc, or benchmarking allocator performance. Activates on queries about jemalloc, mimalloc, tcmalloc, arena allocator,
Open skill - /numa-programming
NUMA programming skill for multi-socket memory locality. Use when detecting NUMA topology, binding processes with numactl, using libnuma API, building NUMA-aware data structures, or measuring remote access penalties. Activates on queries about numactl, libnuma, NUMA topology,
Open skill - /af-xdp
AF_XDP skill for high-performance XDP sockets. Use when creating AF_XDP sockets, configuring UMEM and XSK rings, XDP_REDIRECT programs, copy vs zero-copy mode, or comparing with DPDK. Activates on queries about AF_XDP, xsk_umem, XDP_REDIRECT, libbpf xsk, or zero-copy XDP.
Open skill - /dpdk
DPDK skill for userspace packet I/O. Use when initializing EAL, configuring PMD drivers, using mbuf pools and rte_ring, setting up huge pages, RSS, or testpmd validation. Activates on queries about DPDK, EAL, rte_eth_rx_burst, hugepages, PMD, or testpmd.
Open skill - /io-uring
io_uring skill for Linux async I/O. Use when building high-performance servers with liburing, multi-shot operations, provided buffers, fixed files, zero-copy send, or tokio-uring. Activates on queries about io_uring, SQE/CQE, liburing, IORING_OP_PROVIDE_BUFFERS, or io_uring vs
Open skill - /adc-dac-baremetal
Bare-metal ADC and DAC skill. Use when configuring analog sampling, DMA-driven ADC, calibration, or DAC output on MCUs. Activates on queries about ADC bare-metal, sampling time, DMA ADC, or DAC channel setup.
Open skill

