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

下载本文档

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

文档简介

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

6.13有限状态机的设计

习题6.1基本D触发器的设计时序逻辑电路的输出不但和当前输入有关,还与系统的原先状态有关,即时序电路的当前输出由输入变量与电路原先的状态共同决定。为达到这一目的,时序逻辑电路从某一状态进入下一状态时,必须首先设法“记住”原先的状态。作为时序逻辑电路的基本特征,时序逻辑电路应具有“记忆”功能。触发器是时序电路最常用的记忆元件。本章将首先介绍常用触发器的设计方法,然后介绍常用的时序电路:计数器、寄存器、移位寄存器、状态机等。任何时序逻辑电路都是以时钟信号为驱动信号的,时序电路通常在时钟信号的边沿到来时才发生状态变化。因此,设计时序逻辑电路时,必须要重视时钟信号。VHDL程序描述时钟有两种基本形式,即将时钟放入进程的敏感信号表和用WAIT语句描述时钟。(1)将时钟放入进程的敏感信号描述。只要将时钟信号放入进程的敏感信号表,时钟信号就成为了进程的敏感信号。当时钟有边沿变化时,无论上升沿或下降沿,都会启动进程执行一遍。不同的时序电路对时钟边沿的要求可能不同,有的是上升沿启动,有的是下降沿启动。例如,VHDL程序通常用语句''clk='1'ANDclk'event'''来描述这种边沿变化,其中event表示信号发生变化;clk='1'表示变化后clk的电平为“1”,此语句描述的是上升沿。若要描述下降沿,只要将clk='1'改为clk='0'就可以了。如

PROCESS(clk)BEGINIF''clk='0'ANDclk'event''THEN…ENDIF;ENDPROCESS;此外,程序包STD_LOGIC_1164内定义了边沿检测函数rising_edge(上升沿检测函数)和fall_edge(下降沿检测函数),只要打开STD_LOGIC_1164库,这些函数就可直接调用。如

IFrising_edge(clk)THEN...ENDIF;当所定义的数据类型为BIT时,用“clk='1'ANDclk'event”肯定没有问题,因为BIT型数据的取值必然是“0”与“1”中取其一。而当所定义的数据类型为STD_LOGIC时,用边沿检测函数则更加合适,因为STD_LOGIC是一个9值类型,“clk='1'ANDclk'event”并不能把该类型数据的所有边沿变化全部表达出来。(2)用WAIT语句描述clk的变化,如

WAITUNTILclk='1'

一个进程内部一旦有了WAIT语句,就不要使用敏感信号表,反之亦然。WAIT语句或者置于进程的开始,或者置于进程的最后。触发器为具有记忆功能的装置,可储存两种不同的状态:“0”或“1”;借助输入状态的改变,可改变储存的状态。但由于系统需要同步变化,故通常在计时脉冲的上升沿变迁(PositiveTransition)时刻才容许储存数据改变,其他时刻触发器是被“锁住”的。触发器常被用在计数器、寄存器等器件中。

D触发器是最常用的触发器,其他的时序电路(包括其他触发器)都可以由D触发器外加一部分组合逻辑电路转换而来。(1)基本D触发器。基本触发器的特征方程为

