第6章时序逻辑电路设计_第1页
第6章时序逻辑电路设计_第2页
第6章时序逻辑电路设计_第3页
第6章时序逻辑电路设计_第4页
第6章时序逻辑电路设计_第5页
已阅读5页,还剩389页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第6 6章章 时序逻辑电路设计时序逻辑电路设计 第第6章章 时序逻辑电路设计时序逻辑电路设计 6.1 基本基本D触发器的设计触发器的设计 6.2 JK触发器触发器 6.3 带异步复位带异步复位/置位端的使能置位端的使能T触发器触发器 6.4 基本计数器的设计基本计数器的设计 6.5 同步清零的计数器同步清零的计数器 6.6 同步清零的可逆计数器同步清零的可逆计数器 6.7 同步预置数的计数器同步预置数的计数器 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 6.8 带进制的计数器带进制的计数器 6.9 基本移位寄存器的设计基本移位寄存器的设计 6.10 同步预置数串行输出移位寄存器同步预置

2、数串行输出移位寄存器 6.11 循环移位寄存器循环移位寄存器 6.12 6位双向移位寄存器位双向移位寄存器 6.13 有限状态机的设计有限状态机的设计 习题习题 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 6.1 基本基本D触发器的设计触发器的设计 时序逻辑电路的输出不但和当前输入有关,还与 系统的原先状态有关,即时序电路的当前输出由输入 变量与电路原先的状态共同决定。为达到这一目的, 时序逻辑电路从某一状态进入下一状态时,必须首先 设法“记住”原先的状态。作为时序逻辑电路的基本 特征,时序逻辑电路应具有“记忆”功能。触发器是 时序电路最常用的记忆元件。本章将首先介绍常用触 发器的设计方

3、法,然后介绍常用的时序电路:计数器、 寄存器、移位寄存器、状态机等。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 任何时序逻辑电路都是以时钟信号为驱动信号的, 时序电路通常在时钟信号的边沿到来时才发生状态变 化。因此,设计时序逻辑电路时,必须要重视时钟信 号。VHDL程序描述时钟有两种基本形式,即将时钟 放入进程的敏感信号表和用WAIT语句描述时钟。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (1) 将时钟放入进程的敏感信号描述。只要将时钟 信号放入进程的敏感信号表,时钟信号就成为了进程 的敏感信号。当时钟有边沿变化时,无论上升沿或下 降沿,都会启动进程执行一遍。不同的时序电路对

4、时 钟边沿的要求可能不同,有的是上升沿启动,有的是 下降沿启动。例如,VHDL程序通常用语句 clk=1 AND clk event 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 来描述这种边沿变化,其中event表示信号发生变 化;clk=1表示变化后clk的电平为“1”,此语句描述 的是上升沿。若要描述下降沿,只要将clk=1改为 clk=0就可以了。如 PROCESS(clk) BEGIN IF clk=0 AND clk event THEN END IF; END PROCESS; 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 此外,程序包STD_LOGIC_1164内定义了

5、边沿检 测函数rising_edge(上升沿检测函数)和fall_edge(下降沿 检测函数),只要打开STD_LOGIC_1164库,这些函数 就可直接调用。如 IF rising_edge(clk) THEN . END IF; 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 当所定义的数据类型为BIT时,用“clk=1 AND clk event”肯定没有问题,因为BIT型数据的取值必然 是“0”与“1”中取其一。而当所定义的数据类型为 STD_LOGIC时,用边沿检测函数则更加合适,因为 STD_LOGIC是一个9值类型,“clk=1 AND clk event” 并不能把该类型数据

6、的所有边沿变化全部表达出来。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (2) 用WAIT语句描述clk的变化,如 WAIT UNTIL clk=1 一个进程内部一旦有了WAIT语句,就不要使用敏 感信号表,反之亦然。WAIT语句或者置于进程的开始, 或者置于进程的最后。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 触发器为具有记忆功能的装置,可储存两种不同 的状态:“0”或“1”;借助输入状态的改变,可改变 储存的状态。但由于系统需要同步变化,故通常在计 时脉冲的上升沿变迁(Positive Transition)时刻才容许储 存数据改变,其他时刻触发器是被“锁住”的。触发 器

