Verilog 文档
简洁、以示例为主的 Verilog 参考文档。先读概念,再看代码,然后在 Coddy 学习旅程中动手练习。
开始课程入门
- Verilog 是什么?用通俗的语言介绍 Verilog:它是什么、用来做什么、和普通编程语言有什么不同,以及为什么 40 年后数字电路设计者仍然在用它。
- 硬件与软件学过软件语言再学 Verilog,为什么会觉得摸不着头脑:默认并发,时间是一等概念,语句也不按顺序执行。
- 安装 Verilog安装 Icarus Verilog 和 GTKWave,在本地编译和仿真 Verilog。也可以跳过安装,直接用浏览器编辑器,两种方式都能学完这套文档。
- 你的第一个模块从零写出你的第一个完整 Verilog 模块:声明、端口、一段组合逻辑,以及驱动它的 testbench。可以直接在浏览器中运行。
- 注释如何在 Verilog 中写单行和多行注释,以及数字电路设计者用来让模块在不断变大时依然易读的文档写法。
数据类型与数字
- wire 与 regVerilog 中两种主要的数据类型:用于连续连接的 `wire` 和用于过程存储的 `reg`,以及每次在两者之间做选择的规则。
- 向量与数组如何用 `[7:0]` 声明多位信号、截取和拼接它们,以及 packed 向量和存储器数组之间的区别。
- 参数如何用 `parameter` 和 `localparam` 定义编译期常量、把位宽和深度参数化,并在实例化模块时覆盖这些值。
- 数字字面量Verilog 如何书写常量:定宽与不定宽,`'b` `'h` `'d` `'o` 四种进制,有符号数,用下划线提高可读性,以及让初学者栽跟头的陷阱。
- x 和 z 值Verilog 信号有四种可能的值,而不是两种。本文讲清 `x`(未知)和 `z`(高阻)在仿真中的真正含义,以及如何调试它们。
运算符
模块与结构
过程块
流程控制
时序逻辑与状态机
测试平台与仿真
- Testbench 基础如何编写 Verilog testbench:时钟生成、复位时序、激励、观察输出,以及驱动你每一次仿真的标准骨架。
- $display 与 $monitor`$display`、`$write` 和 `$monitor` 如何工作:常用的格式说明符、它们之间的区别,以及各自适合的场景。
- Dumpfile 与 VCD如何让测试平台输出 VCD 波形:`$dumpfile`、`$dumpvars`、作用域的选择,以及如何在 GTKWave 或浏览器编辑器中查看生成的文件。
- Timescale 与延迟`` `timescale `` 指令如何设定 `#delay` 的单位,不同文件混用不同单位时的规则,以及延迟与时钟驱动的逻辑如何相互作用。