Qn+1=D基本D触发器应具备的脚位:数据输入端:D;时钟输入端:clk;输出端:Q。(2)带异步复位/置位端的同步使能D触发器。所谓异步复位,是指只要复位端有效,不需等时钟的上升沿到来就立刻使JK触发器清零。而异步置位是指只要复位端有效,不需等时钟的上升沿到来就立刻使JK触发置位。若异步复位端与异步置位端同时有效,则输出为不定状态。由于实际硬件情况的复杂性,系统刚开始工作时并不能确保处于所需要的初始状态。这一问题在使用了异步复位信号或异步置位信号后得到了解决。当异步复位信号有效时,输出端立刻为“0”;或当异步置位信号有效时,输出端立刻为“1”。带异步复位/置位端的同步使能D触发器具备的脚位:数据输入端:D;时钟输入端:clk;复位信号端:clrn;置位信号端:prn;使能输入端:ena;输出端:Q。表6-1是带异步复位/置位功能D触发器真值表,从表中可以看出,当预置位端prn(或复位端clrn)有效时(低电平),无论时钟和D端的电平情况怎样,输出都为高电平(或低电平)。而当二者同为低电平,即预置位端与复位端同时有效时,输出不定,用“X”表示。当预置位端prn与复位端clrn均无效时,随着上升沿的到来,输出逻辑与输入端D逻辑值相同。表6-1异步复位/置位端同步使能D触发器真值表输入输出prnclrnenaclkDQ010111100111XXX011XXX↑(上升沿)↑↑XXXX1010XQn101.原理图设计(1)建立新文件:选取窗口菜单File→New,出现对话框,选择GraphicEditorfile选项,单击OK按钮,进入图形编辑画面。(2)保存:选取窗口菜单File→Save,出现对话框,键入文件名dff_g.gdf,单击OK按钮。(3)指定项目名称,要求与文件名相同:选取窗口菜单File→Project→Name,键入文件名dff_g,单击OK按钮。(4)确定对象的输入位置:在图形窗口内单击鼠标左键。(5)引入元件DFFE:选取窗口菜单Symbol→EnterSymbol,在\Maxplus2\max2lib\prim处双击,在SymbolFile菜单中选取DFFE或直接键入DFFE,单击OK按钮。(双击空白区域也可进入EnterSymbol对话框。)(6)引入输入和输出脚:按步骤(5)选出输入脚INPUT和输出脚OUTPUT。(7)更改输入和输出脚的脚位名称:在PIN_NAME处双击鼠标左键,进行更名,输入脚为D、clk、ena、prn、clrn,输出脚为Q。(8)连接:将各引脚做相应连接,如图6-1所示。图6-1D触发器的引脚连接(9)选择实际编程器件型号:选取窗口菜单Assign→Device,出现对话框,选择ACEX1K系列的EP1K30TC144-1。(10)保存并查错:选取窗口菜单File→Project→Save&Check,即可针对电路文件进行检查。(11)修改错误:针对Massage-Compiler窗口所提供的信息修改电路文件,直到没有错误为止。(12)保存并编译:选取窗口菜单File→Project→Save&Compile,即可进行编译,产生dff_g.sof烧写文件。(9)选择实际编程器件型号:选取窗口菜单Assign→Device,出现对话框,选择ACEX1K系列的EP1K30TC144-1。(10)保存并查错:选取窗口菜单File→Project→Save&Check,即可针对电路文件进行检查。(11)修改错误:针对Massage-Compiler窗口所提供的信息修改电路文件,直到没有错误为止。(12)保存并编译:选取窗口菜单File→Project→Save&Compile,即可进行编译,产生dff_g.sof烧写文件。图6-2D触发器的电路符号(13)创建电路符号:选取窗口菜单File→CreateDefaultSymbol,可以产生dff_g.sym文件,代表现在所设计的电路符号。选取File→EditSymbol,可进入SymbolEdit编辑器,D触发器的电路符号如图6-2所示。(14)创建电路包含文件:选取窗口菜单File→CreateDefaultIncludeFile,产生用来代表现在所设计电路的dff_g.inc文件,供其他VHDL编译时使用。(15)时间分析:选取窗口菜单Utilities→AnalyzeTiming,再选取窗口菜单Analysis→DelayMatrix,可以产生时间分析结果。2.VHDL设计(1)建立新文件:选取窗口菜单File→New,出现对话框,选TextEditorfile选项,单击OK按钮,进入文本编辑画面。(2)保存:选取窗口菜单File→Save,出现对话框,键入文件名dff2.vhd(程序二的文件名为dffe_v),单击OK按钮。(3)指定项目名称,要求与文件名相同:选取窗口菜单File→Project→Name,键入文件名dff2(程序二则键入dffe_v),单击OK按钮。这一步也可直接按常用工具栏的按钮。(4)选择实际编程器件型号:选取窗口菜单Assign→Device,出现对话框,选择ACEX1K系列的EP1K30TC144-1。(5)输入VHDL源程序:基本D触发器的参考程序为LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdffe2IS PORT(d,clk :IN STD_LOGIC;

q :OUT STD_LOGIC);ENDdffe2;ARCHITECTUREaOFdffe2ISBEGINPROCESS(clk,d)BEGIN IFclk'eventANDclk='1'THENq<=d; ENDIF;ENDPROCESS;ENDa;可用如下两种描述风格来描述一个异步复位/置位端同步使能D触发器。程序一LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdffe2IS PORT(d,clk,clrn,prn,ena :IN STD_LOGIC;

q:OUT STD_LOGIC);ENDdffe2;ARCHITECTUREaOFdffe2ISBEGIN

PROCESS(clk,prn,clrn,ena,d)BEGIN IFprn='0'THENq<='1'; ELSIFclrn='0'THENq<='0'; ELSIFclk'eventANDclk='1'THEN IFena='1'thenq<=d; ENDIF;ENDIF;ENDPROCESS;ENDa;程序二LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;LIBRARYALTERA;USEALTERA.MAXPLUS2.ALL;ENTITYdffe_vIS PORT(d,clk,clrn,prn,ena:IN STD_LOGIC; q:OUT STD_LOGIC);ENDdffe_v;ARCHITECTUREaOFdffe_vISBEGINexam:DFFEPORTMAP(D=>d,CLK=>clk,CLRN=>clrn,PRN=>prn,ENA=>ena,Q=>q);ENDa;(6)保存并查错:选取窗口菜单File→Project→Save&Check,即可检查并保存电路文件。这一步也可直接按常用工具栏的按钮。(7)修改错误:针对Massage-Compiler窗口所提供的信息修改电路文件,直到没有错误为止。(8)保存并编译:选取窗口菜单File→Project→Save&Compile,即可进行编译,产生dff2.sof(或dffe_v.sof)烧写文件。(9)进行软件仿真,观察仿真波形是否符合逻辑设计要求。(10)创建电路符号:选取窗口菜单File→CreateDefaultSymbol,可以产生dff2.sym(或dffe_v.sym)文件,代表现在所设计的电路符号。选取File→EditSymbol,可进入SymbolEdit画面。(11)创建电路包含文件:选取窗口菜单File→CreateDefaultIncludeFile,产生用于代表现在所设计电路的dff2.inc(或dffe_v.inc文件),供其他VHDL程序编译时使用。(12)时间分析:选取窗口菜单Utilities→AnalyzeTiming,再选取窗口菜单Analysis→DelayMatrix,产生时间分析结果。3.软件仿真(1)进入波形编辑窗口:选取窗口菜单MAX+plusⅡ→WaveformEditor,进入波形编辑窗口。(2)引入输入和输出脚:选取窗口菜单Node→EnterNodesfromSNF,出现对话框,单击list按钮,选择AvailableNodes中的输入与输出,按“=>”键将D、clk、Q(对异步复位/置位端、同步使能D触发器还需将prn、clrn、ena等)移至右边,单击OK按钮进入仿真波形编辑器。