7、常被用在计数器、寄存器等器件中。 D触发器是最常用的触发器,其他的时序电路(包 括其他触发器)都可以由D触发器外加一部分组合逻辑 电路转换而来。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (1) 基本D触发器。基本触发器的特征方程为 Q n+1 = D 基本D触发器应具备的脚位: 数据输入端:D; 时钟输入端:clk; 输出端:Q。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (2) 带异步复位/置位端的同步使能D触发器。所谓 异步复位,是指只要复位端有效,不需等时钟的上升 沿到来就立刻使JK触发器清零。而异步置位是指只要 复位端有效,不需等时钟的上升沿到来就立刻使JK触 发置位

8、。若异步复位端与异步置位端同时有效,则输 出为不定状态。 由于实际硬件情况的复杂性,系统刚开始工作时 并不能确保处于所需要的初始状态。这一问题在使用 了异步复位信号或异步置位信号后得到了解决。当异 步复位信号有效时,输出端立刻为“0”;或当异步置 位信号有效时,输出端立刻为“1”。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 带异步复位/置位端的同步使能D触发器具备的脚位: 数据输入端:D; 时钟输入端:clk; 复位信号端:clrn; 置位信号端:prn; 使能输入端:ena; 输出端:Q。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 表6-1是带异步复位/置位功能D触发器真值表

9、,从 表中可以看出,当预置位端prn(或复位端clrn)有效时 (低电平),无论时钟和D端的电平情况怎样,输出都为 高电平(或低电平)。而当二者同为低电平,即预置位端 与复位端同时有效时,输出不定,用“X”表示。当预 置位端prn与复位端clrn均无效时,随着上升沿的到来, 输出逻辑与输入端D逻辑值相同。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 表6-1 异步复位/置位端同步使能D触发器真值表 输 入输 出 prnclrnenaclkDQ 0 1 0 1 1 1 1 0 0 1 1 1 X X X 0 1 1 X X X (上升沿) X X X X 1 0 1 0 X Qn 1 0

10、第第6 6章章 时序逻辑电路设计时序逻辑电路设计 1原理图设计 (1) 建立新文件:选取窗口菜单FileNew,出现对 话框,选择Graphic Editor file选项,单击OK按钮,进 入图形编辑画面。 (2) 保存:选取窗口菜单FileSave, 出现对话框, 键入文件名dff_g.gdf, 单击OK按钮。 (3) 指定项目名称,要求与文件名相同:选取窗口 菜单FileProjectName, 键入文件名dff_g,单击OK 按钮。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (4) 确定对象的输入位置:在图形窗口内单击鼠标 左键。 (5) 引入元件DFFE:选取窗口菜单Symb

11、olEnter Symbol,在Maxplus2max2libprim处双击,在Symbol File菜单中选取DFFE或直接键入DFFE,单击OK按钮。 (双击空白区域也可进入Enter Symbol对话框。) 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (6) 引入输入和输出脚:按步骤(5)选出输入脚 INPUT和输出脚OUTPUT。 (7) 更改输入和输出脚的脚位名称:在PIN_NAME 处双击鼠标左键,进行更名,输入脚为D、clk、ena、 prn、clrn,输出脚为Q。 (8) 连接:将各引脚做相应连接,如图6-1所示。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 图6-

12、1 D触发器的引脚连接 INPUT VCC INPUT VCC D ENA CLRN prn clk ena INPUT VCC DFFE VCC INPUT D 1 clrn INPUT VCC PRN Q OUTPUT 7 Q 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (9) 选择实际编程器件型号:选取窗口菜单 AssignDevice, 出现对话框,选择ACEX1K系列的 EP1K30TC144-1。 (10) 保存并查错:选取窗口菜单 FileProjectSave USE IEEE.STD_LOGIC_1164.ALL; ENTITY dffe2 IS PORT( d ,cl

13、k:IN STD_LOGIC; q :OUTSTD_LOGIC ); END dffe2; ARCHITECTURE a OF dffe2 IS 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 BEGIN PROCESS(clk,d) BEGIN IF clkevent AND clk=1 THEN q=d; END IF; END PROCESS; END a; 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 可用如下两种描述风格来描述一个异步复位/置位端同步 使能D触发器。程序一 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff

