版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章EDA技术及应用精讲总结复习43.8基本逻辑电路1、阅读如下VHDL程序,回答如下问题:课前测试题答案:A答案:B。答案:B。答案:A。答案:D。内容提要译码器和编码器的设计:电路设计思路;VHDL程序设计;设计总结扩展。3.8.1基本逻辑电路(1)一、电路设计思路1.译码器和编码器,都是用来将一种信息代码转换成另一种信息代码的电路,只是功能恰好相反。译码器,是把输入的特定数码的含义“翻译”出来,给出对应的一系列输出信号的电路。编码器,将选定的一系列二值代码,赋予每个代码以固定的含义的电路。对于二进制编码器,就是将2N个分离的信息代码,以N个二进制码来表示。2.译码器和编码器的设计,我们可根据给定的条件,使用IF条件语句或CASE选择语句等顺序语句进行转换,也可使用条件信号赋值语句或选择信号赋值语句等并行语句进行转换。还可使用预先给定一个初始的信息,再进行各种变换。二、VHDL程序设计【例题1】3线-8线译码器(高电平有效)。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYDECODERISPORT(A,B,C:INSTD_LOGIC;Y:OUTBIT_VECTOR(7DOWNTO0));ENDENTITYDECODER;--使用SLL逻辑运算符ARCHITECTUREART1OFDECODERISSIGNALSR:STD_LOGIC_VECTOR(2DOWNTO0);BEGINSR<=C&B&A;Y<="00000001"SLL(CONV_INTEGER(SR));ENDARCHITECTUREART1;--将位矢量"00000001"左移CONV_INTEGER(SR)位、右边跟进的位补零后的结果赋值给Y将标准逻辑位矢量类型的数据强制转换成整数类型的数据Y<="00000001"SLL(CONV_INTEGER(SR))当SR="000"时CONV_INTEGER(SR)=0"00000001"SLL0="00000001"当SR="001"时CONV_INTEGER(SR)=1"00000001"SLL1="00000010"…当SR="111"时CONV_INTEGER(SR)=7"00000001"SLL7="10000000"本设计方法的优点:抓住了译码器的变化规律,也就是每次有1位与其他位不同,因此我们给定一个初始译码值,通过逻辑左移的方式实现译码,每次不同值的位移1位,同时对移空的位补零。--使用PROCESS语句ARCHITECTUREART2OFDECODERISSIGNALSR:STD_LOGIC_VECTOR(2DOWNTO0);BEGINSR<=C&B&A;PROCESS(SR)ISBEGINY<=(OTHERS=>'0');Y(CONV_INTEGER(SR))<='1';ENDPROCESS;ENDARCHITECTUREART2;--C、B、A并置后的结果赋值给信号SR--将Y的非指定位(OTHERS)都赋值为'0'--将由SR所确定的Y的指定位赋值为'1'--使用WHEN-ELSE语句ARCHITECTUREART3OFDECODERISSIGNALSR:STD_LOGIC_VECTOR(2DOWNTO0);BEGINSR<=C&B&A;Y(0)<='1'WHENSR="000"ELSE'0';Y(1)<='1'WHENSR="001"ELSE'0';Y(2)<='1'WHENSR="010"ELSE'0';Y(3)<='1'WHENSR="011"ELSE'0';Y(4)<='1'WHENSR="100"ELSE'0';Y(5)<='1'WHENSR="101"ELSE'0';Y(6)<='1'WHENSR="110"ELSE'0';Y(7)<='1'WHENSR="111"ELSE'0';ENDARCHITECTUREART3;条件并行信号赋值语句当发现赋值条件成立(TURE)或不成立时,就将对应的值赋给赋值目标。以此类推--使用WHEN-ELSE语句ARCHITECTUREART3OFDECODERISSIGNALSR:STD_LOGIC_VECTOR(2DOWNTO0);BEGINSR<=C&B&A;Y(0)<='1'WHENSR="000"ELSE'0';Y(1)<='1'WHENSR="001"ELSE'0';Y(2)<='1'WHENSR="010"ELSE'0';Y(3)<='1'WHENSR="011"ELSE'0';Y(4)<='1'WHENSR="100"ELSE'0';Y(5)<='1'WHENSR="101"ELSE'0';Y(6)<='1'WHENSR="110"ELSE'0';Y(7)<='1'WHENSR="111"ELSE'0';ENDARCHITECTUREART3;条件不成立8个语句的并行执行不会出现Y的多个分量同时为1。条件成立--使用CASE-WHEN语句ARCHITECTUREART4OFDECODERISSIGNALSR:STD_LOGIC_VECTOR(2DOWNTO0);BEGINSR<=C&B&A;PROCESS(SR)ISBEGINCASESRISWHEN"000"=>Y<="00000001";WHEN"001"=>Y<="00000010";WHEN"010"=>Y<="00000100";WHEN"011"=>Y<="00001000";WHEN"100"=>Y<="00010000";WHEN"101"=>Y<="00100000";WHEN"110"=>Y<="01000000";WHEN"111"=>Y<="10000000";WHENOTHERS=>Y<="00000000";ENDCASE;ENDPROCESS;ENDARCHITECTUREART4;CASE选择语句首先计算表达式的值,然后根据条件句中与之相同的选择值,执行相应的顺序语句【例题2】设计一个8线-3线优先编码器,其中输入信号为A、B、C、D、E、F、G和H,输出信号为Y0、Y1和Y2。输入信号中A的优先级别最低,依次类推,H的优先级别最高。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYENCODERISPORT(A,B,C,D,E,F,G,H:INSTD_LOGIC;Y0,Y1,Y2:OUTSTD_LOGIC);ENDENTITYENCODER;--使用条件赋值语句ARCHITECTUREART1OFENCODERISSIGNALSY:STD_LOGIC_VECTOR(2DOWNTO0);BEGINSY(2DOWNTO0)<="111"WHENH='1'ELSE"110"WHENG='1'ELSE"101"WHENF='1'ELSE"100"WHENE='1'ELSE"011"WHEND='1'ELSE"010"WHENC='1'ELSE"001"WHENB='1'ELSE"000"WHENA='1'ELSE"XXX";Y0<=SY(0);Y1<=SY(1);Y2<=SY(2);ENDARCHITECTUREART1;根据给出的信号赋值条件,将对应的值赋给赋值目标以此类推由于条件测试的顺序性,第一句具有最高赋值优先级,第二句其次,以此类推。--使用LOOP循环语句ARCHITECTUREART2OFENCODERISBEGINPROCESS(A,B,C,D,E,F,G,H)ISVARIABLEVSR:STD_LOGIC_VECTOR(7DOWNTO0);VARIABLEI:INTEGER;BEGINVSR:=(H,G,F,E,D,C,B,A);I:=7;WHILEI>=0ANDVSR(I)/='1'LOOPI:=I-1;ENDLOOP;(Y2,Y1,Y0)<=CONV_STD_LOGIC_VECTOR(I,3);ENDPROCESS;ENDARCHITECTUREART2;优先级最高优先级最低寻找第1个为1的位的序号--使用IF条件语句ARCHITECTUREART3OFENCODERISSIGNALSY:STD_LOGIC_VECTOR(2DOWNTO0);BEGINPROCESS(H,G,F,E,D,C,B,A)ISBEGINIFH='1'THENSY<="111";ELSIFG='1'THENSY<="110";ELSIFF='1'THENSY<="101";ELSIFE='1'THENSY<="100";ELSIFD='1'THENSY<="011";ELSIFC='1'THENSY<="010";ELSIFB='1'THENSY<="001";ELSIFA='1'THENSY<="000";ELSESY<="XXX";ENDIF;ENDPROCESS;Y0<=SY(0);Y1<=SY(1);Y2<=SY(2);ENDARCHITECTUREART3;描述编码器功能根据优先级从高到低,依次判断是否等于1,若遇到某一位等于1,则进行相应的编码。三、设计总结扩展1.译码器译码器的种类控制译码显示驱动译码地址译码指令译码--利用译码后有1根控制线与其它控制线均不同,来实现特定的控制--根据一个特定的编码,转成该编码所需要表示的显示驱动信息--根据给定的地址,找到特定的存储单元,再执行特定的操作--根据给定的指令操作代码,转换成控制该操作功能部件的特定控制代码2.编码器,需先根据输入信号的位数,确定编码器的输出位数,然后,根据需要进行相应的编码。对于优先编码器,主要用于控制,只要出现了某个优先级高的信号,不管其它信号是否出现,这时就要输出一个特定的编码,也就是根据该编码信号还原译码后,要执行1个特定的操作。3.其实编码器也可看成是压缩电路,译码器也可看成解压缩电路。传送数据前,先用编码器压缩数据后再传送出去,接受端则由译码器将数据解压缩,还原原来的内容。内容提要选择器和驱动电路的设计:电路设计思路;VHDL程序设计;设计总结扩展。3.8.2基本逻辑电路(2)I、选择器一、电路设计思路选择器常用于多路信号的切换或多路数据的选择。因此选择器的设计,主要是根据选择控制信号的不同,在多路信号或多路数据中,选择其中的1路信号或1路数据输出。具体使用的VHDL语句,常用的有IF条件语句和CASE选择语句等。二、VHDL程序设计【例题1】4选1信号选择器。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;--库和程序包的使用说明ENTITYMUX41ISPORT(X:INSTD_LOGIC_VECTOR(3DOWNTO0);A,B:INSTD_LOGIC;Y:OUTSTD_LOGIC);ENDENTITYMUX41;ARCHITECTUREARTOFMUX41ISSIGNALSEL:STD_LOGIC_VECTOR(1DOWNTO0);BEGINSEL<=B&A;
PROCESS(X,SEL)ISBEGINIF(SEL="00")THENY<=X(0);ELSIF(SEL="01")THENY<=X(1);ELSIF(SEL="10")THENY<=X(2);ELSEY<=X(3);ENDIF;ENDPROCESS;ENDARCHITECTUREART;--用于保存2个控制信号的并置结果--并置操作符“&”,A、B通过SEL<=B&A,就合成为一个2位的信号SEL【例题2】4选1数据选择器。--MUXB41.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYMUXB41ISPORT(DATA0,DATA1:INSTD_LOGIC_VECTOR(3DOWNTO0);DATA2,DATA3:INSTD_LOGIC_VECTOR(3DOWNTO0);A,B:INSTD_LOGIC;Y:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDENTITYMUXB41;ARCHITECTUREARTOFMUXB41ISSIGNALSEL:STD_LOGIC_VECTOR(1DOWNTO0);BEGINSEL<=B&A;
PROCESS(SEL)
BEGINCASESELISWHEN"00"=>Y<=DATA0;WHEN"01"=>Y<=DATA1;WHEN"10"=>Y<=DATA2;WHEN"11"=>Y<=DATA3;WHENOTHERS=>Y<=NULL;ENDCASE;ENDPROCESS;ENDARCHITECTUREART;--用于保存2个控制信号的并置结果--通过并置操作符“&”将2个控制信号A、B的并置结果保存在信号SEL中含有CASE选择语句的进程三、设计总结扩展1.选择器常用于多路信号的切换或多路数据的选择。其中用于多路信号的切换的选择器,其输入和输出均是1位,而用于多路数据切换的选择器,其输入和输出都是N位。
3.2位选择控制信号可选择4个信号/数据的输出,那么如果我们要控制16个信号/数据的输出的选择,需要几个选择控制信号呢?II、驱动电路一、电路设计思路1.三态门和总线缓冲器是驱动电路经常用到的器件。三态门电路的输出,包括高电平、低电平、高阻态三种。在微型计算机的总线驱动中经常要用单向总线缓冲器,它通常由多个三态门组成,用来驱动地址总线和控制总线。双向总线缓冲器用于数据总线的驱动和缓冲,典型的双向总线缓冲器有两个数据输入/输出端A和B、一个方向控制端DIR和一个选通端EN。EN=0时双向缓冲器选通。若DIR=0,则A=B;反之则B=A。2.对于三态门和总线缓冲器的设计,主要是根据控制信号的不同,输出对应的值。因此可使用IF条件语句和CASE选择语句描述。二、VHDL程序设计【例题1】设计1个三态门电路。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYTRISTATEISPORT(EN,DIN:INSTD_LOGIC;DOUT:OUTSTD_LOGIC);ENDENTITYTRISTATE;ARCHITECTUREARTOFTRISTATEISBEGINPROCESS(EN,DIN)ISBEGINIFEN='1'THENDOUT<=DIN;ELSEDOUT<='Z';ENDIF;ENDPROCESS;ENDARCHITECTUREART;包含IF条件语句的进程语句【例题2】8位的单向总线驱动器。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYTRI_BUFSISPORT(DIN:INSTD_LOGIC_VECTOR(7DOWNTO0);EN:INSTD_LOGIC;DOUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDENTITYTRI_BUFS;图1单向总线缓冲器ARCHITECTUREARTOFTRI_BUFSISBEGINPROCESS(EN,DIN)ISBEGINIF(EN='1')THENDOUT<=DIN;ELSEDOUT<="ZZZZZZZZ";ENDIF;ENDPROCESS;ENDARCHITECTUREART;包含IF条件语句的进程语句【例题3】设计如图所示的双向总线缓冲器。图2双向总线缓冲器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYBIDIRISPORT(A,B:INOUTSTD_LOGIC_VECTOR(7DOWNTO0);EN,DIR:INSTD_LOGIC);--端口定义ENDENTITYBIDIR;ARCHITECTUREARTOFBIDIRISSIGNALAOUT,BOUT:STD_LOGIC_VECTOR(7DOWNTO0);BEGINPROCESS(A,EN,DIR)IS
BEGINIF((EN='0')AND(DIR='1'))THENBOUT<=A;ELSEBOUT<="ZZZZZZZZ";ENDIF;
B<=BOUT;
ENDPROCESS;PROCESS(B,EN,DIR)IS
BEGINIF((EN='0')AND(DIR='0'))THENAOUT<=B; ELSEAOUT<="ZZZZZZZZ";ENDIF;
A<=AOUT;
ENDPROCESS;ENDARCHITECTUREART;用于处理从端口A输入,端口B输出的电路模块用于处理从端口B输入,端口A输出的电路模块在硬件设计中,对于多功能的硬件电路的设计,每一种功能,应对应1个电路模块。三、设计总结扩展1.总线缓冲器,具有多功能,通过增加控制信号,利用不同的值实现多功能。2.对于多功能硬件电路的设计,在电路内部,每一个功能具有一个相应的硬件与其对应,只是封装后对外而言具有多功能。内容提要触发器和寄存器的设计:电路设计思路;VHDL程序设计;设计总结扩展。3.8.3基本逻辑电路(3)一、电路设计思路1.触发器,就是能够存储1位二值信号的基本单元电路。触发器的基本操作,就是每当时钟信号上升沿或下降沿到来时,将保存在输入端的1位数据输出到输出端。它包括基本R-S触发器、D触发器、JK触发器、T触发器等。2.寄存器用于寄存一组二值代码,可用N个触发器组成的寄存器能储存一组N位的二值代码。寄存器的基本操作,就是每当时钟信号上升沿或下降沿到来时,将寄存在输入端的N位数据输出到输出端。4.触发器与寄存器(锁存器)的区别,就是数据的位数不一样。在实际的触发器和寄存器的设计中,根据需要,可能需要加上复位、置位、初始输入等功能。3.移位寄存器除了具有存储代码的功能以外,还具有移位功能。因此,移位寄存器不但可以用来寄存代码,还可用来实现数据的串/并转换、数值的运算以及数据处理等。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYASYNDCFQISPORT(CLK,D,PRESET,CLR:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDENTITYASYNDCFQ;二、VHDL程序设计【例题1】异步复位/置位的D触发器。图1异步复位/置位D触发器ARCHITECTUREARTOFASYNDCFQISBEGINPROCESS(CLK,PRESET,CLR)ISBEGINIF(PRESET='1')THEN --置位信号为1,则触发器被置位
Q<='1';ELSIF(CLR='1')THEN --复位信号为1,则触发器被复位
Q<='0';ELSIF(CLK'EVENTANDCLK='1')THENQ<=D;ENDIF;ENDPROCESS;ENDARCHITECTUREART;【例题2】同步复位的D触发器。图2同步复位的D触发器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;.ENTITYSYNDCFQISPORT(D,CLK,RESET:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDENTITYSYNDCFQ;ARCHITECTUREARTOFSYNDCFQISBEGINPROCESS(CLK)ISBEGINIF(CLK'EVENTANDCLK='1')THENIF(RESET='0')THEN Q<='0'; --时钟边沿到来且复位信号有效,触发器被复位
ELSEQ<=D;ENDIF;ENDIF;ENDPROCESS;ENDARCHITECTUREART;【例题3】JK触发器。图3JK触发器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYJKCFQISPORT(J,K,CLK:INSTD_LOGIC;Q,QB:BUFFERSTD_LOGIC);ENDENTITYJKCFQ;ARCHITECTUREARTOFJKCFQISSIGNALQ_S,QB_S:STD_LOGIC;BEGINPROCESS(CLK,J,K)ISBEGINIF(CLK'EVENTANDCLK='1')THENIF(J='0'ANDK='1')THENQ_S<='0';QB_S<='1';ELSIF(J='1'ANDK='0')THENQ_S<='1';QB_S<='0';ELSIF(J='1'ANDK='1')THENQ_S<=NOTQ_S;QB_S<=NOTQB_S;ENDIF;ENDIF;Q<=Q_S;QB<=QB_S;ENDPROCESS;ENDARCHITECTUREART;--信号Q_S,QB_S是用于保存触发器信号变化过程的中间结果--实现两个输出的翻转--将保存在信号中的中间结果,传递到输出端口【例题4】8位数据寄存(锁存)器。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYREGISPORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC_VECTOR(7DOWNTO0);Q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDENTITYREG;图48位数据寄存器ARCHITECTUREARTOFREGISBEGINPROCESS(CLK,D)ISBEGINIF(CLK'EVENTANDCLK='1')THENQ<=D;ENDIF;ENDPROCESS;ENDARCHITECTUREART;【例题5】具有左移或右移一位、并行输入和同步复位功能的8位移位寄存器。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSFTREGISPORT(CLK,RESET:INSTD_LOGIC;LSFT,RSFT:INSTD_LOGIC;
DATA:INSTD_LOGIC_VECTOR(7DOWNTO0);MODE:INSTD_LOGIC_VECTOR(1DOWNTO0);
QOUT:BUFFERSTD_LOGIC_VECTOR(7DOWNTO0));ENDENTITYSFTREG;图5移位寄存器--左移和右移使能--模式控制ARCHITECTUREARTOFSFTREGISBEGINPROCESSISBEGINWAITUNTIL(RISING_EDGE(CLK));IF(RESET='1')THENQOUT<="00000000";ELSE
CASEMODEISWHEN"01"=>QOUT<=RSFT&QOUT(7DOWNTO1);
WHEN"10"=>QOUT<=QOUT(6DOWNTO0)&LSFT;
WHEN"11"=>QOUT<=DATA;
WHENOTHERS=>NULL;ENDCASE;ENDIF;ENDPROCESS;ENDARCHITECTUREART;--同步复位功能的实现--右移一位--左移一位--并行输入三、设计总结与扩展1.触发器和寄存器(锁存器),都是具有存储功能的电路,设计的基本方法是相同的。触发器与寄存器(锁存器)的区别,就是数据的位数不一样,触发器是1位,寄存器是N位。2.在触发器和寄存器(锁存器)的实际设计中,除了具备基本的寄存功能外,根据需要,可能需要加上复位、置位、初始输入、数据传输、移位等功能。3.触发器和寄存器(锁存器)的设计的基本功能,就是使用进程来描述,在进程内部,主要是使用IF条件语句和CASE选择语句来描述。如果满足某个条件,则执行相应的操作。内容提要计数器电路的设计:电路设计思路;VHDL程序设计;设计总结扩展。3.8.4基本逻辑电路(4)一、电路设计思路1.计数器是在数字系统中使用最多的时序电路,它不仅能用于对时钟脉冲计数,还可以用于定时、分频、产生节拍脉冲和脉冲序列以及进行数字运算等。2.计数器的设计,其基本操作包括2个:一个是计数操作;一个是进位控制。根据需要可增加复位、置位、赋初值等操作。3.计数操作和进位控制,都可以使用进程来实现。其中计数又分为正常计数和边界处理,正常计数是进行加1操作或加N操作;边界处理则进行清零。二、VHDL程序设计【例题1】带时钟使能的十进制同步计数器。图1十进制同步计数器--有时钟使能的十进制同步计数器CNT10.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYCNT10ISPORT(CLK:INSTD_LOGIC;
CLR:INSTD_LOGIC;
ENA:INSTD_LOGIC;
CQ:OUTINTEGERRANGE0TO15;
CO:OUTSTD_LOGIC); ENDENTITYCNT10;--计数时钟信号--清零信号--计数使能信号--4位计数结果输出--计数进位ARCHITECTUREARTOFCNT10ISSIGNALCQI:INTEGERRANGE0TO15;BEGINPROCESS(CLK,CLR,ENA)IS
BEGINIFCLR='1'THENCQI<=0;
ELSIFCLK'EVENTANDCLK='1'THENIFENA='1'THENIFCQI=9THENCQI<=0;
ELSECQI<=CQI+1;ENDIF;ENDIF;ENDIF;ENDPROCESS;--用于保存计数过程的中间结果计数控制进程--计数器异步清零--等于9,则计数器清零PROCESS(CLK,CQI)IS
BEGINIFCLK'EVENTANDCLK='1' THEN
IFCQI=9THENCO<='1';
ELSECO<='0';ENDIF;ENDIF;ENDPROCESS;CQ<=CQI;ENDARCHITECTUREART;控制进位输出并去毛刺的进程--将计数的中间结果CQI,传送到计数器的输出端口CQ--根据计数结果CQI的结果控制进位输出CO利用同步时钟去毛刺【例题2】具有异步复位、同步置数功能的8421BCD码60进制同步计数器。图260进制异步复位、同步置数计数器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT60ISPORT(EN:INSTD_LOGIC;
NRESET:INSTD_LOGIC;
LOAD:INSTD_LOGIC;
D:INSTD_LOGIC_VECTOR(7DOWNTO0);
CLK:INSTD_LOGIC;CO:OUTSTD_LOGIC;
QH:BUFFERSTD_LOGIC_VECTOR(3DOWNTO0);
QL:BUFFERSTD_LOGIC_VECTOR(3DOWNTO0)); ENDENTITYCNT60;--计数使能控制--异步复位控制--置数控制--预置数据端--进位输出--输出高4位--输出低4位ARCHITECTUREARTOFCNT60ISBEGINCO<='1'WHEN(QH="0101"ANDQL="1001"ANDEN='1')ELSE'0';
--进位输出的产生CO=‘0’也就是在进位使能EN='1'时,计数结果等于59时,进位输出端CO=‘1’,否则CO=‘0’。PROCESS(CLK,NRESET)ISBEGINIF(NRESET='0')THEN
QH<="0000";QL<="0000";ELSIF(CLK'EVENTANDCLK='1')THEN
IF(LOAD='1')THENQH<=D(7DOWNTO4);QL<=D(3DOWNTO0);ELSIF(EN='1')THEN
IF(QL=9)THENQL<="0000";IF(QH=5)THENQH<="0000";ELSE
QH<=QH+1;ENDIF;ELSE
QL<=QL+1;ENDIF;ENDIF;ENDIF; ENDPROCESS;ENDARCHITECTUREART;--计数控制进程--异步复位--同步置数--模60的实现--高位计数的实现--低位计数的实现当设计1个比较复杂的问题时,要尽可能地将设计思路用图示表示出来。三、设计总结与扩展1.对于计数范围超过4位2进制的计数器,为了简化设计和便于显示译码,一般可分解为一系列10以内进制的计数器级联而成。2.对于进位输出的控制,有时会产生毛刺,这时可增加1个同步控制时钟信号条件去毛刺。
1、阅读如下VHDL程序,回答如下问题:课后测试题答案:B答案:B。答案:A。答案:B。内容提要分频电路的设计:电路设计思路;VHDL程序设计;设计总结扩展。3.8.5基本逻辑电路(5)1、阅读如下VHDL程序(其中CLK_IN为1MHZ的方波信号),回答如下问题:课前测试题答案:A答案:A。答案:B。答案:B。一、电路设计思路1.分频电路的含义在基于EDA技术的数字电路系统设计中,分频电路应用得十分广泛,常常使用分频电路来得到数字系统中各种不同频率的控制信号。所谓分频电路,就是将一个给定的频率较高的数字输入信号,经过适当的处理后,产生一个或数个频率较低的数字输出信号。2.分频电路的本质输入信号输出信号
分频常数输入和输出信号的频率相差越大,误差越小。
3.分频电路的设计如果已知分频电路分频前后的频率,则可计算出分频常数N。
分频电路的设计方法:(1)如果分频信号对占空比没要求,则分频器可按如下方法设计:控制信号的产生:输入信号的每个上升沿到来时,进行加1操作,一直计数到N-1为止。输出的控制:根据控制信号的产生结果,输出低电平或高电平。(2)如果分频信号对占空比有要求,则分频器可按如下方法设计:控制信号的产生:输入信号的每个上升沿到来时,进行加1操作,一直计数到N-1为止。输出的控制:根据控制信号的产生结果,当控制信号小于(N-NH)时输出低电平,否则输出高电平。二、VHDL程序设计【例题1】将1kHz的方波信号变为正、负周不等的50Hz信号的非均匀分频电路。--FJYFP.VHD,将1kHz的信号变为50HzLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYFJYFPISPORT(CLK:INSTD_LOGIC; --1kHz信号输入
NEWCLK:OUTSTD_LOGIC); --50Hz信号输出ENDENTITYFJYFP;ARCHITECTUREARTOFFJYFPISSIGNALCNT:INTEGERRANGE0TO10#19#;BEGINPROCESS(CLK)IS --分频计数器,由1kHz时钟产生50Hz信号
BEGINIFCLK'EVENTANDCLK='1'THENIFCNT=10#19#THENCNT<=0; --1kHz变为50Hz,分频常数为1000/50=20ELSECNT<=CNT+1;ENDIF;ENDIF;ENDPROCESS;--定义保存计数值的信号CNT分频计数控制的进程PROCESS(CLK,CNT)IS
BEGINIFCLK'EVENTANDCLK='1'THENIFCNT=10#19#THENNEWCLK<='1';ELSENEWCLK<='0';ENDIF;ENDIF;ENDPROCESS;ENDARCHITECTUREART;分频输出信号控制的进程【例题2】将1kHz的方波信号变为正、负周相等的50Hz方波信号的均匀分频电路。--JYFP.VHD,将1kHz的信号变为50HzLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYJYFPISPORT(CLK_IN:INSTD_LOGIC;RESET:INSTD_LOGIC;CLK_OUT:OUTSTD_LOGIC);ENDENTITYJYFP;ARCHITECTUREARTOFJYFPISCONSTANTDIVIDE_PERIOD:INTEGER:=20;--将1kHz的信号变为50Hz,分频常数为1000/50=20
BEGINPROCESS(CLK_IN,RESET)ISVARIABLECNT:INTEGERRANGE0TO19;BEGINIF(RESET='1')THENCNT:=0;CLK_OUT<='0';ELSIFRISING_EDGE(CLK_IN)THENIF(CNT<(DIVIDE_PERIOD/2))THENCLK_OUT<='1';
CNT:=CNT+1;ELSIF(CNT<(DIVIDE_PERIOD-1))THENCLK_OUT<='0';
CNT:=CNT+1;ELSECNT:=0;ENDIF;ENDIF;ENDPROCESSDIVIDE_CLK;ENDARCHITECTUREART;--前20/2个周期输出为高电平--后20/2个周期输出为低电平计数值大于DIVIDE_PERIOD三、设计总结扩展1.例题1和例题2的设计异同点程序FJYFP的设计要点:(1)对占空比没有特殊的要求;(2)控制计数和控制输出的两个进程分开设计;(3)计数结果小于N-1时,输出低电平/高电平;等于N-1时,输出高电平/低电平;(4)分频常数在程序中使用具体的数据,设计缺乏通用性。图1非均匀分频器fjydiv的仿真结果图程序JYFP的设计要点:(1)对占空比有特殊的要求;(2)控制计数和控制输出的两个进程合二为一设计;
(4)分频常数在程序中使用类属说明定义为常数,设计具有通用性。图2均匀分频器jydiv的仿真结果图2.对于分频常数等于2的N次方的分频电路的设计,可采用选取一个通用计数器的某些位或某些位的设计,详见教材。图3通用分频器tydiv的仿真结果图3.假若要求设计1个奇数个数分频的电路,可采用多个信号进行逻辑运算的方式进行,可参看有关教材。内容提要FIFO存储器电路设计:电路设计思路;VHDL程序设计;设计总结扩展。3.8.6基本逻辑电路(6)一、电路设计思路半导体存储器的种类很多,从功能上可以分为只读存储器(简称ROM)和随机存储器(简称RAM)两大类。具有先进先出存储规则的读写存储器,又称为先进先出栈(FIFO)。ROM的接口图双口SRAM接口图
RAM有读和写两种操作,而且在读/写上对时间有较严格的要求。ROM在正常工作时从中读取数据,不能快速地修改或重新写入数,适用于存储固定数据的场合。FIFO是先进先出栈,作为数据缓冲器,通常其数据存放结构完全与RAM一致,只是存取方式有所不同,也就是相当于1个数据通道,先存进的数据,先读出去。图1FIFO示意图作为FIFO的设计,它包括数据的写操作、数据的写地址修改、数据写满控制,数据的读操作、数据的读地址修改、数据读空控制,因此可用6个进程来描述对应的操作。二、VHDL程序设计【例题】设计1个8×8的FIFO先进先出栈。图28×8FIFO--MYFIFO.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYMYFIFOISWIDTH:INTEGER:=8;
DEPTH:INTEGER:=8;
ADDR:INTEGER:=3); DATAIN:INSTD_LOGIC_VECTOR(WIDTH-1DOWNTO0);
DATAOUT:OUTSTD_LOGIC_VECTOR(WIDTH-1DOWNTO0);
ACLR:INSTD_LOGIC;
CLOCK:INSTD_LOGIC;
WE:INSTD_LOGIC;
RE:INSTD_LOGIC;
EF:OUTSTD_LOGIC;
FF:OUTSTD_LOGIC); ENDENTITYMYFIFO;类属说明端口定义--栈满信号--栈空信号--读使能信号--写使能信号--工作时钟信号--清零信号--输出数据--输入数据--地址位数常数--栈深常数--栈宽常数GENERIC(PORT(TYPEMEMISARRAY(DEPTH-1TO0)OFSTD_LOGIC_VECTOR(WIDTH-1DOWNTO0);WIDTH位数据DEPTH个单元图3二维数组MEM示意图ADDR[N-1:0]SIGNALRAMTMP:MEM;
SIGNALWADD:STD_LOGIC_VECTOR(ADDR-1DOWNTO0);
SIGNALRADD:STD_LOGIC_VECTOR(ADDR-1DOWNTO0);
SIGNALW,W1,R,R1:INTEGERRANGE0TO8;--内部数据寄存器--写地址信号--读地址信号WRITE_POINTER:PROCESS(ACLR,CLOCK)ISBEGINIF(ACLR='0')THENWADD<=(OTHERS=>'0');ELSIF(CLOCK'EVENTANDCLOCK='1')THENIF(WE='1')THENIF(WADD=7)THENWADD<=(OTHERS=>'0');ELSEWADD<=WADD+'1';ENDIF;ENDIF;ENDIF;W<=CONV_INTEGER(WADD);W1<=W-1;ENDPROCESSWRITE_POINTER;写指针修改进程
--写操作进程
WRITE_RAM:PROCESS(CLOCK)ISBEGINIF(CLOCK'EVENTANDCLOCK='1')THENIF(WE='1')THENRAMTMP(CONV_INTEGER(WADD))<=DATAIN;ENDIF;ENDIF;ENDPROCESSWRITE_RAM;写地址WADD转换成整数确定RAMTMP的指定单元
--读指针修改
READ_POINIER:PROCESS(ACLR,CLOCK)ISBEGINIF(ACLR='0')THENRADD<=(OTHERS=>'0');ELSIF(CLOCK'EVENTANDCLOCK='1')THENIF(RE='1')THENIF(RADD=7)THENRADD<=(OTHERS=>'0');ELSERADD<=RADD+'1';ENDIF;ENDIF;ENDIF;R<=CONV_INTEGER(RADD);R1<=R-1;ENDPROCESSREAD_POINIER;
--读操作进程
READ_RAM:PROCESS(CLOCK)ISBEGINIF(CLOCK'EVENTANDCLOCK='1')THENIF(RE='1')THENDATAOUT<=RAMTMP(CONV_INTEGER(RADD));ENDIF;ENDIF;ENDPROCESSREAD_RAM;
--产生满标志进程
FFLAG:PROCESS(ACLR,CLOCK)ISBEGINIF(ACLR='0')THENFF<='0';ELSIF(CLOCK'EVENTANDCLOCK='1')THENIF(WE='1'ANDRE='0')THENIF(W=R1)OR((WADD=CONV_STD_LOGIC_VECTOR(DEPTH-1,3))AND(RADD="000"))THENFF<='1';ENDIF;ELSEFF<='0';ENDIF;ENDIF;ENDPROCESSFFLAG;--只写不读图4FFLAG进程示意图
--产生空标志进程
EFLAG:PROCESS(ACLR,CLOCK)ISBEGINIF(ACLR='0')THENEF<='0';ELSIF(CLOCK'EVENTANDCLOCK='1')THENIF(RE='1'ANDWE='0')THENIF(R=W1)OR((RADD=CONV_STD_LOGIC_VECTOR(DEPTH-1,3))AND(WADD="000"))THENEF<='1';ENDIF;ELSEEF<='0';ENDIF;ENDIF;ENDPROCESSEFLAG;--只读不写图5EFLAG进程示意图三、设计总结扩展
WIDTH位数据DEPTH个单元图3二维数组MEM示意图ADDR[N-1:0]4.存储器进行存取操作时,需要给出存取地址。存取地址可能每一次操作进行加减1操作,也可能是根据特定的存取操作规律进行加减N操作。5.可读可写存储器,要注意读空或写满的问题,这时可设定控制标志进行区分。2.存储器的数据类型,本质上就是一个二维数组,可理解成一个具有N位数据,有D个单元的二维数组。3.存储器的存储操作,实际上就是根据给定的地址,找到对应的存储单元,再将外部端口的有关数据存入指定的存储单元,或将指定单元的数据送到外部端口。1、阅读如下VHDL程序,回答如下问题:课后测试题答案:ACEF答案:A。答案:B。答案:C。第3章EDA技术及应用精讲3.9状态机的VHDL程序设计主讲人:谭会生教授内容提要状态机的设计基础知识;一般状态机的VHDL设计;状态机的设计要点。3.9状态机的VHDL程序设计一、状态机的设计基础1.状态机的组成图1状态机的结构示意图用于存储状态机的内部状态确定状态机的激励方程确定状态机的输出方程2.状态机的基本操作(1)状态机内部状态转换。状态机转化由状态译码器根据当前状态和输入条件决定。(2)产生输出信号序列。输出信号由输出译码器根据当前状态和输入条件决定。图1状态机的结构示意图3.状态机的种类在产生输出的过程中,由是否使用输入信号可以确定状态机的类型。两种典型的状态机是摩尔(MOORE)状态机和米立(MEALY)状态机。在摩尔状态机中,其输出只是当前状态值的函数,并且仅在时钟边沿到来时才发生变化。米立状态机的输出则是当前状态值、当前输出值和当前输入值的函数。二、一般状态机的VHDL设计1.设计思路为了能获得可综合的、高效的VHDL状态机描述,建议使用枚举类数据类型来定义状态机的状态,并使用多进程方式来描述状态机的内部逻辑。例如可使用两个进程来描述,一个进程描述时序逻辑,包括状态寄存器的工作和寄存器状态的输出;另一个进程描述组合逻辑,包括进程间状态值的传递逻辑以及状态转换值的输出。必要时还可引入第三个进程完成其他的逻辑功能。2.编程举例【例题】一般状态机的VHDL设计模型。图2一般状态机状态转换图STATE_INPUTS="00""00"STATE_INPUTS="00""01"STATE_INPUTS="11""10"STATE_INPUTS="11""11"LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYS_MACHINEISPOR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年连江县教师招聘考试备考试题及答案解析
- 2026年杞县教师招聘笔试备考题库及答案解析
- 2026年固阳县教师招聘考试模拟试题及答案解析
- 2026中国中医科学院望京医院公开招聘康复师治疗部工作人员1人笔试参考题库及答案解析
- 2026年繁峙县教师招聘笔试备考试题及答案解析
- 2027年咸阳市实验中学公费师范生招聘(30人)笔试备考试题及答案解析
- 2026湖南张家界市永定区农业农村局招聘公益性岗位人员1人笔试备考题库及答案解析
- 中国建筑西南设计研究院有限公司2027届校园招聘考试备考试题及答案解析
- 宜宾市属国有企业人力资源中心宜宾市科技人才集团有限公司下属子公司四川科才知识产权运营有限公司2026年第三批员工公开招聘的考试备考试题及答案解析
- 2026黑龙江省迎春林业局有限公司公开招聘34人笔试备考试题及答案解析
- 2026广东广州市南沙区社区专职工作人员招聘40人考试备考试题及答案解析
- 2026年高级职业培训师(三级)职业资格鉴定考试题库(新版)
- (2025)中国肩袖损伤修复围手术期eras护理专家共识课件
- 初中八年级历史 中国特色社会主义道路 大单元教学设计
- 2026年平安银行(上海分行)校园招聘笔试参考试题及答案详解
- GB/T 44693.4-2026危险化学品企业工艺平稳性第4部分:开工过程管理规范
- 油田分层注水技术
- 电气控制技术说课
- 灌装工专业技能培训课件
- 中药黄芪课件
- 2025部编版三年级道德与法治上册全册教案
评论
0/150
提交评论