(3)设定时钟的周期:选取窗口菜单Options→GrideSize,出现对话框,设定GrideSize以决定时钟信号的周期。如输入值为50ns,则时钟周期为100ns。单击OK按钮。(4)设定初始值并保存:设定初始值,选取窗口菜单File→Save,出现对话框,单击OK按钮。(5)仿真:选取窗口菜单MAX+plusⅡ→Simulator,出现TimingSimulation对话框,单击Start按钮,出现Simulator对话框,单击“确定”按钮。这一步也可直接按常用工具栏的按钮。(6)观察输入结果的正确性:单击按钮,可以在时序图中写字,并验证仿真结果的正确性,如图6-3所示。(7)波形分析:观察仿真结果,在使能端ena=“1”且prn、clrn均为高电平(无效)期间,随着每个时钟上升沿的到来,输出端Q的输出与输入端D的逻辑相同,符合Qn+1=Dn的D触发器特征方程。而当清零端有效clrn有效时,尽管输入是高电平,输出仍被无条件地复位为“0”。图中未列出预置位信号prn置零(有效)时的输出情况,读者可尝试将预置位信号prn置零(有效),观察输出的逻辑情况。图6-3异步复位/置位端、同步使能D触发器仿真结果4.硬件验证1)下载实验验证(1)选择器件:打开MAX+plusⅡ,选取窗口菜单Assign→Device,出现对话框,选择ACEX1K系列的EP1K30TC144-1。(2)锁定引脚:选取窗口菜单Assign→Pin/Location/Chip,出现对话框,在NodeName中分别键入引脚名称D、clk、Q,clrn、prn、ena,在Pin中分别键入引脚编号68、55、135、67、65、64。其中,引脚68对应输入按键KEY1,其对应的信号灯为LED_KEY1;引脚55对应时钟信号,时钟信号可在实验箱现场调整,频率从1Hz~25.6MHz可选;135引脚连接着输出LED12;67、65、64脚分别对应输入按键KEY2、KEY3、KEY4。(3)编译:选取窗口菜单File→Project→Save&Compile,即可对输入的原理图或VHDL程序进行编译。(4)烧写:选取窗口菜单Programmer,在弹出的对话框内选择Configure进行烧写。烧入烧写文件后,EDA实验箱即开始工作。2)观察实验结果

JLE-2型EDA实验箱提供了12个按键作为一部分输入信号,这些键按下时表示向有关引脚输入了“1”信号,此时按键上方的信号灯亮;反之则表示输入的是“0”信号,信号灯灭。该实验箱还提供了12个LED作为一部分输出信号,这些LED信号灯亮时表示输出为“1”,LED信号灯灭时表示输出为“0”。按表6-2所示,按下输入键KEY1~KEY4,观察输出LED的结果。表6-2D触发器的实验验证结果输入输出输入KEY3prn输入KEY2clrn输入KEY4ena输入KEY1DLED12Q0111110111XX011XXX10亮灭不变亮灭3)实验结果解释如表6-2所示,用“1”代表按键按入,则对应的LED灯亮,“0”代表按键恢复,则对应的LED灯灭。由表可见,输出的逻辑结果与D触发器的逻辑功能一致,因此设计正确。6.2JK触发器(1)基本JK触发器。JK触发器有J和K两个输入端(或称激励端),当时钟出现有效边沿(上升沿或者下降沿)时,JK触发器的输出将如表6-3所示,其他情况(时钟没有出现有效边沿)下,输出保持不变。JK触发器的特征方程为

Qn+1=JQn+KQn

基本JK触发器应具备的脚位:数据输入端:J,K;时钟输入端:clk;输出端:Q,Qb。表6-3基本JK触发器真值表QnJKQn+100011011Qn01(2)带异步复位/置位功能的JK触发器。所谓异步复位,是指只要复位端有效,不需等时钟的上升沿到来就立刻使JK触发器清零;而异步置位,是指只要复位端有效,不需等时钟的上升沿到来就立刻使JK触发器置位。若异步复位端与异步置位端同时有效,则输出为不定状态。表6-4是带异步复位/置位功能的JK触发器的真值表,从表中可以看出,异步复位/置位端都是低电平有效。脚位说明:数据输入端为J,K;脉冲输入端为clk;清除输入(复位)端为clr;默认控制(预置位)端为prn;使能输入端为ena;输出端为Q。表6-4带异步复位/置位功能的JK触发器真值表输入输出enaprnclrclkJKQQb111111101011111001111XXX↑(上升沿)↑↑↑XXX0011XXX010110X不变01翻转01X不变10翻转表6-4是带异步复位/置位功能的JK触发器真值表,从表中可以看出,当预置位端prn或复位端clr二者其一有效时(低电平),无论时钟和J、K端的电平情况如何,输出都为高电平(或低电平)。而当二者同为低电平,即预置位端与复位端同时有效时,输出不定,用“X”表示。当预置位端prn(或复位端clr)均无效时,输出端Q的值与输入端J、K的值有关。若J、K同为低电平,则输出保持不变;若J、K同为高电平,则随着上升沿的到来,输出将作翻转;当J、K电平不同时,输出端Q保持为与输入端J的逻辑值相同。1.原理图设计(1)建立新文件:选取窗口菜单File→New,出现对话框,选GraphicEditorfile选项,单击OK按钮,进入图形编辑画面。(2)保存:选取窗口菜单File→Save,出现对话框,键入文件名jkdff.gdf,单击OK按钮。(3)指定项目名称,要求与文件名相同:选取窗口菜单File→Project→Name,键入文件名jkdff_g,单击OK按钮。(4)确定对象的输入位置:在图形窗口内单击鼠标左键。(5)引入元件JKFFE:选取窗口菜单Symbol→EnterSymbol,在\Maxplus2\max2lib\prim处双击,在SymbolFile菜单中选取JKFFE或直接键入JKFFE,单击OK按钮。(或者双击空白区域也可进入EnterSymbol对话框。)(6)引入输入和输出脚:按步骤(5)选出输入脚INPUT和输出脚OUTPUT。(7)更改输入和输出脚的脚位名称:在PIN_NAME处双击鼠标左键,进行更名,输入脚为J、K、clk、ena、prn、clr,输出脚为Q。(8)连接:将各引脚做相应连接,带异步复位/置位功能的JK触发器的原理图如图6-4所示。(9)选择实际编程器件型号:选取窗口菜单Assign→Device,出现对话框,选择ACEX1K系列的EP1K30TC144-1。(10)保存并查错:选取窗口菜单File→Project→Save&Check,即可针对电路文件进行检查。(11)修改错误:针对Massage-Compiler窗口所提供的信息修改电路文件,直到没有错误为止。(12)保存并编译:选取窗口菜单File→Project→Save&Compile,即可进行编译,产生jkdff.sof烧写文件。(13)创建电路符号:选取窗口菜单File→CreateDefaultSymbol,可以产生JKFFE.sym文件,代表现在所设计的电路符号。选取File→EditSymbol,可进入SymbolEdit编辑器。图6-4带异步复位/置位功能的JK触发器的原理图(14)创建电路包含文件:选取窗口菜单File→CreateDefaultIncludeFile,产生用来代表现在所设计电路的jkdff.inc文件,供其他VHDL编译时使用。(15)时间分析:选取窗口菜单Utilities→AnalyzeTiming,再选取窗口菜单Analysis→DelayMatrix,可以产生相应的时间分析结果。2.VHDL设计(1)建立新文件:选取窗口菜单File→New,出现对话框,选TextEditorfile选项,单击OK按钮,进入文本编辑画面。(2)保存:选取窗口菜单File→Save,出现对话框,键入文件名jkdff.vhd(不同的实体有不同的文件名),单击OK按钮。

