微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 这两种Verilog写法有什么区别吗?不明白!

这两种Verilog写法有什么区别吗?不明白!

时间:10-02 整理:3721RD 点击:
写法1:边沿触发
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,前者只在边沿,瞬间;但后者是一段时间,持续驱动。另外一个时序电路,一个组合电路

组合逻辑和时序逻辑的区别

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top