这两种Verilog写法有什么区别吗?不明白!
always @(posedage clr or posedge clr)
begin
if(!clr)d = 0;
else d = q;
end
写法2:电平敏感
begin
always @(clr)
if(!clr)d = 0;
else d = q;
end
如果是电平敏感的话,意思就是说只要有电平变化就执行。但是只要有电平变化无非只有从1变到0,或者从0变到1这两种状态啊,这不就是一个下降沿和一个上升沿吗,这和把上升沿和下降沿都写在敏感列表里面有什么区别吗?
我也不太清楚 希望有高手能指導一下...
always @(clr)
if(!clr)d = 0;
else d = q;
end
这是个latch,你分析它的时序就知道了。之前写posedge的那一种是flop。可以找一本数字电子技术的书看看,里面详细介绍了lath和flop之间时序和功能的区别。
注意0到1变化的边沿以及1到0变化的边沿和0电平/1电平是完全不一样的概念。一个是边沿,一个是电平。
“如果是电平敏感的话,意思就是说只要有电平变化就执行”,严格的说,应该这样理解,有电平变化就重新计算always块里的值。这个是典型的组合逻辑的功能描述,对不对。而有时钟边沿触发就重新计算(赋值),那么这个是典型的时序逻辑(D触发器)的功能描述,两者还是不一样的。计算或者说执行的原理还是不一样的。
这种小白级问题没人愿意回答的,赶紧去看基本的数字逻辑基础
小编应该好好复习下数电了
原理不同 啊
呵呵 LATCH是不建议的
路过 学习了
现搞懂这两种代码综合出来的电路有什么不同
建议用DC综合完后自己去看看电路
这样你才会进步
你的code本身就有问题,应该改成:
写法1:边沿触发
always @(posedage clr or negedge clr)
begin
if(!clr) d <= 0;
else d <= q;
end
写法2:电平敏感
always @*
begin
if(!clr) d <= 0;
else if (en) d <= q;
end
好像敏感变量里面,不能同时检测clk的上升沿和下降沿……
是clk,你这个阻塞和非阻塞都没搞清楚
verilog代码看着好亲切
ff和latch,前者只在边沿,瞬间;但后者是一段时间,持续驱动。另外一个时序电路,一个组合电路
组合逻辑和时序逻辑的区别
