30《文成公主进藏》教学课件修改版_第1页
30《文成公主进藏》教学课件修改版_第2页
30《文成公主进藏》教学课件修改版_第3页
30《文成公主进藏》教学课件修改版_第4页
30《文成公主进藏》教学课件修改版_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

第8章基本逻辑电路设计实例重点知识点

组合电路的VHDL描述时序电路的VHDL描述常用实用电路模块设计

组合电路的VHDL描述组合逻辑电路即任意时刻的输出仅仅取决于该时

刻的输入,与电路原来的状态无关。但是在设计中,我们一般以时钟的存在与否来区

分该电路的性质。组合逻辑电路不需要时钟,在

使用VHDL语言时,可以采用进程process语句省略了库声明和程序包说明ENTITYmux41aISPORT(a,b,c,d:INBIT;s:INBIT_vector(1downto0);y:OUTBIT);ENDENTITYmux41a;ARCHITECTUREoneOFmux41aISBEGINy<=aWHENs=“00〞ELSEbWHENs=“01〞ELSEcWHENs=“10〞ELSEd;ENDARCHITECTUREone;例11位数据宽度的4选1数据选择器省略了库声明和程序包说明在结构体中采用并行的WHEN_ELSE语句。ENTITYmux41aISPORT(a,b,c,d:INBIT_vector(7downto0);s:INBIT_vector(1downto0);y:OUTBIT_vector(7downto0));ENDENTITYmux41a;ARCHITECTUREoneOFmux41aISBEGINy<=aWHENs=“00〞ELSEbWHENs=“01〞ELSEcWHENs=“10〞ELSEd;ENDARCHITECTUREone;例28位数据宽度的4选1数据选择器在进程中采用IF_THEN_ELSE语句LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYmux81aISPORT(a,b,c,d,e,f,g,h:INBIT_vector(7downto0);s:INBIT_vector(2downto0);y:OUTBIT_vector(7downto0));ENDENTITYmux81a;

接下页

例38位数据宽度的8选1数据选择器

程序包

------------------------------------------------库ARCHITECTUREoneOFmux81aISBEGINPROCESS(a,b,c,d,e,f,g,h,s)BEGINIFs=“000〞THENy<=a;ELSIFs=“001〞THENy<=b;ELSIFs=“010〞THENy<=c;ELSIFs=“011〞THENy<=d;ELSIFs=“100〞THENy<=e;ELSIFs=“101〞THENy<=f;ELSIFs=“110〞THENy<=g;ELSEy<=h;ENDIF;ENDPROCESS;ENDARCHITECTUREone;进程接上页XS0S1Y0Y2Y1Y31分4的数据分配器例41位数据宽度的1分4数据分配器数据分配器的功能与数据选择器恰好相反,它根据控制信号S0与S1的不同取值,X端的数据将分配到不同的输出端口输出。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYdemux41aISPORT(X:INBIT;

s0,s1:INBIT;y0,y1,y2,y3:OUTBIT);ENDENTITYdemux41a;程序包库-------实体ARCHITECTUREoneOFdemux41aIS

SIGNALS:BIT_vector(1downto0);BEGIN

S<=S1&S0;Process(s,x)BeginY0<='0';Y1<='0';Y2<='0';Y3<='0';CasesisWHEN"00"=>Y0<=x;WHEN"01"=>Y1<=x;WHEN"10"=>Y2<=x;WHENothers=>Y3<=x;Endcase;Endprocess;ENDARCHITECTUREone;进程1分4的数据分配器的RTL图1分4的数据分配器的时序仿真思考和操作题:如果此条语句去掉,RTL图和仿真如何?ARCHITECTUREoneOFdemux41aISSIGNALS:BIT_vector(1downto0);BEGINS<=S1&S0;Process(s,x)Begin---Y0<='0';Y1<='0';Y2<='0';Y3<='0';CasesisWHEN"00"=>Y0<=x;WHEN"01"=>Y1<=x;WHEN"10"=>Y2<=x;WHENothers=>Y3<=x;Endcase;Endprocess;ENDARCHITECTUREone;数字系统中的数据处理和运算都是采用2进制,所以输出结果表达都是16进制的,为了使输出的16进制数据显示的更加直观,使人更容易阅读和理解,需要采用译码器将抽象的16进制数据转换为易于阅读的十进制数据,然后通过数码管显示。因此,本例子介绍7段数码显示译码器设计.7段数码是纯组合电路,它是将16进制数表示的BCD码转换为10进制数,通过数码管显示为0,1,2,3,4,5,6,7,8,9例57段数码显示译码器设计例57段数码显示译码器设计共阴数码管及其电路

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDECL7SIS

