|
发表于 2010-5-22 18:27:26
|
显示全部楼层
本帖最后由 jemmyplus 于 2010-5-22 18:29 编辑
没错,这段RTL Code如果拿去做simulation,应该busy会一直unkonw到底,
因为sta_condition,sto_condition 在初始时,并没有给定值,所以值是unknow.
假设程序是要做async low reset,则程序要改为
always @(posedge clk or negedge rst)
if (!rst)
begin
sta_condition <= #1 1'b0;
sto_condition <= #1 1'b0;
end
else
begin
sta_condition <= #1 ~sSDA & dSDA & sSCL;//
sto_condition <= #1 sSDA & ~dSDA & sSCL;//
end
always @(posedge clk or negedge rst)
else if (!rst)
busy <= #1 1'b0;
else
busy <= #1 sta_condition & ~sto_condition;
其中
#1 的目的只是让simulation出来的结果更接近真实的情况,
如果不加#1,那就是看simulator的判定,一般是会判定"变化之前"
但是这有可能会视simulator的不同而有所不同.
|
|