(3)指定项目名称,要求与文件名相同:选取窗口菜单File→Project→Name,键入文件名jkdff(程序二键入jkdff2),单击OK按钮。这一步也可直接按常用工具栏的按钮。(4)选择实际编程器件型号:选取窗口菜单Assign→Device,出现对话框,选择ACEX1K系列的EP1K30TC144-1。(5)输入VHDL源程序:程序一(基本JK触发器的参考程序)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYjkdffISPORT(j,k :INSTD_LOGIC;

Clk:INSTD_LOGIC;q,qb:OUTSTD_LOGIC);ENDjkdff;ARCHITECTUREaOFjkdffISSIGNALqtmp,qbtmp:STD_LOGIC;BEGIN PROCESS(clk,j,k) BEGIN IFclk='1'ANDclk'eventTHEN IFj='0'ANDk='0'THENNULL; ELSIFj='0'ANDk='1'THEN

qtmp<='0';

qbtmp<='1';

ELSIFj='1'ANDk='0'THEN

qtmp<='1';

qbtmp<='0';ELSE qtmp<=NOTqtmp; qbtmp<=NOTqbtmp; ENDIF;

ENDIF; q<=qtmp; qb<=qbtmp;ENDPROCESS;ENDa;程序二(异步复位/置位功能的JK触发器)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYjkdff2ISPORT(J,K:INSTD_LOGIC; clk:INSTD_LOGIC; prn,clr:INSTD_LOGIC;q,qb:OUTSTD_LOGIC);ENDjkdff2;ARCHITECTUREaOFjkdff2ISSIGNALqtmp,qbtmp:STD_LOGIC;BEGIN PROCESS(clk,prn,clr,j,k) BEGIN IFprn='0'THEN

qtmp<='1'; qbtmp<='0';

ELSIFclr='0'THEN

qtmp<='0'; qbtmp<='1'; ELSIFclk='1'ANDclk'eventTHEN IFj='0'ANDk='0'THENNULL; ELSIFj='0'ANDk='1'THEN

qtmp<='0';

qbtmp<='1'; ELSIFj='1'ANDk='0'THEN

qtmp<='1';