14、e2 IS PORT( d,clk,clrn,prn,ena:IN STD_LOGIC; q :OUT STD_LOGIC ); END dffe2; ARCHITECTURE a OF dffe2 IS BEGIN 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 PROCESS(clk,prn,clrn,ena,d) BEGIN IF prn=0 THEN q=1; ELSIF clrn=0 THEN q=0; ELSIF clkevent AND clk=1 THEN IF ena=1 then qd, CLK=clk, CLRN=clrn, PRN=prn, ENA=ena, Q=q)

15、; END a; 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (6) 保存并查错:选取窗口菜单 FileProjectSave USE IEEE.STD_LOGIC_1164.ALL; ENTITY jkdff IS PORT(j, k : IN STD_LOGIC; Clk : IN STD_LOGIC; q, qb : OUT STD_LOGIC); END jkdff; ARCHITECTURE a OF jkdff IS 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 SIGNAL qtmp,qbtmp:STD_LOGIC; BEGIN PROCESS(clk,j,k) BEG

16、IN IF clk=1 AND clkevent THEN IF j=0 AND k=0 THEN NULL; ELSIF j=0 AND k=1 THEN qtmp=0; qbtmp=1; 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 ELSIF j=1 AND k=0 THEN qtmp=1; qbtmp=0; ELSE qtmp=NOT qtmp; qbtmp=NOT qbtmp; END IF; 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 END IF; q=qtmp; qb=qbtmp; END PROCESS; END a; 第第6 6章章 时序逻辑电路设计时序逻辑电路设

17、计 程序二 (异步复位/置位功能的JK触发器) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY jkdff2 IS PORT(J, K:IN STD_LOGIC; clk:IN STD_LOGIC; prn, clr: IN STD_LOGIC; q,qb:OUT STD_LOGIC); END jkdff2; 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 ARCHITECTURE a OF jkdff2 IS SIGNAL qtmp, qbtmp: STD_LOGIC; BEGIN PROCESS(clk, prn, clr, j, k

18、) BEGIN IF prn=0 THEN qtmp=1; qbtmp=0; 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 ELSIF clr=0 THEN qtmp=0; qbtmp=1; ELSIF clk=1 AND clkevent THEN IF j=0 AND k=0 THEN NULL; ELSIF j=0 AND k=1 THEN qtmp=0; qbtmp=1; ELSIF j=1 AND k=0 THEN 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 qtmp=1; qbtmp=0; ELSE qtmp=NOT qtmp; qbtmp=NOT qbtmp; END

19、IF; END IF; q=qtmp; qb”键将所有输 入和输出脚移至右边(对异步复位/置位触发器、同步使 能D触发器,还需将prn、clr、ena等也移至右边),单 击OK按钮进入仿真波形编辑器。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (3) 设定时钟的周期:选取窗口菜单OptionsGride Size,出现对话框,设定Gride Size为50 ns,则时钟周 期为100 ns,单击OK按钮。 (4) 设定初始值并保存:设定初始值,选取窗口菜 单FileSave,出现对话框,单击OK按钮。 (5) 仿真:选取窗口菜单MAX+plusSimulator, 出现Timing S

20、imulation对话框,单击Start按钮,出现 Simulator对话框,单击“确定”按钮。这一步也可直 接按常用工具栏的 按钮。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (6) 观察输入结果的正确性:单击 按钮,可以在 时序图中加入注释,以验证仿真结果的正确性,如图 6-7所示。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 图6-7 带异步复位/置位功能的JK触发器的仿真结果 clr J K clk Q Qb prn 不变 Q端为0 Q端为1 被异步复位 异步清零 异步置位 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (7) 波形分析:观察仿真结果,在prn、clr

21、均为高 电平(无效)期间,随着每个时钟上升沿的到来,输出端 Q的输出与输入端J的逻辑相同,符合Qn+1=JQn+KQn的 JK触发器特征方程。而当清零端有效时,不等时钟的 有效边沿到来,输出立刻被无条件地复位为“0”。同 样,当预置位端prn有效时,不等时钟的有效边沿到来, 输出立刻被无条件地置位。图中未列出预置位信号与 复位信号同时有效时的输出情况,读者可尝试进行仿 真并观察输出的逻辑情况。 通过以上分析,认为以上的原理图设计和VHDL设 计均能实现预期的JK触发器的有关逻辑功能。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 4硬件验证 1) 下载实验验证 以VHDL程序jkdff2.