PORT(A:INSTD_LOGIC_VECTOR(3DOWNTO0);LED7S:OUTSTD_LOGIC_VECTOR(6DOWNTO0));END;ARCHITECTUREoneOFDECL7SISBEGINPROCESS(A)BEGINCASEAISWHEN"0000"=>LED7S<="0111111";----0WHEN"0001"=>LED7S<="0000110";----1WHEN"0010"=>LED7S<="1011011";----2WHEN"0011"=>LED7S<="1001111";----3WHEN"0100"=>LED7S<="1100110";----4WHEN"0101"=>LED7S<="1101101";----5WHEN"0110"=>LED7S<="1111101";----6WHEN"0111"=>LED7S<="0000111";----7WHEN"1000"=>LED7S<="1111111";----8WHEN"1001"=>LED7S<="1101111";----9WHENOTHERS=>NULL;ENDCASE;ENDPROCESS;END;例68-3优先编码器设计编码器功能与译码器相反,是将较多位数的码值编成较少位数的码值。优先编码器的编码原那么是按照由高位到低位的原那么,逐次判断该位是否为有效数值0或1,假设为有效数值0或1,那么按照该位的位置进行编码,而忽略后续各位的数值。8-3优先编码器的编码原那么是:8个输入端中的一个输入如果有效,如本例为0,那么有一个3位二进编码输出;假设同时有多个输入端输入为0,那么输出优先级高的那个输入端所对应的编码。

输入 输出din0din1din2din3din4din5din6din7 output0output1output2

xxxxxxx0000 xxxxxx01100 xxxxx011010 xxxx0111110 xxx01111001 xx011111101 x0111111011 01111111111 注:表中的“x”为任意,类似VHDL中的“-”值。8线-3线优先编码器真值表LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcoderISPORT(din:INSTD_LOGIC_VECTOR(0TO7);output:OUTSTD_LOGIC_VECTOR(0TO2));ENDcoder;ARCHITECTUREbehavOFcoderISBEGINPROCESS(din)BEGIN

IF(din(7)='0')THENoutput<="000";ELSIF(din(6)='0')THENoutput<="100";ELSIF(din(5)='0')THENoutput<="010";ELSIF(din(4)='0')THENoutput<="110";ELSIF(din(3)='0')THENoutput<="001";ELSIF(din(2)='0')THENoutput<="101";ELSIF(din(1)='0')THENoutput<="011";ELSEoutput<="111";ENDIF;ENDPROCESS;ENDbehav;

时序逻辑电路的VHDL描述时序逻辑电路的输出不但与输入有关,还和系统

上一个状态有关。时序逻辑电路即电路需要时钟,在使用VHDL语

