对应教材为《Verilog HDL:A Guide to Digital Design and Synthesis》第二版 [美] Samir Palnitkar 著
层次建模
- 设计方法:自顶向下
- 模块
- 设计块
- 激励块(测试台test bench)
基本概念
- 词法
- 数字声明
- 数据类型
- reg和wire P21
- 向量和数组
- 字符串
- 系统任务
- \$display
- \$monitor
- \$time
- \$stop
- \$finish
模块和端口
- 端口连接规则 P35图
任务及函数
任务
- task
- 自动任务automatic
函数
- 自动函数automatic
- function
- 常量函数
- 带符号函数
- 区别 P112
门级建模
- 类型(逻辑图符P41)
- 与门and
- 或门or
- 异或门xor
- 与非门nand
- 或非门nor
- 同或门xnor
- 非门not
- 缓冲器buf
- 控制端bufif01/notid01
- 门实例数组
- 门延迟
- 上升 : 下降 : 关断
- 最小 , 典型 , 最大
数据流建模
- 连续赋值assign
- 规则 P51
- 延迟 #5
- 操作符 P60-67
- 优先级
行为级建模
- initial always
- 过程赋值(不加assign)
- 阻塞 =
- 非阻塞 <=
- 时序控制
- 延迟 #a
- 内嵌延迟
- 事件 @
- posedge 上升沿
- negedge 下降沿
- or
- 延迟 #a
- 条件 if else
- 多路分支
- case endcase
- casex casez
- 循环
- while()
- for()
- repeat(12)
- forever
- 块
- 顺序块
- begin end
- 并行块
- fork join
- 生成块
- generate endgenerate
- 循环 条件 case
- generate endgenerate
- 顺序块
实用建模技术
- 过程连续赋值
- assign deassign (寄存器)
- force relase (寄存器/线网)
- 改写(覆盖)参数
- defparam
- 模块调用参数赋值
- 条件编译/条件执行
- 条件编译 `ifdef `ifndef `else `elsif `endif
- 条件执行 \$test\$plusargs \$value\$plusargs
- 时间尺度
- `timescale \<time_unit>/\<time_precision>
- 常用的系统任务
- 文件输出
- 打开文件\$fopen
- 关闭文件\$fclose
- 写文件\$fdisplay \$fmonitor \$fwrite \$fstrobe
- 显示层次%m
- \$display \$write \$monitor \$strobe
- 选通显示\$strobe
- 随机数生成\$random P135
- 用数据文件对存储器初始化 \$readmemb \$readmemh
- 值变转储文件VCD P137
- 文件输出
拓展内容
- FPGA/CPLD
- FSM状态机