22、vhd为例。 (1) 选择器件:打开MAX+plus,选取窗口菜单 AssignDevice,出现对话框,选择ACEX1K系列的 EP1K30TC144-1。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (2) 锁定引脚:选取窗口菜单 AssignPin/Location/Chip,出现对话框,在Node Name中分别键入引脚名称J、K、clk、Q、clr、prn, 在Pin中分别键入引脚编号68、67、55、135、65、64。 其中,引脚68、67对应输入按键KEY1、KEY2,其对 应的信号灯为LED_KEY1与LED_KEY2;引脚55对应 时钟信号,时钟信号可在实验箱现场调整

23、,频率可选; 135引脚连接着输出LED12;65、64脚分别对应输入按 键KEY3、KEY4。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (3) 编译:选取窗口菜单FileProjectSave USE IEEE.STD_LOGIC_1164.ALL; LIBRARY ALTERA; USE ALTERA.MAXPLUS2.ALL; ENTITY tffe_v IS PORT(t, clk, clrn, prn, ena : IN STD_LOGIC; q : OUT STD_LOGIC ); END tffe_v; 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 ARCHITEC

24、TURE a OF tffe_v IS BEGIN rod1: TFFE PORT MAP (t, clk, clrn, prn, ena, q); END a; 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (6) 保存并查错:选取窗口菜单 FileProjectSave USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY countbasic IS PORT(clk:IN STD_LOGIC; q:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0); END countbasic; ARCHITECTURE a OF counbasict

25、 IS BEGIN 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 PROCESS(clk) VARIABLE qtmp:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF clk event AND clk=1 THEN qtmp:=qtmp+1; END IF; q”键将clk、Q 移至右边,单击OK按钮进行波形编辑。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (3) 设定时钟的周期:选取窗口菜单OptionsGride Size,出现对话框,设定Gride Size为35 ns,单击OK按钮。 (4) 设定初始值并保存:设定初始值,选取窗口菜单 Fil

26、eSave,出现对话框,单击OK按钮。 (5) 仿真:选取窗口菜单MAX+plusSimulator,出 现Timing Simulation对话框,单击Start按钮,出现 Simulator对话框,单击“确定”按钮。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 图6-14 基本计数器的仿真结果 Qtmp Q clk 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (6) 观察输入结果的正确性:单击按钮,可以在时 序图中写字,并验证仿真结果的正确性。仿真结果如 图6-14所示。 (7) 波形分析:从仿真波形可以看出,每来一个时 钟的上升沿,输出数据Q就累加一次,相当于对时钟进 行计数

27、,符合计数器的逻辑功能。因此该VHDL设计 能实现预期的计数器的有关逻辑功能。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 4硬件验证 以对VHDL程序进行硬件验证为例。 1) 下载实验验证 (1) 选择器件:打开MAX+puls,选取窗口菜单 AssignDevice,出现对话框,选择ACEX1K系列的 EP1K30TC144-1。 (2) 引脚锁定:选取窗口菜单 AssignPin/Location/Chip,出现对话框,在Node Name中分别键入引脚名称。其中,clk引脚编号为55; Q7Q0的引脚编号为133、135、136、137、138、140、 8、9,这些引脚编号分别

28、对应输出LED12LED5。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (3) 编译:选取窗口菜单 FileProjectSave USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY countclr IS PORT(clk :IN STD_LOGIC; clr :IN STD_LOGIC; q :BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0); END countclr; ARCHITECTURE a OF countclr IS 第第6 6章章 时序逻辑电路设计时序逻辑电路

29、设计 BEGIN PROCESS(clk) VARIABLE qtmp: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF clkevent AND clk=1 THEN IF clr=0 THEN qtmp:=00000000; ELSE qtmp:=qtmp+1; END IF; END IF; q”键将clk、Q、 clr移至右边,单击OK按钮进行波形编辑。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (3) 设定时钟的周期:选取窗口菜单OptionsGride Size,出现对话框,设定Gride Size为40 ns,单击OK按钮。 (4) 设定初始

