时序电路例题

【例1】D触发器

钟控D触发器

module DFF(CP, D, Q); 
input CP, D; 
output reg Q; 
always @( *) 
if (CP) 
Q<=D; //特征方程 Qn+1=D 
endmodule

边沿D触发器(异步复位置位)

在这里插入图片描述
总结:

  1. 带尖角的表示边沿触发而非钟控触发
  2. 带圈的一般表示取反,钟控则表示低电平有效,边沿则表示下降沿
module DFF (CP, Rd, Sd, D, Q); 
input CP, Rd, Sd, D; 
output reg Q; 
always @ (posedge CP or negedge Rd or negedge Sd) 
if (!Rd) //低电平有效
Q <= 1'd0; //清零
else if (!Sd) //低电平有效
Q <= 1'd1; //置位
else 
Q <= D; 
endmodule

边沿D触发器(同步复位置位)

module DFF (CP, Rd, Sd, D, Q); 
input CP, Rd, Sd, D; 
output reg Q; 
always @ (posedge CP) 
Q <= !Rd? 0 : (!Sd? 1: D)。
endmodule

【例2】二分频电路

电路有一个输入时钟和一个输出时钟,输出时钟的周期是输入时钟的二倍。采用D触发器进行电路设计并给出HDL代码

在这里插入图片描述
在这里插入图片描述

module FDiv2 (NRST, CP, F); 
input CP, NRST; 
output reg F; 
always @ (posedge CP or negedge NRST) 
F <= !NRST? 0 : ~F; 
endmodule

【例3】二分频电路

两个带异步清零和置位端的上升沿D触发器构成图4-13所示的电路,试画出波形图,说明功能,并给出Verilog描述在这里插入图片描述

不用理解功能,可以直接描述D触发器和门级逻辑实现。

module PulseGen();
input X,Y,NRST;
output F,Q;

assign rst=NRST & F;

DFF dff1(X,rst,1,1,F);
DFF dff2(Y,Q1,1,1,Q);
endmodule

module DFF (CP, Rd, Sd, D, Q); 
input CP, Rd, Sd, D; 
output reg Q; 
	always @ (posedge CP or negedge Rd or negedge Sd) 
	if (!Rd) //低电平有效
	Q <= 1'd0; //清零
	else if (!Sd) //低电平有效
	Q <= 1'd1; //置位
	else 
	Q <= D; 
endmodule

PPT的描述方法

module PulseGen (NRST, X, Y, F); 
input NRST, X, Y; 
output reg F; 
reg rd0; 
	always @ (posedge X or negedge NRST or negedge
	rd0) 
	if (!NRST | !rd0) 
	F <= 0; 
	else 
	F <= 1; 
	always @ (posedge Y or negedge F) 
	if (!F) 
	rd0 <= 1; 
	else 
	rd0 <= 0; 
endmodule

X的上升沿会控制F上升,Y的上升沿可以控制F下降,从此达到输出一定形式的脉冲的功能
在这里插入图片描述

【例4】寄存器

采用多个D触发器保存一组二进制信息的电路称为寄存器,也称为数据寄存器

在这里插入图片描述
高电平触发

module Reg4hl(CP,D,Q);
	input CP;
	input [3:0]D;
	output reg[3:0]Q;
	always@(*)
	 if(CP)
	 Q<=D;
 endmodule

上升沿触发

module Reg4hl(CP,D,Q);
	input CP;
	input [3:0]D;
	output reg[3:0]Q;
	always@(posegde CP)
	 Q<=D;
 endmodule

移位寄存器:若干个D触发器级联构成的D触发器组称为移位寄存器。数据从S输入,每个时钟节拍接收一位保存在D触发器内。

在这里插入图片描述
m位移位寄存器

module ShiftRegm (CP, S, Q);
input CP, S;
output reg [m-1:0] Q;
always @ (posedge CP)
Q <= {Q[m-2:0], S};
endmodule

串行输入端Ri的值通过1个时钟后从Q3端输出,2个时钟后从Q2端输出,3
个时钟后从Q1端输出,4个时钟后从Q0端输出。因此,移位寄存器实质就是延时器,常用于数字信号处理的电路中。

在这里插入图片描述

可预置移位寄存器:若将D触发器的数据输入端通过2-1 MUX来连接前级触发器的状态和并行输入,则构成可预置移位寄存器。

在这里插入图片描述

module PLSReg4 (CP, Ri, LD, D, Q);
input CP, Ri, LD;
input [3:0] D;
output reg [3:0] Q;
always @ (posedge CP)
Q <= LD ? D : {Ri, Q[3:1]}
endmodule

【例5】跑马灯(同步时序电路的分析)

有三个LED控制电路图如图所示,分析该同步时序电路的逻辑功能

在这里插入图片描述
在这里插入图片描述
同步时序电路的分析步骤
同步时序电路的分析
①激励方程
D 2 = Q 1 D_2=Q_1 D2=Q1 D 1 = Q 0 D_1=Q_0 D1=Q0 D 0 = Q 1 Q 0 ‾ D_0=\overline{Q_1Q_0} D0=Q1Q0
②状态方程
Q 2 n + 1 = Q 1 Q_2^{n+1}=Q_1 Q2n+1=Q1 Q 1 n + 1 = Q 0 Q_1^{n+1}=Q_0 Q1n+1=Q0 Q 0 n + 1 = Q 1 Q 0 ‾ Q_0^{n+1}=\overline{Q_1Q_0} Q0n+1=Q1Q0
③列出状态转移表
在这里插入图片描述

④列出状态转移图
⑤画波形图

在这里插入图片描述
⑥功能分析
三个LED轮流发光,发光周期为3T,这种轮流点亮的灯也称为跑马灯。
• 脉冲分配器。
• 具有自启动能力。

【例6】腕表显示器

腕表显示器可以显示四项中的一项:时间、闹钟、秒表或日期,由两个信号s1和s0控制(00显示时间,01显示闹钟,10显示秒表,11显示日期——假设s1s0控制一个通过适当寄存器的n位mux)。按下按钮B(将B设置为1)将显示顺序排列的下一项。例如,当前显示的项是日期,下一项是当前时间。为FSM创建一个状态图,描述这种排序行为,其中有一个输入位B,两个输出位s1和s0。确保每次按下按钮时只按一项向前排序,而不管按钮按了多长时间——换句话说,确保在按下一项向前排序后等待按钮释放。为每个状态使用简短但具有描述性的名称。使显示时间为初始状态。

在这里插入图片描述

【例7】描述状态转移图

某逻辑电路的状态转移如图,试采用D触发器和HDL等两种方式描述电路

在这里插入图片描述
HDL语言描述相对简单,采用always块和case语句交代清楚状态转移和自启动即可

module T4_5_3(CP, Q);
input CP;
output reg [2:0] Q;
always @(posedge CP)
case(Q)
3'b000: Q<=3'b001;
3'b001: Q<=3'b011;
3'b011: Q<=3'b101;
3'b101: Q<=3'b110;
default: Q<=3'b000; //无关项强制转移到0000
endcase
endmodule

D触发器描述
①列出状态表
在这里插入图片描述
右表在左表的基础上交代了自启动

②列状态方程
在这里插入图片描述

③列激励方程,并画出逻辑电路
在这里插入图片描述
在这里插入图片描述

【例8】计数器

计数器主要功能是累计输入脉冲的个数。它是一个周期性的时序电路,其中含有一个闭合环。闭合环循环一次所需要的时钟个数M称为模。

在这里插入图片描述

模M加法计数器:采用n个触发器,计数状态Q值从0加至M-1,计到M-1时,进位标志输出Z为1

在这里插入图片描述

module CntIM (CLK, Q, Z);
parameter M= ,n= ;//模M,二进制位数n
input CLK;
output Z;
output reg [n-1:0] Q;
assign Z = Q == M – 1;
always @ (posedge CLK)
Q <= Z? n'd0 : Q + n'd1;
endmodule

模M减法计数器采用n个触发器,计数状态Q值从M-1减至0,计到0时,借位标志输出Z为1。

在这里插入图片描述

【应用】设计一个模12的加法计数器,计至最后一个数时产生高电平,其它数时为低电平。给出该计数器的HDL代码及仿真波形

assign Z = Q == 4'd11;
always @ (posedge CLK)
Q <= Z? 4'd0 : Q + 4'd1;

在这里插入图片描述
在这里插入图片描述

【例9】74LS161(MSI器件构建)

常用中规模集成电路(MSI)
常用器件74LS161是模24(四位二进制)同步计数器
– 具有计数、保持、同步置数、异步清零等功能

异步清零法:当状态值为 M 时产生清零信号,使状态值变为 0

在这里插入图片描述

同步置数法:可以采用进位置数和比较置数两种方式

①比较置零法

在这里插入图片描述

②进位置数法

在这里插入图片描述

【例10】分频器

输入频率为 FHz 的时钟脉冲, M 分频后输出频率为F/MHz 的时钟脉冲。分频器采用计数器来实现分频。

在这里插入图片描述

设计占空比为 2:1 的六分频器,分频器共有 6 个状态,即 0~5。占空比为 2:1,即4个状态输出高电平,2 个状态输出低电平

always @ (posedge CP) 
Q <= (Q < 3’d5)? Q+1 : 3'd0; //计数器
assign Z =(Q <= 3'd3);//波形输出

在这里插入图片描述

【例11】序列发生器

序列信号发生器是重复产生一定长度的循环序列的电路,输出序列由 n 位二进制码重复构 成,n 为序列长度。

在这里插入图片描述

设计产生 1101000101 序列码的计数型序列信号发生器,给出 HDL 代码

module T4_7_2 (CP, Z);
input CP;
output reg Z;
reg [3:0] S;
always @ (posedge CP)//计数器
S <= S < 4'd9? S + 4'd1 : 0;
always @ (S)//波形输出
case (S)
4'd0, 4'd1, 4'd3, 4'd7, 4'd9: Z <= 1;
default: Z <= 0;
endcase
endmodule

设计一个能同时产生两组序列码的双序列码产生器,要求两组代码分别是:Z1=1101,Z2=01011,给出逻辑电路的HDL代码。采用统一的计数器来同时产生这两个序列,计数器模值取两者长度的最小公倍数M=20,状态值从0~19

在这里插入图片描述

module T4_7_3 (CP, Z1, Z2);
input CP;
output reg Z1, Z2;
reg [4:0] S;
always @ (posedge CP)//计数器部分常规
S <= S < 5'd19? S +5'd1 : 5'd0;
always @ (S)//有变化的是波形的输出要把Z1和Z2都交代清楚
case(S)
5'd6, 5'd14, 5'd18: {Z1, Z2} <= 2'b01;
5'd2, 5'd10: {Z1, Z2} <= 2'b00;
5'd0, 5'd5, 5'd7, 5'd12, 5'd15, 5'd17: {Z1, 
Z2} <= 2'b10;
default: {Z1, Z2} <= 2'b11;
endcase
endmodule

【例12】序列检测器

序列检测器是指对输入的序列信号进行检测,当电路输入序列与指定序列一致时,检测器输出有效;否则,检测器输出无效。

序列检测器的实现方法主要有两类

  • (1)根据序列检测的要求建立状态图,在规定的状态时输出检测结果
  • (2)将需要检测的序列信号送入移位寄存器,再用组合电路进行判断。该方
    法设计电路结构简单,易于调试,因此应用广泛。
    在这里插入图片描述

设计一个序列检测器,该检测器有一串行输入X、一个输出Z,当检测到0100111时,输出为1。

①状态机实现
在这里插入图片描述

module SeqDect (CP, X, Z);
input CP, X;
output Z;
reg [2:0] S;
assign Z = (S == 3'd7);
always @ (posedge CP)
case(S)
3'd0: S = X? 3'd0: 3'd1;
3'd1: S = X? 3'd2: 3'd1;
3'd2: S = X? 3'd0: 3'd3;
3'd3: S = X? 3'd2: 3'd4;
3'd4: S = X? 3'd5: 3'd1;
3'd5: S = X? 3'd6: 3'd3;
3'd6: S = X? 3'd7: 3'd1;
3'd7: S = X? 3'd0: 3'd1;
endcase
endmodule

②移位寄存器实现
将待检测数据与题目中给定的序列“0100111”比较,如果相
同,则输出Z为1;否则,输出Z为0。

module SeqDect (CP, X, Z);
	input CP, X;
	output Z;
	reg [6:0] Q;
	assign Z = (Q[6:0] == 7'b0100111);
	always @(posedge CP)
	Q <= {Q[5:0], X};
endmodule
  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

绿茶冰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值