关于Verilog代码编写的细节
引言
该文章基于汪文祥的《CPU设计实战》总结
核心
Verilog编程的核心是面向硬件编程
写Verilog就是在画电路
面向硬件电路设计的思维: 数据通路 + 控制逻辑
CPU设计中需要遵守的规定
-
代码中禁止出现
initial
语句 -
代码中禁止出现
casex
,casez
-
代码中禁止用
#
表达电路延迟 -
时钟信号只能出现在
always
语句块中 -
代码中带复位的触发器,要么全部是同步复位,要么全部是异步复位
问题锦集
- 出现信号为
Z
RTL
里声明为wire
型的变量未被赋值- 模块调用的信号未连接导致信号悬空
- 信号为
X
RTL
里声明为reg
型的变量从未被赋值RTL
里多驱动的代码有时候也可能导致这种类型的错误
- 波形停止
- 波形停止是指仿真在某—时刻停止,再也无法前进分毫’而仿真却显示仍然在运行,这种错误往往是RTL里存在组合环路导致的。
组合环路’是指信号A的组合逻辑表达式中某个产生因子为B’而B的组合逻辑表达式中又用到了信号A
- 越沿采样
- 越沿采样是指一个被采样的信号在上升沿采样到了其在上升沿后的值,一般认为这是一个错误
- 是
RTL
里阻塞赋值=
和非阻塞赋值<=
使用不当导致的