30、值并保存:设定初始值,选取窗口菜单 FileSave,出现对话框,单击OK按钮。 (5) 仿真:选取窗口菜单MAX+plusSimulator,出 现Timing Simulation对话框,单击Start按钮,出现 Simulator对话框,单击“确定”按钮。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (6) 观察输入结果的正确性:单击按钮,可以在时 序图中写字,并验证仿真结果的正确性。仿真结果如 图6-17所示。 (7) 波形分析:从仿真波形可以看出,每来一个时 钟的上升沿,输出数据Q就累加一次,相当于对时钟进 行计数,符合计数器的逻辑功能。当清零信号clr有效 电平(低电平)到达

31、时,并没有立刻清零,而是等清零有 效电平到达后的下一时钟有效边沿到达时才使计数输 出清零。因此该VHDL设计能实现预期的同步计数器 的有关逻辑功能。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 图6-17 实体countclr仿真结果 Qtmp clr clk Q 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 4硬件验证 以对VHDL程序进行硬件验证为例。 1) 下载实验验证 (1) 选择器件:打开MAX+plus,选取窗口菜单 AssignDevice,出现对话框,选择ACEX1K系列的 EP1K30TC144-1。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (2) 锁定引

32、脚:选取窗口菜单 AssignPin/Location/Chip,出现对话框,在Node Name中分别键入引脚名称。clk的引脚编号为55,clr的 引脚编号为68。Q7Q0的引脚编号为133、135、136、 137、138、140、8、9,这些引脚编号分别对应输出 LED12LED5。 (3) 编译:选取窗口菜单FileProjectSave USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY countud IS PORT(clk :IN STD_LOGIC; clr :IN STD_LOGIC; d

33、ire :IN STD_LOGIC; q :BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0); END countud; 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 ARCHITECTURE a OF countud IS BEGIN PROCESS(clk) BEGIN IF clkevent AND clk=1 THEN IF clr=0 THEN q=00000000; ELSIF dire=1 THEN 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 q=q+1; ELSE q”键将clk、Q, clr、dire移至右边,单击OK按钮进行图形编辑。 第第6

34、 6章章 时序逻辑电路设计时序逻辑电路设计 (3) 设定时钟的周期:选取窗口菜单OptionsGride Size,出现对话框,设定Gride Size为40 ns,单击OK按钮。 (4) 设定初始值并保存:设定初始值,选取窗口菜单 FileSave,出现对话框,单击OK按钮。 (5) 仿真:选取窗口菜单MAX+plusSimulator,出 现Timing Simulation对话框,单击Start按钮,出现 Simulator对话框,单击“确定”按钮。 (6) 观察输入结果的正确性:单击 按钮,可以在时 序图中写字,并验证仿真结果的正确性,如图6-18所示。 第第6 6章章 时序逻辑电路设

35、计时序逻辑电路设计 图6-18 同步清零的可逆计数器的仿真结果 dire clr clk Q 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (7) 波形分析:从仿真波形可以看出,dire=“1”期 间,每来一个时钟的上升沿,输出数据Q就累加一次, 相当于对时钟进行计数,符合递增计数器的逻辑要求; dire=“0”期间,每来一个时钟的上升沿,输出数据Q就 递减一次,符合递减计数器的逻辑要求;当清零信号 clr有效电平(低电平)到达时,并没有立刻清零,而是等 清零有效电平到达后的下一时钟有效边沿到达时才使 计数输出清零。该VHDL设计能实现预期的同步计数 器的有关逻辑功能。 第第6 6章章 时

36、序逻辑电路设计时序逻辑电路设计 3硬件验证 以对VHDL程序进行硬件验证为例。 1) 下载实验验证 (1) 选择器件:打开MAX+plus,选取窗口菜单 AssignDevice,出现对话框,选择ACEX1K系列的 EP1K30TC144-1。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (2) 引脚锁定:选取窗口菜单 AssignPin/Location/Chip,出现对话框,在Node Name中分别键入引脚名称。clk的引脚编号为55;clr的 引脚编号为68,对应于输入按键KEY1;dire的引脚编 号为67,对应于输入按键KEY2;Q7Q0的引脚编号 为133、135、136、