言时,必须采用进程process语句。分频器的设计分频器的设计:有时候根据需求,需要将周期密的时钟变为周期疏的时钟实际上,前面介绍的计数器在功能上实际也是分频器,四位计数器的计数输出的最高位信号就是输入时钟信号的16分频,最低位为输入时钟的2分频。对于一些非2的整数次幂的分频,如5分频、6分频,还需要在根本计数器电路中加上复位控制电路entityfenpinisport(clk:instd_logic;--时钟输入

dout:outstd_logic);--分频输出endfenpin;architecturehavoffenpinissignalqout:std_logic_vector(3downto0);signalf:std_logic;beginprocess(clk)beginif(clk'eventandclk='1')thenif(qout="0011")thenqout<="0000";f<=notf;elseqout<=qout+1;endif;endif;endprocess;dout<=f;endhav;8分频的程序设计语句1语句2----8分频的仿真波形编一个16分频的程序,并实验仿真流水灯实验所谓流水灯,就是让LED灯的亮灭模拟流水,按照顺序使LED灯依次点亮。8个灯依次点亮的流水灯实验libraryieee;useieee.std_logic_1164.all;use;use;entitylledisport(clk:instd_logic;dout:outstd_logic_vector(7downto0));endlled;architecturehavoflledissignalq:std_logic_vector(7downto0);signald:std_logic_vector(2downto0);beginprocess(clk)beginifclk'eventandclk='1'thend<=d+1;endif;endprocess;withdselectq<="10000000"when"000","01000000"when"001","00100000"when"010","00010000"when"011","00001000"when"100","00000100"when"101","00000010"when"110","00000001"whenothers;dout<=q;endhav;语句1语句2语句3----流水灯仿真编写一个16个灯依次点亮的流水灯实验,并仿真数字钟的设计设计一数字钟,具有以下功能:1.具有小时、分钟、秒计数显示功能,以24小时循环计

时,SECOND模块为60进制,实现秒计时;MINUTE模块

为60进制,实现分计时功能;HOUR模块为24进制,实

现小时计时,整个计数器具有清零、调分、调时功能,而且在接近整点时提供报时信号。2.有驱动8位七段共阴极数码管的片选驱动信号输出和七

段码输出。在图中SELTIME模块产生8位数码管的扫描

驱动信号SEL[2..0]和时钟显示数据DAOUT[3..0],SEL[2..0]信号经过译码器后作为数码管的位选信号,DELED模块为7段数码管3.分位计数到59分时,即到整点时,LD1将开始闪烁,并

持续1分钟。数字钟的设计74393为双四位二进制计数器最后一个74393的Q2B端将输出时间周期为1秒的脉冲实验室提供的脉冲信号频率为4.07MHZ,即该信号的周期为0.0000002457秒16*clk16*16*clk秒脉冲产生模块秒、分、时模块Alert整点报时模块Seltime为小时、分钟、秒分配相应的片选和数码管模块它后面需要接3-8译码器,作为8个数码管的片选信号它后面需要接数码显示的7段译码电路小时分秒清0或复位DELED为驱动数码管显示的7段译码电路74138为3—8译码器ENTITYDFF1ISPORT(D :inBIT;clk:inBIT;Q:outBIT);ENDDFF1;ARCHITECTUREbhvOFDFF1ISSIGNALQ1:STD_LOGIC;BEGIN

PROCESS(CLK,Q1)BEGINIFCLK'EVENTANDCLK='1'THENQ1<=D;ENDIF;ENDPROCESS;Q<=Q1;ENDbhv;D触发器的设计

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK,D1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISSIGNALA:STD_LOGIC;BEGIN

PROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENA<=D1;Q1<=A;ENDIF;ENDPROCESS;END;同步时序电路设计ARCHITECTUREbhvOFMULTI_DFFISSIGNALQ1,Q2:STD_LOGIC;BEGINPRO1:PROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQ1<=NOT(Q2ORA);ENDIF;ENDPROCESS;PRO2:PROCESS(Q1)BEGINIFQ1'EVENTANDQ1='1'THENQ2<=D;ENDIF;Q3<=Q2;ENDPROCESS;ENDMULTI_DFF;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYMULTI_DFFIS

PORT(CLK:INSTD_LOGIC;D1:INSTD_LOGIC;A:INSTD_LOGIC;Q3:OUTSTD_LOGIC);

END;异步时序电路设计本卷须知一个进程只允许描述对应于一个时钟信号的同步时序逻辑;异步逻辑最好用多个时钟进程语句来构成。JK触发器的设计JK触发器是具有两个输入端J和K,且当前输出结果与前一刻的输出结果有关。libraryieee;useieee.std_logic_1164.all;use;entityJKisport(J,K,clk:instd_logic;Q:outstd_logic);endJK;architectureoneofJKissignalQ1:std_logic;beginprocess(clk)beginifclk'eventandclk='1'thenQ1<=(Jand(notQ1))or((notK)andQ1);endif;endprocess;Q<=Q1;endone;JK触发器的VHDL程序JK触发器的功能仿真图含异步清0和同步时钟使能的4位计数器设计一含计

温馨提示

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

评论

0/150

提交评论