以下六个实验对比可出结果,结果如下
结果一:1,2或者3,4对比可知在always和initial对同一个变量赋值起冲突的时候,并不是先执行initial,而是看代码书写的先后顺序。
结果二:通过1和3,我们可以知道always并不是在initial运行完之后才开始运行的,而是两个块并行执行的。
结果三:通过4和5,或者3和6,或者5和6进行对比,我们知道了,阻塞赋值和非阻塞赋值还是会对赋值产生影响的,如果同时对一个变量进行赋值,有冲突的时候,应该是先执行阻塞赋值,再执行非阻塞赋值,也可以理解为非阻塞开始只是把地址付过去了,在本时刻的逻辑运行完之后,再统一赋值,所以说非阻塞赋值在阻塞之后。
代码1
module tb_top();
//internal reg
reg [7 : 0] data = 0;
//internal logic
initial begin
#2;
data <= 1;
#1;
data <= 3;
end
always #2 data <= 2;
endmodule
仿真结果
代码2
module tb_top();
//internal reg
reg [7 : 0] data = 0;
//internal logic
always #2 data <= 2;
initial begin
#2;
data <= 1;
#1;
data <= 3;
end
endmodule
仿真结果
代码3
module tb_top();
//internal reg
reg [7 : 0] data = 0;
//internal logic
initial begin
#2;
data = 1;
#1;
data = 3;
end
always #2 data = 2;
endmodule
仿真结果
代码4
module tb_top();
//internal reg
reg [7 : 0] data = 0;
//internal logic
always #2 data = 2;
initial begin
#2;
data = 1;
#1;
data = 3;
end
endmodule
仿真结果
代码5
module tb_top();
//internal reg
reg [7 : 0] data = 0;
//internal logic
always #2 data <= 2;
initial begin
#2;
data = 1;
#1;
data = 3;
end
endmodule
仿真结果
代码6
module tb_top();
//internal reg
reg [7 : 0] data = 0;
//internal logic
initial begin
#2;
data = 1;
#1;
data = 3;
end
always #2 data <= 2;
endmodule
仿真结果
自我感觉还不错,应该能够证明这个先后顺序的问题了,如果实验有问题的话欢迎留言评论呀,联系方式 企鹅767021331