37、137、138、140、8、9,这些引脚 编号分别对应输出LED12LED5。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (3) 编译:选取窗口菜单 FileProjectSave USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY countupdown IS PORT(clk:IN STD_LOGIC; clr,en,load:IN STD_LOGIC; updown:IN STD_LOGIC; din:IN STD_LOGIC_VECTOR(7 DOWNTO 0); q:BUFFER STD_L

38、OGIC_VECTOR(7 DOWNTO 0); END countupdown; 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 ARCHITECTURE a OF countupdown IS BEGIN PROCESS(clk) BEGIN IF clkevent AND clk=1 THEN IF clr=0 THEN q=00000000; ELSIF en=1 THEN IF load=1 THEN q=din; ELSIF updown=1 THEN q=q+1; 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 ELSE q=q?1; END IF; END IF; END

39、IF; END PROCESS; END a; 图6-19为实体countupdown(即同步清零、使能且能预 置计数起始值的可逆计数器)的仿真结果。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 图6-19 实体countupdown的仿真结果 en clk updown load clr din Q 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 以上程序与波形的说明如下:该程序在简单可逆计 数器的基础上增加了几个控制端,这几个控制端都是 时钟同步的。从仿真结果可以看出,在使能信号en有 效期间,计数器可以正常计数;一旦en=“0”,计数器 即停止计数,计数器的输出在en=“0”期间

40、保持不变。 当load信号有效时(高电平),计数器的输出即变为 预置数,并随后从该值开始进行计数。是递增计数还 是递减计数,要看方向控制端updown。当updown=“1” 期间,计数器递增计数,反之递减计数。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (2) 将同步清零可逆计数器修改为异步清零可逆计数器 的参考程序如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY countyibu IS PORT(clk : IN STD_LOGIC; clr : IN ST

41、D_LOGIC; dire : IN STD_LOGIC; q : BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0); 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 END countyibu; ARCHITECTURE a OF countyibu IS BEGIN PROCESS(clk,clr) BEGIN IF clr=0 THEN q=00000000; ELSIF clkevent AND clk=1 THEN IF dire=1 THEN q=q+1; ELSE 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 q=q?1; END IF; END IF

42、; END PROCESS; END a; 图6-20为实体countyibu(即异步清零可逆计数器)的 仿真结果。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 图6-20 实体countyibu的仿真结果 clr dire clk Q 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 该程序与波形说明如下:从波形可以看出,当清零 端有效时,不等时钟脉冲的上升到来,立刻使计数器 输出清零,实现了异步清零的逻辑要求。 从异步清零可逆计数器的程序可以看出,设计异步 控制信号时有两个基本点:必须把该异步控制信号放 入进程的敏感信号表作为敏感信号;对该异步控制信 号的判断语句应放到判断时钟有效边

43、沿语句的前面, 如本例中将“IF clr=0 THEN q=00000000;”置于语 句“IF clkevent AND clk=1 THEN”之前。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 6.7 同步预置数的计数器同步预置数的计数器 有时计数器不需要从0开始累计计数,而希望从某 个数开始往前或往后计数。这时就需要有控制信号能 在计数开始时控制计数器从期望的初始值开始计数, 这就是可预加载初始计数值的计数器。本例设计了一 个对时钟同步的预加载(或称预置)计数器。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 一个同步清零、使能、同步预置数的计数器应具 备的脚位有: 时钟输入端

44、:clk; 计数输出端:Q; 同步清零端:clr; 同步使能端:en; 加载控制端:load; 加载数据输入:din。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 1VHDL设计 (1) 建立新文件:选取窗口菜单FileNew,出现对 话框,选Text Editor file选项,单击OK按钮,进入文本 编辑画面。 (2) 保存:选取窗口菜单FileSave,出现对话框, 键入文件名countload.vhd,单击OK按钮。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (3) 指定项目名称,要求与文件名相同:选取窗口 菜单FileProjectName, 键入文件名countloa

45、d,单击 OK按钮。 (4) 选择实际编程器件型号:选取窗口菜单 AssignDevice,出现对话框,选择ACEX1K系列的 EP1K30TC144-1。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (5) 输入VHDL源程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY countload IS PORT(clk:IN STD_LOGIC; clr, en, load:IN STD_LOGIC; din:IN STD_LOGIC_VECTOR(7 DOWNTO 0

46、); q:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0); END countload; 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 ARCHITECTURE a OF countload IS BEGIN PROCESS(clk) BEGIN IF clkevent AND clk=1 THEN IF clr=0 THEN q=00000000; ELSIF EN=1 THEN IF load=1 THEN q=din; ELSE q”键将clk、Q、 clr、din、en、load移至右边,单击OK按钮并进行波形 编辑。 第第6 6章章 时序逻辑电路设计时序逻

47、辑电路设计 (3) 设定时钟的周期:选取窗口菜单OptionsGride Size,出现对话框,设定Gride Size,单击OK按钮。 (4) 设定各输入信号初始值并保存。 (5) 仿真:选取窗口菜单MAX+plusSimulator, 出现Timing Simulation对话框,单击Start按钮,出现 Simulator对话框,单击“确定”按钮。 (6) 观察输入结果的正确性:单击按钮,可以在时序 图中写字,并验证仿真结果的正确性,如图6-21所示。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 图6-21 实体countload的仿真结果 clk clr load en din

48、Q 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (7) 波形分析:从仿真波形可以看出,该程序有三 个同步控制端,这三个控制端都必须在时钟有效边沿 到达时才能起效。同步清零端(低电平有效)信号有效后 的时钟上升沿使计数器输出清零。同步加载端(高电平 有效)可观察仿真波形中的预加载信号load,该信号在 下一时钟上升沿未到达之前,没有起预置数效果。等 到下一上升沿到达后,将并行输入数据加载到计数器, 并且随后从预置值开始计数。同步使能端(低电平有效) 无效后,计数器停止计数,直到en端有效。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 3硬件验证 以对VHDL程序进行硬件验证为例。 1

49、) 下载实验验证 (1) 选择器件:打开MAX+plus,选取窗口菜单 AssignDevice,出现对话框,选择ACEX1K系列的 EP1K30TC144-1。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (2) 引脚锁定:选取窗口菜单 AssignPin/Location/Chip,出现对话框,在Node Name中分别键入引脚名称。clk的引脚编号为55;clr的 引脚编号为68,对应于输入按键KEY1;en的引脚编号 为67,对应于输入按键KEY2;load的引脚编号为65, 对应于输入按键KEY3;Q7Q0的引脚编号为133、 135、136、137、138、140、8、9,这

