关于 verilog-basics-for-lowlevel
面向固件和内核工程师的 Verilog/SystemVerilog 入门技能,帮助读懂 RTL 中的时序、复位和总线行为,以分析硬件相关的软件问题;不替代 HDL 设计课程。
主要功能
- 01理解模块及时序逻辑
- 02识别复位与时钟域问题
- 03阅读 APB、AHB 和 AXI 接口
- 04关联 RTL 与驱动行为
适用场景
- 01根据 RTL 澄清寄存器行为
- 02排查时钟域交叉故障
- 03分析 DMA/AXI 事务与驱动顺序
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mohitmishra786/ low-level-dev-skills --skill verilog-basics-for-lowlevel安装后在 Claude Code 中输入/verilog-basics-for-lowlevel确认已加载。
详细介绍
面向底层工程师的 Verilog 基础知识
目的
帮助固件和内核工程师掌握足够的 Verilog/SystemVerilog 知识,以便阅读 RTL:模块、时钟/复位、组合逻辑与时序逻辑、总线接口,以及硬件行为如何解释驱动程序错误——但不能替代 HDL 设计课程。
适用场景
- 参考手册不清楚——RTL 可解释寄存器行为
- 理解 CDC(时钟域跨越)错误
- 将 DMA/AXI 事务与驱动程序的顺序关联起来
- 与硬件团队一起审阅 SoC 框图
工作流
1. 模块结构
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 = 组合逻辑/网络;always 块中的 reg = 触发器,组合逻辑 always @(*) 除外。
2. 可综合子集(固件工程师需要了解的内容)
| 结构 | 含义 |
|---|---|
posedge clk | 寄存器更新 |
assign x = a & b | 组合逻辑 |
always @(*) 中的 case / if | 多路复用器逻辑 |
参数 #(.WIDTH(32)) | 可配置位宽 |
避免在可综合 RTL 中使用 #delay——它仅用于仿真。
3. 复位规范
- 常见做法是异步置位、同步释放(
rst_sync_n) - 固件必须等待复位后的建立时间——参见 RM 复位章节
- 多个复位域 → 外设可能需要显式的软件复位位
4. 总线协议(阅读 SoC 框图)
| 总线 | 典型用途 |
|---|---|
| APB | 低速外设、简单寄存器接口 |
| AHB | 片上较高吞吐量 |
| AXI | DMA、现代 SoC——突发传输、通道 |
Linux regmap MMIO 会映射到 RTL 地址映射中的 APB/AXI 从设备译码逻辑。
5. 时钟域
跨越 clk_a → clk_b 的信号需要同步器(2 个或更多触发器)。亚稳态会导致固件出现间歇性错误——单靠软件无法解决。
6. 仿真与芯片实测
# Typical open-source sim (conceptual)
iverilog -o sim.vvp design.v tb.v
vvp sim.vvp
QEMU/外设模型可能无法匹配 RTL 的边界情况。
7. Agent 用法
/verilog-basics-for-lowlevel Explain this APB register block and when STATUS bit updates relative to WRITE
常见问题
| 症状 | 原因 | 修复方法 |
|---|---|---|
| 位只翻转一次 | RTL 中的脉冲 | 在驱动程序中轮询锁存值 / 读取时清除 |
| 随机数据损坏 | CDC | 使用硬件同步器;不要通过修改延迟来绕过 |
| 读取到过期数据 | 总线桥缓冲区 | 遵循 RM 中的顺序要求 / 内存屏障 |
| IRQ 卡住 | RTL 中的电平触发与脉冲触发 | 匹配处理程序的 ACK 顺序 |
| Verilog 与 VHDL | SoC 文档混用 | 重点关注接口信号表 |
相关技能
skills/baremetal/mmio-and-bit-manipulation— 从 C 访问寄存器skills/baremetal/peripherals-from-datasheet— RM ↔ RTLskills/baremetal/datasheet-and-refmanual-reading— 文档导航skills/kernel-dev/device-tree— Linux 中的硬件集成skills/qemu/protocol-analysis— 验证总线时序
评论
支持 Markdown