mcpField
V
verilog-basics-for-lowlevel

verilog-basics-for-lowlevel

github.com/mohitmishra786开发269274 次安装18 周前更新
代码仓库

关于 verilog-basics-for-lowlevel

面向固件和内核工程师的 Verilog/SystemVerilog 入门技能,帮助读懂 RTL 中的时序、复位和总线行为,以分析硬件相关的软件问题;不替代 HDL 设计课程。

主要功能

  1. 01理解模块及时序逻辑
  2. 02识别复位与时钟域问题
  3. 03阅读 APB、AHB 和 AXI 接口
  4. 04关联 RTL 与驱动行为

适用场景

  1. 01根据 RTL 澄清寄存器行为
  2. 02排查时钟域交叉故障
  3. 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片上较高吞吐量
AXIDMA、现代 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 与 VHDLSoC 文档混用重点关注接口信号表

相关技能

  • skills/baremetal/mmio-and-bit-manipulation — 从 C 访问寄存器
  • skills/baremetal/peripherals-from-datasheet — RM ↔ RTL
  • skills/baremetal/datasheet-and-refmanual-reading — 文档导航
  • skills/kernel-dev/device-tree — Linux 中的硬件集成
  • skills/qemu/protocol-analysis — 验证总线时序

评论

支持 Markdown