50、些引脚编号分别 对应输出LED12LED5;din7din0的引脚编号为46、 47、48、49、59、60、62、63,这些引脚编号分别对 应输入按键KEY12KEY5。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (3) 编译:选取窗口菜单 FileProjectSave USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY count128 IS PORT(clk : IN STD_LOGIC; clr, en, load: IN STD_LOGIC; din : IN STD_LOGIC_VECT

51、OR(7 DOWNTO 0); q : BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0); END count128; 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 ARCHITECTURE a OF count128 IS BEGIN PROCESS(clk) BEGIN IF clkevent AND clk=1 THEN IF clr=0 THEN q=00000000; ELSIF q=01111111 THEN q=00000000; ELSIF en=1 THEN IF load=1 THEN q=din; 第第6 6章章 时序逻辑电路设计时序逻辑电路设计

52、 ELSE q”键将clk、Q、 clr、din、en、load移至右边,单击OK按钮并进行波形 编辑。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (3) 设定时钟的周期:选取窗口菜单OptionsGride Size,出现对话框,设定Gride Size,单击OK按钮。 (4) 设定各输入信号初始值并保存。 (5) 仿真:选取窗口菜单MAX+plusSimulator, 出现Timing Simulation对话框,单击Start按钮,出现 Simulator对话框,单击“确定”按钮。 (6) 观察输入结果的正确性:单击按钮,可以在时 序图中写字,并验证仿真结果的正确性,如图6-22

53、所示。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 图6-22 实体count128的仿真结果 en clk clr load din Q 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (7) 波形分析:程序中已设定预置值为123,从仿 真波形可以看出,当load为高电平加载有效时,计数器 的输出为预置值。当清零信号clr有效电平(低电平)到达 时,并没有立刻清零,而是等清零有效电平到达后的 下一时钟有效边沿到达时才使计数输出清零。当计数 到达127时,计数值恢复为0,说明确实实现了一百二 十八进制。因此,该VHDL设计能实现预期的一百二 十八进制计数器的有关逻辑功能。 第第6 6章

