//这里对上升沿标志和下降沿标志进行了定义,3r为2r的上一状态
assign dq_neg = ~dq_in_2r & dq_in_3r ;//下降沿检测
assign dq_pos = dq_in_2r & ~dq_in_3r ; //上升沿检测
//dp_0_cnt为对低电平计数,代码显示未出现下降沿清零,这里很不和逻辑。按理说新出现的电平是高电平,计数应该清零,根据以上定义,对应的2r为
高电平,3r为低电平,应该是对dp_pos进行判断而不是dp_neg
if (main_state == DIG_MODE) begin
if (dq_neg) begin
dq_0_cnt <= 12'h000 ;
end
else if (!dq_in_3r) begin
if (dq_0_cnt < RST_NUM) begin
dq_0_cnt <= dq_0_cnt + 12'h001 ;
end
end
end
else begin
dq_0_cnt <= 12'h000 ;
end
//以下代码为先对高电平进行计数,直至出现低电平时进入下一状态,根据边沿检测定义,对应的2r为低电平,3r为高电平,应该是对dp_pos进行判断。
代码也是按这样推断进行的。
PRESENCE_H : begin//只能由待机状态进入PRE_H状态
if (dq_neg) begin
if (dq_1_cnt >= PRE_H_NUM ) begin
bus_state <= PRESENCE_L;
end
else begin
bus_state <= IDLE ;
end
end
end
以上代码都是出自一个veriliog文件
综上:怀疑这里的边沿检测出现了矛盾,有大佬可以解释一下吗,万分感谢!!!