|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
在下最近才开始接触verilog,边工作边学习,看书的时候还觉得比较好理解,可是一动手写代码,推敲起来就发现有些地方比较难理解了。比如,最近就被一个简单的带异步清零的D触发器的代码弄糊涂了。参考书上是这么写的:
module dff(clk,d,clr,q)
input clk,d,clr;
output q;
reg q;
always @(posedge clk or negedge clr)
begin
if(!clr) q<=0;
else q<=d;
end
endmodule
注意看其信号敏感表,clk是上升沿触发,这个好理解。可是clr也是上升沿触发就不好理解了。按照我们的理解,异步复位信号应该是电平敏感的,而不是上升沿敏感的。我曾经尝试着把信号敏感表写成 always @(posedge clk or clr)进行综合,可是报错。 现在真有点糊涂了,上面的写法,其本意很明白clr应该是对电平敏感的异步复位信号,即如果clr一直保持低电平,那么q会一直保持0输出。可是按照字面的意思,clr又好象是边沿触发的。
我就有些好奇了,上述代码综合后,应用到芯片中去,如果clr一直保持低电平,而clk也来几个脉冲,究竟输出是变还是不变?
相信很多电工都能帮我解决上述疑问,多谢了!!!!! |
|