搜索
bottom↓
回复: 8

被verilog 的信号敏感表弄有些糊涂了

[复制链接]

出0入0汤圆

发表于 2010-7-26 15:24:08 | 显示全部楼层 |阅读模式
在下最近才开始接触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也来几个脉冲,究竟输出是变还是不变?

相信很多电工都能帮我解决上述疑问,多谢了!!!!!

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-7-26 15:42:28 | 显示全部楼层
满足(posedge clk or negedge clr) 才会执行always下的内容,你可以理解一下

出0入0汤圆

发表于 2010-7-26 16:04:43 | 显示全部楼层
如果clr一直保持高电平,而clk也来几个脉冲,究竟输出是变还是不变?
-----------------------------------------------------------------
q<=0;

出0入0汤圆

 楼主| 发表于 2010-7-26 16:08:26 | 显示全部楼层
to zj_llh:

   多谢回复。我的疑问是,如果是组合逻辑电路,输入是电平敏感的,信号敏感表一般会写成always @(a,b,...);的形式。

   而在同步电路中,复位信号也是电平敏感,而不是边沿敏感的,却为什么要写成边沿敏感的形式。

出0入0汤圆

发表于 2010-7-26 19:03:25 | 显示全部楼层
always @(posedge clk or negedge clr)
begin  
if(!clr) q<=0;
else q<=d;
end
endmodule

这个是clk上升沿和clr下降沿都触发这个语句,就是说不管时钟怎么样,只要检测到clr的下降沿,并且clr==0,D触发器清零。
如果变成always @(posedge clk or clr) 时钟上升沿和clr触发,当clr变化的时候不管时钟怎么样,都执行always,如果这样的话,当clr开始是0变到1的时候,就是Q<=D;CLR的变化引起了不想要的输出,这应该是自己不希望的看到的结果吧。

出0入0汤圆

发表于 2010-8-2 16:42:04 | 显示全部楼层
回复【3楼】flipchip  
to zj_llh:
   多谢回复。我的疑问是,如果是组合逻辑电路,输入是电平敏感的,信号敏感表一般会写成always @(a,b,...);的形式。

   而在同步电路中,复位信号也是电平敏感,而不是边沿敏感的,却为什么要写成边沿敏感的形式。
-----------------------------------------------------------------------

你应该首先理解什么是同步电路,什么是异步电路,所谓同步电路是与一个时钟联系在一起的,当然时钟可能不止一个,这还存在跨时钟域的问题,更加复杂。
always @(a,b,...)这种形式是异步电路,时序约束不严的话很容易出现毛刺,而同步电路可以解决这个问题,建议楼主先理解同步与异步的区别。

出0入0汤圆

发表于 2010-8-2 17:27:28 | 显示全部楼层
回复【5楼】simplorer
-----------------------------------------------------------------------

就是就是.边沿触发的就是同步的,电平触发的就是异步的,我是这么理解的.
另外,你说报错的原因是:不支持同时电平触发和边沿触发.

出0入0汤圆

发表于 2010-8-2 22:35:34 | 显示全部楼层
呵呵,一个很经典的问题,学习了

出0入0汤圆

发表于 2010-8-3 17:55:23 | 显示全部楼层
这是异步复位电路的写法啊,如果是同步复位,就是:

always @(posedge clk)
begin  
if(!clr) q<=0;
else q<=d;
end
endmodule
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 17:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表