组合,时序逻辑

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

组合逻辑电路:是指数字电路在任何时刻的输出仅仅取决与该时刻数字电路输入,而与电路原来的状态无关。


时序逻辑电路:是指数字电路在任何时刻的输出不仅取决与当时的输入信号,而且还取决于电路原来的状态,或者说和以前的输入有关。

上面的话很好记,反映到实际情况中查了好些资料才算理解。

对于从事FPGA工作的,区分组合逻辑电路与时序逻辑电路需要从”硬件电路“和”verilog语言“两方面来区分。

从硬件电路上来说:
两者的区别在于逻辑电路是否包含“记忆性单元”:
组合逻辑电路不包含记忆性单元,时序逻辑电路包含记忆性单元。

译码器、加法器由非记忆性单元构成,故属于组合逻辑电路。

寄存器、计数器由记忆性单元构成,故属于时序逻辑电路。

组合逻辑单元的另一个特点是: 1 输入、输出之间没有反馈延迟通道
从verilog语法上大家只要记住下面4个组合逻辑电路的要点,与之相反的就是时序逻辑电路:(可以只看要点)
要点1:用alway描写组合逻辑电路,敏感事件列表中,不要使用边缘敏感事件。

要点2:为变量赋值使用阻塞赋值(=),不要使用非阻塞赋值(<=0)。

要点3:用always 块时,必须注意电平敏感信号表是否完全,
如:always @ (a or b or c or d)
begin q=(a&b&c) | (d&e);
end
此时生成的不是组合逻辑,因为当e变化时,q不能立即跟着变化。

只有当a/b/c/d发生变化时e的影响变化结果才会显示出来,可见综合成的电路需要一个寄存器来存储e的变化。

要点4:用always 块时,不要忘了加else语句:
如:always @ (a or b)
begin if(c) q=a;
end
或:always @ (a or b)
begin if(c) q=a;
else;
end
上面两种形式生成的都不是纯组合逻辑电路,因为当c==0时,q能保留原来的值,所以生成的电路中有锁相环(组合逻辑单元的另一个特点是: 1 输入、输出之间没有反馈延
迟通道)。

如果将上面两个函数改成这样就是组合逻辑电路了:
always @ (a or b)
begin if(c) q=a;
else q=b;
end
或者这样也行:
always @ (a or b)
begin if(c) q=a;
else q=0;
end
补充:
1 组合逻辑电路跟时序逻辑电路重点停留在:”电路“两个字上,verilog只是语言,不是生成的电路。

2 verilog中是否出现reg型变量跟是否是组合和时序逻辑电路无关,因为reg型变量综合出来,不一定就是寄存器。

(如果综合出来有寄存器,则一定是时序逻辑电路)
3 always 既能描述组合逻辑电路,也能描述时序逻辑电路,always 块内被赋值的变量必须是reg型变量。

4 assign 描述的都是组合逻辑电路,assign只能对wire型变量赋值。

请指点!!。

相关文档
最新文档