qbtmp<='0'; ELSEqtmp<=NOTqtmp; qbtmp<=NOTqbtmp; ENDIF;ENDIF; q<=qtmp; qb<=qbtmp;ENDPROCESS;ENDa;(6)保存并查错:选取窗口菜单File→Project→Save&Check,即可针对电路文件保存并进行检查。这一步也可直接按常用工具栏的按钮。(7)修改错误:针对Massage-Compiler窗口所提供的信息修改电路文件,直到没有错误为止。(8)对不同的程序分别进行保存并编译:选取窗口菜单File→Project→Save&Compile,即可进行编译,分别产生jkdff.sof与jkdff2.sof烧写文件。(9)仿真:进行软件仿真,观察仿真波形并分析是否符合逻辑设计要求,图6-5是基本JK触发器的仿真波形图。(10)创建电路符号:选取窗口菜单File→CreateDefaultSymbol,可以产jkdff.sym(或jkdff2.sym)文件,代表现在所设计的电路符号。选取File→EditSymbol,可进入SymbolEdit画面,基本JK触发器的电路符号如图6-6所示。图6-5基本JK触发器的仿真结果图6-6基本JK触发器的电路符号(11)创建电路包含文件:选取窗口菜单File→CreateDefaultIncludeFile,产生用来代表现在所设计电路的dff2.inc(或dffe_v.inc)文件,供其他VHDL程序编译时使用。(12)时间分析:选取窗口菜单Utilities→AnalyzeTiming,再选取窗口菜单Analysis→DelayMatrix,产生时间分析结果。3.软件仿真(1)进入波形编辑窗口:选取窗口菜单MAX+plusⅡ→WaveformEditor,进入波形编辑器。(2)引入输入和输出脚:选取窗口菜单Node→EnterNodesfromSNF,出现对话框,单击list按钮,选择AvailableNodes中的输入与输出,按“=>”键将所有输入和输出脚移至右边(对异步复位/置位触发器、同步使能D触发器,还需将prn、clr、ena等也移至右边),单击OK按钮进入仿真波形编辑器。(3)设定时钟的周期:选取窗口菜单Options→GrideSize,出现对话框,设定GrideSize为50ns,则时钟周期为100ns,单击OK按钮。(4)设定初始值并保存:设定初始值,选取窗口菜单File→Save,出现对话框,单击OK按钮。(5)仿真:选取窗口菜单MAX+plusⅡ→Simulator,出现TimingSimulation对话框,单击Start按钮,出现Simulator对话框,单击“确定”按钮。这一步也可直接按常用工具栏的按钮。(6)观察输入结果的正确性:单击按钮,可以在时序图中加入注释,以验证仿真结果的正确性,如图6-7所示。图6-7带异步复位/置位功能的JK触发器的仿真结果(7)波形分析:观察仿真结果,在prn、clr均为高电平(无效)期间,随着每个时钟上升沿的到来,输出端Q的输出与输入端J的逻辑相同,符合Qn+1=JQn+KQn的JK触发器特征方程。而当清零端有效时,不等时钟的有效边沿到来,输出立刻被无条件地复位为“0”。同样,当预置位端prn有效时,不等时钟的有效边沿到来,输出立刻被无条件地置位。图中未列出预置位信号与复位信号同时有效时的输出情况,读者可尝试进行仿真并观察输出的逻辑情况。通过以上分析,认为以上的原理图设计和VHDL设计均能实现预期的JK触发器的有关逻辑功能。4.硬件验证1)下载实验验证以VHDL程序jkdff2.vhd为例。(1)选择器件:打开MAX+plusⅡ,选取窗口菜单Assign→Device,出现对话框,选择ACEX1K系列的EP1K30TC144-1。

(2)锁定引脚:选取窗口菜单Assign→Pin/Location/Chip,出现对话框,在NodeName中分别键入引脚名称J、K、clk、Q、clr、prn,在Pin中分别键入引脚编号68、67、55、135、65、64。其中,引脚68、67对应输入按键KEY1、KEY2,其对应的信号灯为LED_KEY1与LED_KEY2;引脚55对应时钟信号,时钟信号可在实验箱现场调整,频率可选;135引脚连接着输出LED12;65、64脚分别对应输入按键KEY3、KEY4。(3)编译:选取窗口菜单File→Project→Save&Compile,即可对输入的原理图或VHDL程序进行编译。(4)烧写:选取窗口菜单Programmer,在弹出的对话框内选择Configure进行烧写。烧入烧写文件后,EDA实验箱即开始工作。2)观察实验结果按表6-5所示,按下输入键KEY1~KEY5,观察输出LED的结果。表6-5异步复位/置位功能的JK触发器的实验验证结果输入输出输入KEY4prn输入KEY3clr输入KEY1、KEY2J、KLED12QLED11Qb01111111011111XXX1、10、00、11、0亮灭不变闪烁不变灭亮灭亮不变闪烁不变亮灭3)实验结果解释如表6-5所示,用“1”代表按键按入,则对应的LED灯亮,“0”代表按键恢复,则对应的LED灯灭。由表6-5可见,输出的逻辑结果与JK触发器的逻辑功能一致,所以设计正确。6.3带异步复位/置位端的使能T触发器

JK触发器的两个输入端均为高电平时,输出将随时钟的有效边沿作翻转;当JK触发器的两个输入端均为低电平时,输出维持不变。这一功能可用T触发器代替,T触发器的数据输入端T相当于将JK触发器的两个输入引脚连接在一起。一个带异步复位/置位端的同步使能T触发器的脚位有:数据输入端:T;脉冲输入端:clk;清除输入端:clrn;默认控制端:prn;使能输入端:ena;输出端:Q。表6-6给出了异步复位/置位的同步使能T触发的输入/输出逻辑关系。从表中可以看出,当预置位端prn或复位端clrn二者其一有效时(低电平),无论时钟和T端的电平情况如何,输出都为高电平(或低电平)。当二者同为低电平,即预置位端与复位端同时有效时,输出不定,用“X”表示。当预置位端prn(或复位端clrn)均无效时,随着上升沿的到来,若T输入端为“0”,则输出维持不变,反之作取反操作。其特征方程为

