同步时序电路的分析和设计是数字逻辑设计中的核心内容,其特点是所有触发器的状态变化都由统一的时钟信号控制。以下是详细的分析与设计方法:
一、同步时序电路的分析方法
-
确定电路结构
- 观察电路图,识别组合逻辑部分和存储元件(如D触发器、JK触发器等)。
- 确定输入变量、输出变量、触发器输出(状态变量)。
-
写出驱动方程(激励方程)
- 根据组合逻辑电路,写出每个触发器输入端的逻辑表达式(如 D = f(Q, X))。
-
写出状态方程
- 利用触发器的特性方程,将驱动方程代入,得到下一状态 Q⁺ 的表达式。
例如:对于 D 触发器,Q⁺ = D。
- 利用触发器的特性方程,将驱动方程代入,得到下一状态 Q⁺ 的表达式。
-
写出输出方程
- 写出电路输出 Z 关于当前状态和输入的函数:Z = g(Q, X)。
-
列出状态转换表
- 枚举所有可能的现态(当前状态)和输入组合,计算对应的次态和输出。
-
画出状态图或时序图
- 状态图:用圆圈表示状态,箭头表示状态转移,并标注输入/输出。
- 时序图:展示在时钟作用下各信号随时间的变化。
-
功能说明
- 根据状态图分析电路的功能,如计数器、序列检测器等。
二、同步时序电路的设计方法
-
明确设计要求
- 给出电路的功能描述,如“设计一个模4计数器”或“检测输入序列110”。
-
建立原始状态图或状态表
- 根据功能需求绘制状态图,定义各个状态及其转移关系。
-
状态化简(最小化)
- 合并等价状态,减少状态数量,从而简化电路。
-
状态分配(编码)
- 将抽象状态用二进制码表示。若有 n 个状态,需 ⌈log₂n⌉ 个触发器。
-
选择触发器类型
- 常用 D、JK 触发器。D 触发器最常用,因特性方程简单(Q⁺ = D)。
-
求驱动方程和输出方程
- 由状态表得出每个触发器所需的输入值,利用卡诺图进行化简,得到最简驱动方程和输出方程。
-
画出逻辑电路图
- 根据方程连接组合逻辑电路和触发器,添加时钟信号。
-
验证电路功能
- 通过仿真或手动推演检查是否满足设计要求。
示例:设计一个模3计数器(0→1→2→0…)
- 状态:S₀(00), S₁(01), S₂(10)(使用两个 D 触发器)
- 驱动方程经化简后:
- D₁ = Q₁’·Q₀ + Q₁·Q₀’
- D₀ = Q₁’·Q₀’ + Q₁·Q₀ (或直接 D₀ = Q₁ ⊕ Q₀)
- 输出可取高位或自定义。
// Verilog 示例:模3同步计数器
module mod3_counter (
input clk, reset,
output reg [1:0] q
);
always @(posedge clk or posedge reset) begin
if (reset)
q <= 2'b00;
else case(q)
2'b00: q <= 2'b01;
2'b01: q <= 2'b10;
2'b10: q <= 2'b00;
default: q <= 2'b00;
endcase
end
endmodule
使用卡诺图化简触发器的驱动方程是同步时序电路设计中的关键步骤,目的是将复杂的逻辑表达式简化为最简与或形式,从而减少硬件成本。以下是详细步骤:
一、前提准备
-
完成状态分配
- 确定每个状态的二进制编码(如 S₀=00, S₁=01, S₂=10)。
-
列出状态转换表
- 包含:现态(Qₙ)、输入(X)、次态(Qₙ₊₁)、输出(Z),以及各触发器的激励输入(如 D₀, D₁ 或 J,K 等)。
-
确定触发器类型
- 常用 D 触发器(Q⁺ = D),JK 触发器(Q⁺ = J·Q’ + K’·Q)等。
二、以 D 触发器为例:求驱动方程
假设使用两个 D 触发器 Q₁Q₀ 表示状态,设计模3计数器:
| 现态 Q₁Q₀ | 次态 Q₁⁺Q₀⁺ | D₁ (Q₁⁺) | D₀ (Q₀⁺) |
|---|---|---|---|
| 00 | 01 | 0 | 1 |
| 01 | 10 | 1 | 0 |
| 10 | 00 | 0 | 0 |
| 11 | ××(无关项) | × | × |
注意:11 是无效状态,可作为无关项(don’t care)处理。
三、构造卡诺图并化简
对 D₁(即 Q₁⁺)建立卡诺图:
| Q₁\Q₀ | 0 | 1 |
|---|---|---|
| 0 | 0 | 1 |
| 1 | × | 0 |
化简得:
D₁ = Q₁’ · Q₀
对 D₀(即 Q₀⁺)建立卡诺图:
| Q₁\Q₀ | 0 | 1 |
|---|---|---|
| 0 | 1 | 0 |
| 1 | × | 0 |
化简得:
D₀ = Q₁’ · Q₀’
可进一步优化为组合逻辑电路实现。
四、若使用 JK 触发器:需查“激励表”
| Q | Q⁺ | J | K |
|---|---|---|---|
| 0 | 0 | 0 | × |
| 0 | 1 | 1 | × |
| 1 | 0 | × | 1 |
| 1 | 1 | × | 0 |
- 根据现态和次态查出每个触发器所需的 J 和 K 值。
- 分别对 J₁, K₁, J₀, K₀ 建立卡诺图并化简。
例如:求 J₁ 的卡诺图(基于 Q₁Q₀)
| Q₁\Q₀ | 0 | 1 |
|---|---|---|
| 0 | 0 | 1 |
| 1 | × | × |
→ J₁ = Q₀
同理求其他变量。
五、总结步骤
- 列出完整状态转换表(含次态)。
- 根据触发器类型确定所需激励值(D 或 J/K)。
- 将激励值作为函数,以现态和输入为变量,填入卡诺图。
- 利用卡诺图合并最小项,注意利用无关项优化。
- 写出最简驱动方程(如 D = f(Q, X) 或 J = …, K = …)。
- 用门电路实现该逻辑。
// 示例:基于化简后的 D 触发器驱动方程
assign D1 = ~Q1 & Q0;
assign D0 = ~Q1 & ~Q0;
always @(posedge clk) begin
Q1 <= D1;
Q0 <= D0;
end


1723

被折叠的 条评论
为什么被折叠?



