组合逻辑电路与时序逻辑电路

博客介绍了组合逻辑电路和时序逻辑电路的概念、实现方法、结构特点及分类。还阐述了Verilog中always和assign语句的使用,包括并行与顺序执行、阻塞与非阻塞赋值等,提醒设计组合逻辑时注意避免生成锁存器。

博主福利:100G+电子设计学习资源包!

http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect
--------------------------------------------------------------------------------------------------------------------------

 

组合逻辑电路:输出只是当前输入逻辑电平的函数(有延时),与电路的原始状态无关的逻辑电路。当输入信号中的任意一个发生改变时,输出都有可能变化,但与目前所处的状态没有任何关系(即逻辑电路无记忆部件)。

时序逻辑电路:输出不只是当前输入的逻辑电平的函数,还与目前电路所处的状态有关的逻辑电路(即逻辑电路有记忆部件)。

 

组合逻辑电路实现方法:

  1. 组合逻辑语句可以用 assign 语句实现

          assign c=a+b; //加法器

          assign c= ena ? a : b; //数据选择器

      2. 复杂的组合逻辑最好用 always 块实现:

由于在 always 块中可以使用 if、 case 等语句,所以对于复杂的组合逻辑,使用 always语句描述显得层次更加清楚,可读性更强。

 

时序逻辑电路的结构特点:


1)时序逻辑电路通常包含组合电路存储电路两部分,存储电路(触发器)是必不可少的;
2)存储器的输出状态必须反馈到组合电路的输入端,与外部输入信号共同决定组合逻辑电路的输出。

 

时序逻辑电路的分类:


1)按逻辑功能划分有: 计数器、寄存器、移位寄存器、读/写存储器、顺序脉冲发生器等。
2)根据储存电路中触发器的动作特点不同分为: 同步时序电路异步时序电路。 在同步时序电路中,所有触发器状态的变化都是在同一时钟信号操作下同时发生的。在异步时序电路中,触发器状态的变化不是同时发生的。
3)根据输出信号的特点分为: 米利(Mealy)型穆尔(Moore)型。 在米利型电路中,输出信号不仅取决于存储电路的状态,而且还取决于输入变量。在穆尔型电路中,输出信号仅仅取决于存储电路的状态。穆尔型电路只是米利型电路的一种特例。

 

always & assign:  

同一Verilog模块中所有过程块(如initial/always)、连续赋值语句、实例引用语句都是并行的,前后次序没有关系。

只有连续赋值语句(assign)和实例引用语句可以独立于过程块而存在于模块的功能定义部分。

always块内部的语句顺序执行,always块称为过程块,always块中的语句称为顺序语句。

在 always 块中,被赋值的信号都必须定义为 reg 型,这是由时序逻辑电路的特点所决定的。对于 reg 型数据,如果未对它进行赋值,仿真工具会认为它是不定态。为了能正确地观察到仿真结果,在可综合风格的模块中我们通常定义一个复位信号 reset,当 reset 为低电平时,对电路中的寄存器进行复位。

在 always 块中,阻塞赋值可以理解为赋值语句是顺序执行的,而非阻塞赋值可以理解为赋值语句是并发执行的。实际的时序逻辑设计中,一般的情况下非阻塞赋值语句被更多地使用,有时为了在同一周期实现相互关联的操作,也使用了阻塞赋值语句。(注意:在实现组合逻辑的 assign 结构中,无一例外地都必须采用阻塞赋值语句。)

仅使用 assign 结构来实现组合逻辑电路,在设计中会发现很多地方会显得冗长且效率低下。而适当地采用 always 来设计组合逻辑,往往会更具实效。

同一组合逻辑电路分别用 always 块和连续赋值语句 assign 描述时,代码的形式大相径庭,但是在 always 中适当运用 default(在 case 结构中)和 else(在 if…else 结构中),通常可以综合为纯组合逻辑,尽管被赋值的变量一定要定义为 reg 型。不过,如果不使用default 或 else 对缺省项进行说明,则易生成意想不到的锁存器,这一点一定要加以注意。

 

### 组合逻辑电路时序逻辑电路的区别 #### 定义差异 组合逻辑电路的输出仅取决于当前时刻的输入信号,而不受之前状态的影响[^1]。这意味着对于给定的一组输入条件,无论何时施加这些输入,都会得到相同的结果。 相比之下,时序逻辑电路不仅依赖于即时的输入值,还考虑先前的状态变化来决定最终输出。这类电路内部含有存储元件(如触发器),能够记忆过去发生的事件并据此调整行为模式。 #### 功能特性对比 - **无记忆功能 vs 存储能力** - 组合逻辑不具备保存数据的能力;一旦移除激励源即刻丧失所有信息。 - 而时序结构拥有持久性的记录机制,可以在一段时间内保持特定数值不变直至更新命令下达为止。 - **响应速度** - 对于瞬态处理任务而言,由于不需要经历完整的读取-评估周期过程,因此组合型往往表现出更快捷高效的性能特点。 - 反之,涉及到多阶段操作流程或是需等待某些外部因素同步的情况下,则更适合采用具备时间维度考量特性的时序设计思路。 - **应用场景举例** - 在中央处理器(CPU)架构里,算术运算部件(ALU)主要由组合门阵列构成,负责执行诸如加减乘除之类的实时计算工作。 - 同样是在CPU中,控制单元部分会运用到大量基于时钟脉冲驱动下的寄存器文件以及指令缓冲区等组件,它们共同协作完成程序流管理职责。 ```python # Python伪代码展示两种类型的简化模型区别 def combinatorial_logic(input_signals): """模拟简单的组合逻辑函数""" output = some_function_of_inputs(input_signals) return output class SequentialLogic: def __init__(self, initial_state=0): self.state = initial_state def process(self, input_signal, clock_pulse): """根据时钟沿改变状态,并返回新输出""" if clock_pulse == 'rising_edge': next_state = update_rule_based_on_input_and_current_state(self.state, input_signal) self.state = next_state return compute_output_from_new_state(next_state) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电子开发圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值