module,interface认为是硬件;program,class认为是软件
过程块:1)always(可综合)
2)initial(不可综合)
always:
可用于module和interface中
always @ (posedge clk)----时序逻辑 " <= "
always @ ( * )----组合逻辑 " = "
eg:上文提到了always具备描述硬件电路行为和核心要素,你认为下列选项哪些是正确使用always的方式?
A. 由时钟驱动 B. 由其他非时钟信号驱动 C. 不同always语句块之间是并行执行的 D. 可以在always中初始化变量
答案:A B C
解析:由时钟驱动就是时序逻辑,由其他非时钟信号驱动就是组合逻辑,所以AB对。
always是并行执行,C对。可以对变量进行复位(rst_n),而不能初始化。D错
initial:(多用于testbench)
initial非常符合软件的执行方式,即只执行一次。
initial和always一样,无法被延迟执行,即在仿真一开始它们都会同时执行,执行时没有先后顺序之分。
initial内部是按时间顺序进行的。
eg:
initial begin
rst_n = 0 //先复位
#201
rst_n = 1 //延时201ns,复位结束
#2000
a = 1;
b = 1;
#20
a = 0;
b = 0;
#200
$stop;
end
initial过程块可以用在module、interface和program中。