System Verilog学习笔记(六)——设计特性
可综合设计的主要优化
- 添加接口(interface)从而将通信和协议检查进一步封装
- 添加类似C语言的数据类型,例如int、byte
- 添加用户类型自定义类型,枚举类型和结构体类型
- 添加类型转换($cast(T,S)或’())
- 添加包(package)从而使得多个设计之间可以共享公共类型和方法
- 添加方便的赋值操作符和运算操作符,例如++、+=、===
- 添加priority和unique case 语句
- 添加组合逻辑always_comb、锁存逻辑always_latch和时序逻辑always_ff等过程语句块
过程语句块
- always_comb
always_comb可以自动嵌入敏感列表;
可以禁止共享变量,即赋值左侧的变量无法被另一个过程块赋值;
若其表示的不是组合逻辑,会发出警告;
always_comb在仿真0时刻会自动触发一次,无论在0时刻是否有敏感信号列表中的信号发生变化。always不会在仿真0时刻触发。 - always_latch
always_latch表示锁存逻辑,且自动插入敏感列表; - always_ff
always_ff用来表示时序逻辑
always_ff @(posedge clock, negedge resetN)
敏感列表必须指明posedge或者negedge,从而使得EDA工具实现同步或者异步的复位逻辑。
赋值操作符
Verilog没有简单的方法可以对向量填充1。
SV可以通过’0,'1,'z,'x来分别填充0,1,z和x。这样代码可以根据向量的宽度自动填充。
case语句
SV提供了unique和priority的声明,结合case,casex和casez来实现case对应的硬件电路。
unique case要求每次case选择必须只能满足一条case选项;
unique case不能有重叠的选项,即多个满足条件的选项。
unique case可以并行执行。
priority case表示至少有一个case选项满足要求;如果有多个case选项满足时,第一个满足的分支会优先执行;priority case的逻辑与if…else的逻辑一致;