1.抽象级别:(行为级、RTL级、门级)
行为级模型:1主要用于testbench;2着重于系统行为和算法描述,不在于电路实现;3、不可综合;4主要采用高级语言
RTL级模型:1主要用于ASIC和FPGA设计;2着重于描述功能块内部与功能块之间的数据流与控制信号,着重于电路实现,在于如何在timing、area、power中作出平衡。3可综合出门级模型;4采用可综合的语言结构
门级模型:1主要用于后端的物理实现;2实际电路的逻辑实现;3主要采用逻辑门、用户定义原语
2.保持一致
尽量不要使用内嵌编译指令(//synopsys full_case paraller_case) 可能导致前后仿真不一致。
小心使用casex和casez,也可能导致前后仿真不一致。
3常数
Verilog采用四值逻辑:0、1、x、z;
最简单的整数是十进制数,因此要避免如下写法:
case (sel[1:0])
00: y = a;
01: y = a;
10: y = a; //not execute decimal 10
11: y = a; //not execute decimal 11
endcase
z可用?代替
没有size限定的数,按照最左边的位进行拓展。
reg [11:0] a, b, c, d;
initial begin
a = 'hx; //xxx;
b = 'h3x; //03x;
c = 'hz3; //zz3;
d = 'h0z3; //0z3;
end
负数以2的补码形式进行表示。
-8'd6 // -(8'd6)
4'shf // -4'h1
实数real 采用双精度浮点数,有两种方式表示:十进制法和科学技术法。实数赋给整数时,按四舍五入转换后赋值。
字符串string 包含在两个“(双引号)之间的字符,使用reg操作时,每8-bit存一个字符。
4 数据类型
Verilog中有两种数据类型:变量和线网,区别在赋值和保持的方式,代表不同的硬件结构。
除了trireg之外,线网类型不能保存值,线网值由driver决定。
wire用于逻辑门的驱动或连续赋值的驱动,多个相同驱动强度的driver驱动同一个wire时出现逻辑冲突,值为x。
线逻辑类型线网wor wand trior triand用于解决多个driver驱动同一个线网时的逻辑冲突,分别多个驱动实现逻辑与 逻辑或
tri0表示带有下拉电阻的线网,没有驱动时,值为0
tri1表示带有上拉电阻的线网,没有驱动时,值为1
supply0、supply1用于模型电源,只提供0和1值的线网。
变量保持每次赋给他的值,直到下一次赋值。reg time integer初始值为x,real realtime 初始值为0.