54、章 时序逻辑电路设计时序逻辑电路设计 3硬件验证 以对VHDL程序进行硬件验证为例。 1) 下载实验验证 (1) 选择器件:打开MAX+plus,选取窗口菜单 AssignDevice,出现对话框,选择ACEX1K系列的 EP1K30TC144-1。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (2) 锁定引脚:选取窗口菜单 AssignPin/Location/Chip,出现对话框,在Node Name中分别键入引脚名称。clk的引脚编号为55;clr的 引脚编号为68,对应于输入按键KEY1;en的引脚编号 为67,对应于输入按键KEY2;load的引脚编号为65, 对应于输入按键K

55、EY3;Q7Q0的引脚编号为133、 135、136、137、138、140、8、9,这些引脚编号分别 对应输出LED12LED5;din7din0的引脚编号为46、 47、48、49、59、60、62、63,这些引脚编号分别对 应输入按键KEY12KEY5。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (3) 编译:选取窗口菜单 FileProjectSave clk : IN BIT; q : OUT BIT_VECTOR(11 DOWNTO 0); END reg12; ARCHITECTURE a OF reg12 IS BEGIN PROCESS BEGIN 第第6 6章章 时

56、序逻辑电路设计时序逻辑电路设计 WAIT UNTIL clk = 1; q ”键将D、clk、 Q移至右边,单击OK按钮进行波形编辑。 (3) 设定时钟的周期:选取窗口菜单OptionsGride Size,出现对话框,设定Gride Size,如设定为35 ns, 单击OK按钮。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (4) 设定初始值并保存:设定初始值,选取窗口菜单 FileSave,出现对话框,单击OK按钮。 (5) 仿真:选取窗口菜单MAX+plusSimulator,出 现Timing Simulation对话框,单击Start按钮,出现 Simulator对话框,单击“

57、确定”按钮。 (6) 观察输入结果的正确性:单击 按钮,可以在 时序图中写字,并验证仿真结果的正确性,如图6-25所示。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 图6-25 实体reg12的仿真结果 clk D Q 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (7) 波形分析:从仿真波形可以看出,在时钟的上 升沿,输入数据D被送到Q端输出,起到了寄存数据的 作用,符合寄存器的逻辑功能。因此,该VHDL设计 能实现预期的12位寄存器的有关逻辑功能。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 4硬件验证 以对VHDL程序进行硬件验证为例。 1) 下载实验验证 (1) 选择器

58、件:打开MAX+plus,选取窗口菜单 AssignDevice,出现对话框,选择ACEX1K系列的 EP1K30TC144-1。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (2) 引脚锁定:选取窗口菜单 AssignPin/Location/Chip,出现对话框,在Node Name中分别键入引脚名称。clk的引脚编号为55; D11D0的引脚编号分别为46、47、48、49、59、60、 62、63、64、65、67、68,这些引脚编号分别对应输 入按键KEY12KEY1,相当于与12个触发器的D端相 连;Q11Q0的引脚编号分别为133、135、136、137、 138、140、

59、8、9、10、12、13、17,这些引脚编号分 别对应输出LED12LED1,相当于与12个触发器的Q 端相连。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (3) 编译:选取窗口菜单 FileProjectSave 脉冲输入端:clk; 串行数据输出端:dout。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 1VHDL设计 8位串入/串出寄存器用VHDL设计比用原理图方式 输入一组寄存器更加方便,这也从某种程度体现了用 VHDL进行设计的优势。下面仅介绍用VHDL设计串入 /串出寄存器,原理图设计法由读者自行尝试。 (1) 建立新文件:选取窗口菜单FileNew,出现对 话框,选

60、择Text Editor file选项,单击OK按钮,进入文 本编辑画面。 (2) 保存:选取窗口菜单FileSave, 出现对话框, 键入文件名shift1.vhd,单击OK按钮。 第第6 6章章 时序逻辑电路设计时序逻辑电路设计 (3) 指定项目名称,要求与文件名相同:选取窗口 菜单FileProjectName, 键入文件名shift1,单击OK 按钮。 (4) 选择实际编程器件型号:选取窗口菜单 AssignDevice, 出现对话框,选择ACEX1K系列的 EP1K30TC144-1。 (5) 输入VHDL源程序,串入/串出移位寄存器提供 了两种描述方法。 第第6 6章章 时序逻辑电

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论