Qn+1=TQn+TQn表6-6异步复位/置位的同步使能T触发器逻辑关系Qn输入输出prnclrnclkTQn+10101110011XXX↑(上升沿)↑XXX0110XQn1.原理图输入法(1)建立新文件:选取窗口菜单File→New,出现对话框,选择GraphicEditorfile选项,单击OK按钮,进入图形编辑画面。(2)保存:选取窗口菜单File→Save,出现对话框,键入文件名tffe_g.gdf,单击OK按钮。(3)指定项目名称,要求与文件名相同:选取窗口菜单File→Project→Name,键入文件名tffe_g,单击OK按钮。(4)确定对象的输入位置:在图形窗口内单击鼠标左键。(5)引入元件TFFE:选取窗口菜单Symbol→EnterSymbol,在\Maxplus2\max2lib\prim处双击,在SymbolFile菜单中选取DFFE或直接键入TFFE,单击OK按钮。(或者双击空白区域也可进入EnterSymbol对话框。)(6)引入输入和输出脚:按步骤(5)选出输入脚INPUT和输出脚OUTPUT。(7)更改输入和输出脚的脚位名称:在PIN_NAME处双击鼠标左键,进行更名,输入脚为T、clk、ena、prn、clrn,输出脚为Q。(8)连接:将各引脚做相应连接,如图6-8所示。(9)选择实际编程器件型号:选取窗口菜单Assign→Device,出现对话框,选择ACEX1K系列的EP1K30TC144-1。图6-8T触发器的引脚连接(10)保存并查错:选取窗口菜单File→Project→Save&Check,即可针对电路文件进行检查。(11)修改错误:针对Massage-Compiler窗口所提供的信息修改电路文件,直到没有错误为止。(12)保存并编译:选取窗口菜单File→Project→Save&Compile,即可进行编译,产生tffe_g.sof烧写文件。(14)创建电路包含文件:选取窗口菜单File→CreateDefaultIncludeFile,产生用来代表现在所设计电路的dff_g.inc文件,供其他VHDL编译时使用。(15)时间分析:选取窗口菜单Utilities→AnalyzeTiming,再选取窗口菜单Analysis→DelayMatrix。

2.VHDL设计(1)建立新文件:选取窗口菜单File→New,出现对话框,选TextEditorfile选项,单击OK按钮,进入文本编辑画面。(2)保存:选取窗口菜单File→Save,出现对话框,键入文件名tffe_v.vhd,单击OK按钮。(3)指定项目名称,要求与文件名相同:选取窗口菜单File→Project→Name,键入文件名tffe_v,单击OK按钮。(4)选择实际编程器件型号:选取窗口菜单Assign→Device,出现对话框,选择ACEX1K系列的EP1K30TC144-1。(5)输入VHDL源程序:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;LIBRARYALTERA;USEALTERA.MAXPLUS2.ALL;

ENTITYtffe_vIS PORT(t,clk,clrn,prn,ena :IN STD_LOGIC;

q:OUTSTD_LOGIC);ENDtffe_v;ARCHITECTUREaOFtffe_vISBEGINrod1:TFFEPORTMAP(t,clk,clrn,prn,ena,q);ENDa;(6)保存并查错:选取窗口菜单File→Project→Save&Check,即可针对电路文件保存并进行检查。(7)修改错误:针对Massage-Compiler窗口所提供的信息修改电路文件,直到没有错误为止。(8)保存并编译:选取窗口菜单File→Project→Save&Compile,即可进行编译,产生tffe_v.sof烧写文件。(9)仿真:进行软件仿真,观察仿真波形是否符合逻辑设计要求。(10)创建电路符号:选取窗口菜单File→CreateDefaultSymbol,可以产生tffe_v.sym文件,代表现在所设计的电路符号。选取File→EditSymbol,进入SymbolEdit进行编辑,带有异步复位/置位端的T触发器的电路符号如图6-9所示。此步也可按工具栏按钮,进入如图6-10所示界面,双击其中的.sym图标,也可进入EditSymbol进行符号编辑。(11)创建电路包含文件:选取窗口菜单File→CreateDefaultIncludeFile,可以产生代表现在设计的电路函数类型tffe_v.inc文件,供其他VHDL编译时使用。(12)时间分析:选取窗口菜单Utilities→AnalyzeTiming,再选取窗口菜单Analysis→DelayMatrix,产生时间分析结果。

图6-9带有异步复位/置位端的T触发器的电路符号图6-10体系显示窗口3.软件仿真(1)进入波形编辑窗口:选取窗口菜单MAX+plusⅡ→WaveformEditor,进入仿真波形编辑器。(2)引入输入和输出脚:选取窗口菜单Node→EnterNodesfromSNF,出现对话框,单击list按钮,选择AvailableNodes中的输入与输出,按“=>”键将T、clk、Q移至右边(对异步复位/置位端同步使能T触发器还需将prn、clrn、ena等也移至右边),单击OK按钮进行波形编辑。(3)设定时钟的周期:选取窗口菜单Options→GrideSize,出现对话框,设定GrideSize为35ns,单击OK按钮。(4)设定初始值并保存:设定初始值,选取窗口菜单File→Save,出现对话框,单击OK按钮。(5)仿真:选取窗口菜单MAX+plusⅡ→Simulator,出现TimingSimulation对话框,按Start按钮,出现Simulator对话框,单击“确定”按钮。(6)观察输入结果的关系正确性:单击按钮,可以在时序图中写字,并验证仿真结果的正确性,如图6-11所示。图6-11带异步复位/置位功能的T触发器的仿真结果(7)波形分析:观察仿真结果,在使能端ena=“1”且prn、clrn均为高电平(无效)期间,若T=“1”,则随着每个时钟上升沿的到来,Q端的输出在不断地翻转;而T=“0”时则输出维持不变,这符合T触发器的特征方程。当清零端clrn有效时,不等时钟的有效边沿到来,输出立刻被无条件地复位为“0”。同样,当预置位端prn有效时,不等时钟的有效边沿到来,输出立刻被无条件地置位。图中未列出预置位信号prn与复位信号同时有效时的输出情况,读者可尝试进行仿真并观察输出的逻辑情况。4.硬件验证1)下载实验验证(1)选择器件:打开MAX+plusⅡ,选取窗口菜单Assign→Device,出现对话框,选择ACEX1K系列的EP1K30TC144-1。(2)锁定引脚:选取窗口菜单Assign→Pin/Location/Chip,出现对话框,在NodeName中分别键入引脚名称T、clk、Q,clrn、prn、ena,在Pin中分别键入引脚编号68、55、135、67、65、64。其中,引脚68对应输入按键KEY1,其对应的信号灯为LED_KEY1;引脚55对应时钟信号,时钟信号可对实验箱现场调整,频率从1Hz~25.6MHz可选;135引脚连接着输出LED12;67、65、64脚分别对应输入按键KEY2、KEY3、KEY4。(3)编译:选取窗口菜单File→Project→Save&Compile,即可对输入的原理图或VHDL程序进行编译。(4)烧写:选取窗口菜单Programmer,在弹出的对话框内选择Configure进行烧写。烧入烧写文件后,EDA实验箱即开始工作。2)观察实验结果按表6-7所示,按下输入键KEY1~KEY4,观察输出LED的结果。

