目录
1.硬件过程块
在SV中应该先清楚哪些语句用于硬件,哪些用于软件。为了区分硬件设计、软件世界,我们将定义的软件变量或者例化的硬件其所在的空间称之为域。
module/endmodule,interface/endinterface可以被视为硬件世界;
program/endprogram和class/endclass可以被视为软件世界。
1.1 Verilog中的initial和always语句
一个程序模块中可以有多个initial和always模块,每个initial和always说明语句在仿真一开始就会立即开始执行,initial语句只执行一次,而always语句则是不断重复执行,直到仿真过程结束。
1.1.1 initial语句
initial语句主要有两个功能,变量初始化以及生成激励波形
对变量的初始化代码如下:
initial
begin
areg=0;
for(index=0;index<size;index=index+1)
memory[index]=0;
end
生成激励波形代码如下:
initial
begin
inputs='b000000;
#10 inputs='b011001;
#10 inputs='b011011;
#10 inputs='b011000;
#10 inputs='b001000;
end
注意:一个模块中可以有多个initial语句,它们都是并行执行的,initial常用于测试文件和虚拟模块的编写,用来产生仿真测试信号和设置信号记录等仿真环境。
1.1.2 always语句
always语句由于其不断活动的特性,只有和一定的时序控制组合在一起才能使用。其格式如下:
always <时序控制> <语句>
可作为激励信号测试电路,如下所示生成信号周期为period的信号波形:
always #half_period areg = ~areg;
时序控制可以是边沿触发也可以是电平触发,可以是单个信号也可以是多个信号,中间需要用关键字or连接,如下所示: