目录

  • 1 项目1 Multisim 软件平台
    • 1.1 任务1.1 Multisim文件的基本操作
      • 1.1.1 新建课程目录
    • 1.2 任务1.2 Multisim图纸的设置及导出操作
    • 1.3 任务1.3 Multisim快捷键的使用
    • 1.4 课后作业
  • 2 项目2 创建仿真电路
    • 2.1 任务2.1 创建基本电路
    • 2.2 任务2.2 创建总线电路
    • 2.3 任务2.3 创建子电路
    • 2.4 任务2.4 仿真元件设计
    • 2.5 课后作业
  • 3 项目3 Multisim虚拟仪器的使用
    • 3.1 任务3.1 常用指示器件的使用
    • 3.2 任务3.2 模拟时域仪器的使用
    • 3.3 任务3.3 频域仪器的使用
    • 3.4 任务3.4 数据域仪器的使用
    • 3.5 任务3.5 数字电路设计仪器的使用
    • 3.6 课后作业
  • 4 常用仿真分析
    • 4.1 任务4.1 放大电路直流工作点分析
    • 4.2 任务4.2 放大电路的动态分析
    • 4.3 任务4.3 傅里叶分析
    • 4.4 任务4.4 批处理分析
    • 4.5 任务4.5 后处理器
    • 4.6 任务4.6 元件列表清单
    • 4.7 任务4.7 仿真电路信息的输入/输出方式
    • 4.8 OTL功放电路的设计与仿真分析
    • 4.9 脉宽调制电路的设计与仿真分析
    • 4.10 课后作业
  • 5 项目5 Quartus II软件基本操作
    • 5.1 任务5.1 四位串行加法器设计
    • 5.2 任务5.2 流水灯电路设计
    • 5.3 任务5.3 嵌入式逻辑分析仪SignalTap II使用
    • 5.4 振动监测报警电路的设计与仿真分析
    • 5.5 红外人体探测电路的设计与仿真分析
    • 5.6 课后作业
  • 6 项目6 用硬件描述语言设计可编程逻辑器件
    • 6.1 任务6.1 介绍可编程逻辑器件
    • 6.2 任务6.2 硬件描述语言语法结构
    • 6.3 课后作业
  • 7 项目7 常用电路的硬件描述语言设计
    • 7.1 任务7.1 常用组合逻辑电路的设计
    • 7.2 任务7.2 常用时序逻辑电路设计
    • 7.3 课后作业
  • 8 项目8 硬件描述语言的设计应用
    • 8.1 任务8.1 基本应用
    • 8.2 任务8.2 综合设计应用
任务7.2 常用时序逻辑电路设计

任务7.2 常用时序逻辑电路的设计

7.2.1触发器的设计

【提示】触发器(FlipFlop)是一种可以存储电路状态的存储单元,在实际的数字系统中而且经常要求存储单元在同一时刻同步动作,为达到这个目的,在每个存储单元电路上引入一个时钟脉冲(CLK)作为控制信号,只有当CLK到来时电路才被“触发”而动作,并根据输入信号改变输出状态。我们把这种在时钟信号触发时才能动作的存储单元电路称为触发器。

典型触发器包括RS触发器、D触发器、JK触发器、T触发器,典型数字电路芯片有7474(D触发器)、7473(JK触发器)、7476(JK触发器)等

触发器可增加使能功能、异步置/复位功能和同步置/复位功能,这些功能都可利用VHDL语言实现。

任务:设计一个一位D触发器。

简单D触发器的电路框图如图7-14所示。根据电路框图,端口定义为:

根据端口定义,实体可描述为:

LIBRARYIEEE;USE IEEE.STD_LOGIC_1164.ALL;

ENTITYdff1 IS

PORT(d:INSTD_LOGIC;clk:INSTD_LOGIC;

q:OUTSTD_LOGIC);END dff1;

根据D触发器的作用,在时钟clk有效时,将输入信号d赋值到输出信号q,采用行为描述方式,结构体可表示为:

ARCHITECTUREbehavOF dff1 IS

BEGIN

PROCESS(a)

IF(时钟有效)THEN

y<=a;ENDIF;END PROCESS;END beahv;

时钟触发方式有电平触发和边沿触发两种。电平触发可表示为:

IFclk=‘1’THEN     ——高电平触发

IFclk=‘0’THEN     ——低电平触发

IF(clk’STABLEAND clk=‘1’)THEN     ——高电平触发

IF(clk’STABLEAND clk=‘0’)THEN     ——低电平触发

其中STABLE为信号属性,当信号没有发生变化时,STABLE属性的值为真(true);当信号在采样时间内发生了变化时,STABLE属性的值为假(false)。

边沿触发可表示为:

IF(clk’EVENTAND clk=‘1’)THEN       ——上升沿触发

IF(NOT clk’STABLEAND clk=‘1’)THEN   ——上升沿触发

IF(clk’EVENTAND clk=‘0’)THEN       ——下降沿触发

IF(NOT clk’STABLEAND clk=‘0’)THEN   ——下降沿触发

其中EVENT为信号属性,当信号在采样时间内发生变化时,EVENT属性的值为真(true);当信号在采样时间内没有发生变化时,EVENT属性的值为假(false),与STABLE相反。clkEVENT相当于NOTclkSTABLE

边沿触发还可采用LAST_VALUE属性进行描述:

IFclk=‘1’AND clk’LAST_VALUE=‘0’THEN    ——上升沿触发

IFclk=‘0’AND clk’LAST_VALUE=‘1’THEN    ——下降沿触发

LAST_VALUE属性为信号跳变前的值。

边沿触发还可利用函数进行判断:

IFRISING_EDGE(clk)THEN              ——上升沿触发

IFFALLING_EDGE(clk)THEN             ——下降沿触发

可用rising_edge()函数检测信号是否有上升沿变化,若有则条件为真。falling_edge()函数检测信号是否有下降沿变化,若有则条件为真。只有标准逻辑类型的信号(STD_LOGIC)可使用边沿检测函数。

【例7-13】

LIBRARYIEEE;USE IEEE.STD_LOGIC_1164.ALL;

ENTITYdff1 IS

PORT(d:INSTD_LOGIC;clk:INSTD_LOGIC;

q:OUTSTD_LOGIC);END dff1;

ARCHITECTUREbehavOF dff1 IS

BEGIN

PROCESS(clk,d)

BEGIN

IF(clk’EVENTAND clk=‘1’)THEN

q<=d;ENDIF;END PROCESS;END behav;

触发器可加上复位信号、置位信号和使能信号,其中复位、置位可分为同步方式和异步方式。同步方指是指在置/复位和时钟信号同时有效时,时序电路才被置/复位;异步方式是指当置/复位有效时,时序电路立即被置位或复位,与时钟信号无关。

复位信号为rst,在D触发器上添加异步复位方式,可表示为:

IFrst=‘1’THEN

q<=‘0’;

ELSIF(clk’EVENTAND clk=‘1’)THEN

q<=d;ENDIF;

置位信号为set,在D触发器上添加同步置位方式,可表示为:

IF(clk’EVENTAND clk=‘1’)’THEN

IFset=‘1’ THEN

q<=‘1’;

ENDIF;

ELSE

q<=d;

ENDIF;

【例7-14】

LIBRARYIEEE;USE.IEEE.STD_LOGIC_1164.ALL;

ENTITYdff2 IS

PORT(d:INSTD_LOGIC;rst,set:INSTD_LOGIC;

en:INSTD_LOGIC;clk:INSTD_LOGIC;

q:OUTSTD_LOGIC);END dff2;

ARCHITECTUREbehavOF dff2 IS

BEGIN

PROCESS(clk,d, en,rst,set)

BEGIN

IFen=‘1’THEN

IFrst=‘1’THEN

q<=‘0’;

ELSIFset=‘1’ THEN

q<=‘1’;

ELSE

IF(clk’EVENTAND clk=‘1’)THEN

q<=d;

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;END behav;


7.2.2计数器的设计

【提示】计数器是常用的数字电路元件,基本功能是对输入的时钟脉冲进行计数。常用的计数器芯片有74161(同步二进制计数器)、74160(同步十进制计数器)、74192(十进制可逆计数器)、74LS90(异步计数器)等。

任务1.设计一个8位二进制加法计数器。电路框图如图7-15所示

在电路框图中,端口定义为:

因此实体可表述为:

LIBRARYIEEE;USE IEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYcounter8 IS

PORT(cp:IN STD_LOGIC;

 q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

ENDcounter8;

采用行为描述方式,结构体可表述为:

ARCHITECUREbehavOF counter8 IS

BEGIN

PROCESS(clk)

VARIABLEq1: STD_LOGIC_VECTOR(7 DOWNTO 0);

BEGIN

IF(cp’EVENTAND cp=‘1’)THEN

q1:=q1+1;

ENDIF;

ENDPROCESS;

ENDbehav;  

【例7-15】

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYcounter8 IS

PORT(cp:IN STD_LOGIC;

q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

ENDcounter8;

ARCHITECTUREbehavOF counter8 IS

BEGIN

PROCESS(cp)

VARIABLEq1: STD_LOGIC_VECTOR(7 DOWNTO 0);

BEGIN

IF(cp’EVENTAND cp=‘1’)THEN

q1:=q1+1;

ENDIF;

q<=q1;

ENDPROCES;

ENDbehav;

任务2.设计一个二十进制计数器

设计一个二十进制计数器,计数器具有使能、异步置/复位、进位输出功能。

【例7-16】

LIBRARYIEEE;USE IEEE.STD_LOGIC_1164.ALL;

ENTITYcounter20 IS

PORT(cp:IN STD_LOGIC;

 en:IN STD_LOGIC;                  ——使能端

set,reset:IN STD_LOGIC;             ——置位/复位端

datain:IN INTEGER RANGE 0 TO 19;  ——置位初值输入

co:OUT STD_LOGIC;                ——进位输出

q:BUFFER INTEGER RANGE 0 TO 19);  ENDcounter20;

ARCHITECTUREbehavOF counter20 IS

BEGIN

PROCESS(cp)

BEGIN

IFen=‘1’THEN

Ifreset=‘1’ THEN

q<=0;

ELSIFset=‘1’ THEN

q<=datain;

ELSE

IF(cp’EVENTAND cp=‘1’)THEN

IFq<19 THEN

q<=q+1;

co<=‘0’;

ELSE

q<=0;

co<=‘1’;

ENDIF;

ENDIF;

ENDIF;

ENDIF;END PROCESS;END behav;