表6-7实体tffe_v仿真实验验证输入输出输入KEY3prn输入KEY2clrn输入KEY4ena输入KEY1TLED12Q0111110111XX011XXX10亮灭不变闪烁不变3)实验结果解释如表6-7所示,用“1”代表按键按下,则对应的LED灯亮,“0”代表按键弹起恢复,则对应的LED灯灭。由表格可见,输出的逻辑结果与T触发器的逻辑功能一致。6.4基本计数器的设计数字系统经常需要对脉冲的个数进行计数,以实现数字测量、状态控制和数据运算等,计数器就是完成这一功能的逻辑器件。计数器是数字系统的一种基本部件,是典型的时序电路。计数器的应用十分广泛,常用于数/模转换、计时、频率测量等。计数器按照工作原理和使用情况分可分为很多种类,如最基本的计数器、带清零端的(包括同步清零和异步清零)计数器、能并行预加载初始计数值的计数器、各种进制的计数器(如十二进制、六十进制)等。基本计数器只能实现单一递增计数或递减计数功能,没有其他任何控制端。下面以递增计数器为例介绍其设计方法。递增计数器需要的基本引脚是:时钟输入端:clk;

计数输出端:Q。1.原理图设计(1)建立新文件:选取窗口菜单File→New,出现对话框,选GraphicEditorfile选项,单击OK按钮,进入图形编辑画面。(2)保存:选取窗口菜单File→Save,出现对话框,键入文件名counter.gdf,单击OK按钮。(3)指定项目名称,要求与文件名相同:选取窗口菜单File→Project→Name,键入文件名counter,单击OK按钮。(4)确定对象的输入位置:在图形窗口内单击鼠标左键。(5)引入元件LPM_FF:选取窗口菜单Symbol→EnterSymbol,在\Maxplus2\max2lib\mega_lpm处双击鼠标左键,在SymbolFile菜单中选取LPM_COUNTER或直接键入LPM_COUNTER,单击OK按钮。(或者双击空白区域也可进入EnterSymbol对话框。)(6)引入并更改输入和输出脚脚位名称:按步骤(5)选出输入脚INPUT和输出脚OUTPUT后,在PIN_NAME处双击,进行更名,输入脚为clk,输出脚为Q[7..0]。(7)设置数据宽度:双击LPM_COUNTER右上方的参数设置框,进入如图6-12所示的对话框,设置数据宽度。图6-12利用LPM参数设置框设置数据宽度(8)连接:连接各相应引脚,如图6-13所示。(9)选择实际编程器件型号:选取窗口菜单Assign→Device,出现对话框,选择ACEX1K系列的EP1K30TC144-1。(10)保存并查错:选取窗口菜单File→Project→Save&Check,即可针对电路文件进行检查。(11)修改错误:针对Massage-Compiler窗口所提供的信息修改电路文件,直到没有错误为止。图6-13计数器原理图(12)保存并编译:选取窗口菜单File→Project→Save&Compile,即可进行编译,产生counter.sof烧写文件。(13)创建电路包含文件:选取窗口菜单File→CreateDefaultIncludeFile,产生用来代表现在所设计电路的dff_g.inc文件,供其他VHDL编译时使用。(14)时间分析:选取窗口菜单Utilities→AnalyzeTiming,再选取窗口菜单Analysis→DelayMatrix,可以产生时间分析结果。2.VHDL设计(1)建立新文件:选取窗口菜单File→New,出现对话框,选TextEditorfile选项,单击OK按钮,进入文本编辑画面。(2)保存:选取窗口菜单File→Save,出现对话框,键入文件名counterbasic.vhd,单击OK按钮。(3)指定项目名称,要求与文件名相同:选取窗口菜单File→Project→Name,键入文件名counterbasic,单击OK按钮。(4)选择实际编程器件型号:选取窗口菜单Assign→Device,出现对话框,选择ACEX1K系列的EP1K30TC144-1。(5)输入VHDL源程序:USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYcountbasicISPORT(clk:INSTD_LOGIC; q:BUFFERSTD_LOGIC_VECTOR(7DOWNTO0));ENDcountbasic;ARCHITECTUREaOFcounbasictISBEGINPROCESS(clk) VARIABLEqtmp:STD_LOGIC_VECTOR(7DOWNTO0); BEGIN IFclk'eventANDclk='1'THEN qtmp:=qtmp+1;ENDIF; q<=qtmp;ENDPROCESS;ENDa;(6)保存并查错:选取窗口菜单File→Project→Save&Check,即可对电路文件保存并进行检查。(7)修改错误:针对Massage-Compiler窗口所提供的信息修改电路文件,直到没有错误为止。(8)保存并编译:选取窗口菜单File→Project→Save&Compile,即可进行编译,产生countbasic.sof烧写文件。(9)仿真:进行软件仿真,观察仿真波形是否符合逻辑设计要求。(10)创建电路符号:选取窗口菜单File→CreateDefaultSymbol,可以产生countbasic.sym文件,代表现在所设计的电路符号。选取File→EditSymbol,进入SymbolEdit进行编辑。此步也可通过按工具栏上的按钮来实现。(11)创建电路包含文件:选取窗口菜单File→CreateDefaultIncludeFile,产生用来代表现在所设计电路的countbasic.inc文件,供其他VHDL编译时使用。(12)时间分析:选取窗口菜单Utilities→AnalyzeTiming,再选取窗口菜单Analysis→DelayMatrix,产生时间分析结果。3.软件仿真以对VHDL程序进行仿真为例。(1)进入波形编辑窗口:选取窗口菜单MAX+plusⅡ→WaveformEditor,进入仿真波形编辑器。(2)引入输入和输出脚:选取窗口菜单Node→EnterNodesfromSNF,出现对话框,单击list按钮,选择AvailableNodes中的输入与输出,按“=>”键将clk、Q移至右边,单击OK按钮进行波形编辑。(3)设定时钟的周期:选取窗口菜单Options→GrideSize,出现对话框,设定GrideSize为35ns,单击OK按钮。(4)设定初始值并保存:设定初始值,选取窗口菜单File→Save,出现对话框,单击OK按钮。(5)仿真:选取窗口菜单MAX+plusⅡ→Simulator,出现TimingSimulation对话框,单击Start按钮,出现Simulator对话框,单击“确定”按钮。图6-14基本计数器的仿真结果(6)观察输入结果的正确性:单击按钮,可以在时序图中写字,并验证仿真结果的正确性。仿真结果如图6-14所示。(7)波形分析:从仿真波形可以看出,每来一个时钟的上升沿,输出数据Q就累加一次,相当于对时钟进行计数,符合计数器的逻辑功能。因此该VHDL设计能实现预期的计数器的有关逻辑功能。4.硬件验证以对VHDL程序进行硬件验证为例。1)下载实验验证(1)选择器件:打开MAX+pulsⅡ,选取窗口菜单Assign→Device,出现对话框,选择ACEX1K系列的EP1K30TC144-1。(2)引脚锁定:选取窗口菜单Assign→Pin/Location/Chip,出现对话框,在NodeName中分别键入引脚名称。其中,clk引脚编号为55;Q7~Q0的引脚编号为133、135、136、137、138、140、8、9,这些引脚编号分别对应输出LED12~LED5。(3)编译:选取窗口菜单File→Project→Save&Compile,即可对输入的VHDL程序进行编译。(4)烧写:选取窗口菜单Programmer,在弹出的对话框内选择Configure进行烧写。烧入烧写文件后,EDA实验箱即开始工作。2)观察实验结果将时钟设为1Hz,VHDL程序被载入芯片后,8个LED灯的亮灭即发生变化,且变化规律是二进制递增的规律。当8个输出LED灯全亮后,又恢复到全灭,然后以同样的二进制递增的规律变化。3)实验结果解释12个输出LED与计数器的输出Q端相连,LED灯的亮灭情况符合二进制数据递增的规律,表明计数器确实在正常工作。当8个输出LED灯全亮时,表示计数器已计到“11111111”,下一个时钟在此基础上再加1,根据二进制规律,结果应为“100000000”,使LED12~LED5对应“100000000”的低8位,所以输出LED恢复到全灭,表明计数器工作正常。6.5同步清零的计数器同步清零计数器只是在基本计数器的基础上增加了一个同步清零控制端,本例设计一个同步清零的递增计数器,它只需以下基本引脚:时钟输入端:clk;

计数输出端:Q;

同步清零端:clr。1.原理图设计(1)建立新文件:选取窗口菜单File→New,出现对话框,选GraphicEditorfile选项,单击OK按钮,进入图形编辑画面。(2)保存:选取窗口菜单File→Save,出现对话框,键入文件名counter2.gdf,单击OK按钮。(3)指定项目名称,要求与文件名相同:选取窗口菜单File→Project→Name,键入文件名counter2,单击OK按钮。(4)确定对象的输入位置:在图形窗口内单击鼠标左键。(5)引入元件LPM_FF:选取窗口菜单Symbol→EnterSymbol,在\Maxplus2\max2lib\mega_lpm处双击鼠标左键,在SymbolFile菜单中选取LPM_COUNTER或直接键入LPM_COUNTER,单击OK按钮。(或者双击空白区域也可进入EnterSymbol对话框。)(6)引入输入和输出脚:按步骤(5)选出输入脚INPUT和输出脚OUTPUT。(7)更改输入和输出脚的脚位名称:在PIN_NAME处双击,进行更名,输入脚为clk,输出脚为Q[7..0],并且双击LPM_COUNTER右上方的参数设置框,进行参数设置。(8)连接:连接各相应引脚,如图6-15所示。

图6-15同步清零计数器的电路符号(9)选择实际编程器件型号:选取窗口菜单Assign→Device,出现对话框,选择ACEX1K系列的EP1K30TC144-1。(10)保存并查错:选取窗口菜单File→Project→Save&Check,即可对电路文件进行检查。(11)修改错误:针对Massage-Compiler窗口所提供的信息修改电路文件,直到没有错误为止。(12)保存并编译:选取窗口菜单File→Project→Save&Compile,即可进行编译,产生counter2.sof烧写文件。(13)仿真:进行软件仿真,观察仿真波形,原理图设计时的仿真波形如图6-16

温馨提示

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

评论

0/150

提交评论