数字电路与逻辑设计实验_第1页
数字电路与逻辑设计实验_第2页
数字电路与逻辑设计实验_第3页
数字电路与逻辑设计实验_第4页
数字电路与逻辑设计实验_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

./数字电路与逻辑设计实验报告学院:班 级:姓 名:学 号:日期:实验名称:实验一:QuartusII原理图输入法设计与实现实验二:用VHDL设计与实现组合逻辑电路实验三:用VHDL设计与实现时序逻辑电路实验四:用VHDL设计与实现数码管动态扫描控制器实验所用器件及仪器:1.计算机2.直流稳压电源3.数字系统与逻辑设计实验开发板实验要求:实验一:用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。用〔1实现的半加器和逻辑门设计实现一个全加器,仿真并验证其功能,并下载到实验板上测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。用3—8线译码器和逻辑门设计实现函数F=/C/B/A+/CB/A+C/B/A+CBA,仿真验证其功能并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。注:实验时将三个元器件放在一个newblockdiagram中实现。实验二:用VHDL语言设计实现一个共阴极7段数码译码器,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,7段数码管显示输出信号。用VHDL语言设计实现一个8421码转余三码的代码器,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个‘1’时,输出1,否则出0;仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。实验三:用VHDL语言设计实现一个带异步复位的8421十进制计数器,仿真验证其功能,并下载到实验板测试。要求用按键设定输入信号,发光二极管显示输出信号。用VHDL语言设计实现一个分频系数为12,输出信号占空比为50%的分频器,仿真验证其功能。注:实验时将〔1、〔2和数码管译码器3个电路进行,并下载到实验板显示计数结果。实验四:用VHDL语言设计实现六个数码管串行扫描电路,要求同时显示0,1,2,3,4,5这几个不同的数字图形到数码管上,仿真验证其功能,并下载到实验板测试。用VHDL语言设计实现六个数码管滚动显示电路:循环左循环,左进右出。状态为:012345->123450->234501->345012->450123->501234->012345向左滚动,状态为〔X表示数码管不显示:012345->12345X->2345XX->345XXX->45XXXX->5XXXXX->XXXXXX->XXXXX0->XXXX01->XXX012->XX0123->X01234->012345实验原理及设计思路:实验一:半加器是考虑两位二进制数相加,出来的结果有二者加后的一个低位数,和一个这两位数相加所得的进位数。所以用异或门和与门即可实现双输入双输出的半加器。全加器可以以半加器为基础,在考虑两位二进制数相加时也考虑上地位的进位信号,输出与半加器类似。译码器加逻辑门可以实现相应的逻辑函数,将有相应最小项的输出项或即可。实验二:共阴极7段数码译码器:拨码开关的不同状态对应输入信号的0和1,通过改变拨码开关的状态改变输入值,此时用VHDL语言描述每个输入值下对应的数在数码管中的显示。8421码转余三码的代码器:将8421BCD码加上0011即为对应的余三码,通过通过改变拨码开关的状态改变输入的84212BCD码,由四个LED灯的亮与灭〔亮表示该值为1,灭表示0,来表示余三码的码值。奇偶校验电路:同理用拨码开关设定输入信号,发光二极管显示输出信号,输入奇数个1时,对应的发光二极管亮,反之则为熄灭状态。实验三:异步计数器:由于是异步复位,且yibuclear〔清零信号优先级最高,当它有效时使状态清零。或者当到达第11个状态〔1010时复位,使状态回归到初始状态〔0000。其余时刻,用cp来计数,每按一次键cp=1,状态加1。因此设计2个输入端,一个输出端数组即可。分频器:是使cp经过12个周期,输出的信号正好完成一次完整的翻转,因此需要计数,该计数器模值为12,每六个状态时翻转一次。可以使用分频器为异步计数器提供脉冲信号,异步计数器的输出作为数码管译码管的输入,由数码管译码管显示当前数据。实验四:六个数码管串行扫描电路:由实验板上18号元件提供时钟,每过一个周期,亮一个数码管,且该数码管序号也会改变,因此需要两个数组来体现这种改变。设选择一个管亮的数组为xuan〔5downto0,数码管上控制输出数字形状的数组为guan〔6downto0,通过输入的时钟改变状态〔signalstatus,由状态定xuan,guan。由于要求"同时显示",我们知道闪烁发光的二极管闪烁频率较高时,我们将观察到持续点亮的现象,一个数码管要稳定,需要显示频率大于50HZ,现在需要6个数码管同时显示,因而时钟的频率应该大于300HZ。六个数码管滚动扫描电路:大致原理同〔1,但是需要注意guan不再只有6个状态,需要用12个状态来配合周期循环使用。需要每轮的管子状态改变一个位移。此时可以把xuan由循环来赋值,实现控制不同时刻数码管的亮与灭。实验模块端口及连接图:

实验三〔3:分频器的时钟信号接外部时钟,异步清零端接外部信号,异步清零信号有效时可以实现分频器部计数清零。当外部时钟clk=1时,分频器部计数器的状态加1,每六个状态clk_out实现一次翻转。分频器的输出作为异步计数器的时钟,异步计数器的异步复位端接外部输入,可由实验板上拨码开关实现。这样就将外部时钟12分频后输入给异步计数器,异步计数器将计数输入数码译码器,实现控制数码管的状态,使之显示异步8421十进制计数器的此刻的数。实验四:clk是输入信号,接外部时钟信号〔location对应实验板18,要求频率大于300HZ,clear是异步复位信号。guan为输出信号,连接到数码管上对应的7条线,控制这个数码管中每一段线的亮与灭,实现显示数字。xuan是控制6个数码管此时应该亮哪一个。由signalstatus根据输入信号确定此时对应的状态下的xuan和guan。循环左滚动:输入信号为clk,clear。Clear为异步复位信号,Clk接外部时钟,该时钟共有4种频率〔可以通过改变粉红色按钮上的小拨码开关调整,为了使实验现象符合要求,我们可以选择最高频率并对它进行分频,分出我们所需要的合适的频率,再由分频器输出的信号控制状态变化,每来一个时钟改变一次状态,xuan和guan为输出信号,分别控制该时刻应该亮哪个数码管和这个数码管上每条线的亮与灭状态。故clk接实验板上18,clear可由按键实现,xuan接实验板上cat〔0~5guan接数码管上每条线所对应的数字。小周期计数器控制每位数码的显示,大周期计数器控制数码的移位。clk为输入信号,接外部时钟实验板上18,通过循环移位及每来一个cp对xuan进行一次赋值,选择此时该亮的灯。通过改变输出guan和xuan,从而得出能熄灭能亮的现象。guan接数码管上的每条线所对应位置,xuan接六个数码管的cat端实验原理图或者VHDL代码:实验一〔2:其中半加器ba的原理图如下所示:实验三〔3VHDL代码如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYsangeISPORT<clk:INSTD_LOGIC;clear,clearyibu:INSTD_LOGIC;b:OUTSTD_LOGIC_VECTOR<6downto0>;y2,y3,y4,y5,y6,y7:OUTSTD_LOGIC>;endsange;ARCHITECTUREaOFsangeIScomponentfenpinPORT<clk:INSTD_LOGIC;clear:INSTD_LOGIC;clk_out:OUTSTD_LOGIC>;ENDcomponent;componentyibuPORT<cp,clear:INSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR<3DOWNTO0>>;ENDcomponent;componentseg7_1PORT<a:INSTD_LOGIC_VECTOR<3downto0>;b:OUTSTD_LOGIC_VECTOR<6downto0>;c,d,e,f,g,h:OUTSTD_LOGIC>;ENDcomponent;SIGNALna:STD_LOGIC;SIGNALnb:STD_LOGIC_VECTOR<3DOWNTO0>;BEGINu1:fenpinPORTMAP<clk=>clk,clear=>clear,clk_out=>na>;u2:yibuPORTMAP<cp=>na,clear=>clearyibu,q=>nb>;u3:seg7_1PORTMAP<a=>nb,b=>b,c=>y2,d=>y3,e=>y4,f=>y5,g=>y6,h=>y7>;ENDa;其中fenpin,yibu,seg7_1的VHDL代码如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYfenpinISPORT<clk:INSTD_LOGIC;clear:INSTD_LOGIC;clk_out:OUTSTD_LOGIC>;ENDfenpin;ARCHITECTUREaOFfenpinISSIGNALtmp:INTEGERRANGE0TO5;SIGNALclktmp:STD_LOGIC;BEGINPROCESS<clear,clk>BEGINIFclear='0'THENtmp<=0;ELSIF<clk'eventandclk='1'>THENIFtmp=5THENtmp<=0;clktmp<=NOTclktmp;ELSEtmp<=tmp+1;ENDIF;ENDIF;ENDPROCESS;clk_out<=clktmp;ENDa;yibu:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYyibuISPORT<cp,clear:INSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR<3DOWNTO0>>;ENDyibu;ARCHITECTUREaOFyibuISSIGNALtemp:STD_LOGIC_VECTOR<3DOWNTO0>;BEGINPROCESS<cp>BEGINIFclear='1'THENtemp<="0000";elsIFtemp="1010"THENtemp<="0000";elseIF<cp'eventandcp='1'>THENtemp<=temp+1;ENDIF;endif;ENDPROCESS;q<=temp;ENDa;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYseg7_1ISPORT<a:INSTD_LOGIC_VECTOR<3downto0>;b:OUTSTD_LOGIC_VECTOR<6downto0>;c,d,e,f,g,h:OUTSTD_LOGIC>;数码管译码器VHDL代码:endseg7_1;ARCHITECTUREseg7_1_archOFseg7_1ISBEGINc<='0';d<='1';e<='1';f<='1';g<='1';h<='1';PROCESS<a>BEGINCASEaISWHEN"0000"=>B<="1111110";--0WHEN"0001"=>B<="0110000";--1WHEN"0010"=>B<="1101101";--2WHEN"0011"=>B<="1111001";--3WHEN"0100"=>B<="0110011";--4WHEN"0101"=>B<="1011011";--5WHEN"0110"=>B<="1011111";--6WHEN"0111"=>B<="1110000";--7WHEN"1000"=>B<="1111111";--8WHEN"1001"=>B<="1111011";--9WHENOTHERS=>B<="0000000";ENDCASE;ENDPROCESS;END;实验四数据管串行扫描电路:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYchuanxingISPORT<clk,clear:INSTD_LOGIC;guan:outSTD_LOGIC_VECTOR<6downto0>;xuan:OUTSTD_LOGIC_VECTOR<5downto0>>;endchuanxing;ARCHITECTUREyuOFchuanxingISsignalstatus:integerrange0to6;BEGINprocess<clk>beginifclear='0'thenstatus<=0;elsif<clk'eventandclk='1'>thenifstatus=6thenstatus<=1;elsestatus<=status+1;endif;endif;endprocess;PROCESS<status>BEGINCASEstatusISWHEN1=>guan<="1111110";xuan<="011111";WHEN2=>guan<="0110000";xuan<="101111";WHEN3=>guan<="1101101";xuan<="110111";WHEN4=>guan<="1111001";xuan<="111011";WHEN5=>guan<="0110011";xuan<="111101";WHEN6=>guan<="1011011";xuan<="111110";WHENOTHERS=>guan<="0000000";xuan<="111111";ENDCASE;ENDPROCESS;END;循环左滚动:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYmoveISPORT<clk,clear:INSTD_LOGIC;guan:OUTSTD_LOGIC_VECTOR<6DOWNTO0>;xuan:OUTSTD_LOGIC_VECTOR<5DOWNTO0>>;ENDmove;ARCHITECTUREzuoOFmoveisSIGNALl:STD_LOGIC_VECTOR<6DOWNTO0>;SIGNALc:STD_LOGIC_VECTOR<5DOWNTO0>;SIGNALt,cnt1:INTEGERRANGE0TO5;SIGNALtmp:INTEGERRANGE0TO1999;signalclk1:STD_LOGIC;BEGINFenpin1:PROCESS<clk,clear>BEGINIFclear='0'THENtmp<=0;ELSIFclk'EVENTANDclk='1'THENIFtmp=1999THENtmp<=0;ELSEtmp<=tmp+1;ENDIF;ENDIF;ENDPROCESSfenpin1;fenpin2:PROCESS<tmp>BEGINIFclk'EVENTANDclk='1'THENIFtmp<1000THENclk1<='0';ELSEclk1<='1';ENDIF;ENDIF;ENDPROCESSfenpin2;change:PROCESS<clk>BEGINIF<clk'EVENTANDclk='1'>THENIF<cnt=5>THENt<=0;ELSEt<=cnt+1;ENDIF;ENDIF;ENDPROCESSchange;P0:PROCESS<clk1>BEGINIF<clk1'EVENTANDclk1='1'>THENIF<cnt1=5>THENt1<=0;ELSEt1<=cnt1+1;ENDIF;ENDIF;ENDPROCESSp0;P1:PROCESS<cnt,cnt1>BEGINIF<clear='0'>THENl<="0000000";ELSECASEt+cnt1ISWHEN0=>l<="1111110";WHEN1=>l<="0110000";WHEN2=>l<="1101101";WHEN3=>l<="1111001";WHEN4=>l<="0110011";WHEN5=>l<="1011011";WHEN6=>l<="1111110";WHEN7=>l<="0110000";WHEN8=>l<="1101101";WHEN9=>l<="1111001";WHEN10=>l<="0110011";WHEN11=>l<="1011011";WHENOTHERS=>l<="0000000";ENDCASE;ENDIF;ENDPROCESSp1;guan<=q_temp;p2:PROCESS<cnt>BEGINIF<clear='0'>THENc<="111111";ELSECASEtISWHEN0=>c<="011111";WHEN1=>c<="101111";WHEN2=>c<="110111";WHEN3=>c<="111011";WHEN4=>c<="111101";WHEN5=>c<="111110";WHENOTHERS=>c<="111111";ENDCASE;ENDIF;ENDPROCESSp2;xuan<=count;ENDzuo;亮了又熄灭:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYbianhuaISPORT<clk,clear:INSTD_LOGIC;guan:outSTD_LOGIC_VECTOR<6downto0>;xuan:OUTSTD_LOGIC_VECTOR<5downto0>>;endbianhua;ARCHITECTUREweiOFbianhuaISsignaltmp:integerrange0to5;signalw:integerrange0to5;signals:integerrange0to10;signalk:integerrange0to1;signalo:integerrange0to6;signalp:integerrange-1to1;signalclko:std_logic_vector<0to5>;BEGINprocess<clear,clk>beginifclear='0'thentmp<=0;w<=0;s<=0;k<=0;o<=6;p<=-1;elsif<clk'eventandclk='1'>theniftmp=5thentmp<=0;w<=w+1;elsetmp<=tmp+1;endif;ifw=6thenw<=0;endif;foriin0to5loopifk=0theniftmp>=othenclko<i><='1';elsiftmp<ithenclko<i><='1';elsiftmp<i+1thenclko<i><='0';elseclko<i><='1';endif;elsifk=1thenif<5-tmp>>=othenclko<i><='1';elsiftmp<ithenclko<i><='1';elsiftmp<i+1thenclko<i><='0';elseclko<i><='1';endif;endif;endloop;iftmp=5theno<=o+p;endif;ifo=0thenk<=1;p<=1;elsifo=6thenp<=-1;k<=0;endif;foriin0to5loopxuan<i><=clko<i>;endloop;s<=tmp+w;CASEsISWHEN10=>guan<="0110011";WHEN9=>guan<="1111001";WHEN8=>guan<="1101101";WHEN7=>guan<="0110000";WHEN6=>guan<="1111110";WHEN0=>guan<="1111110";WHEN1=>guan<="0110000";WHEN2=>guan<="1101101";WHEN3=>guan<="1111001";WHEN4=>guan<="0110011";WHEN5=>guan<="1011011";ENDCASE;endif;ENDPROCESS;END;实验的仿真波形图及分析:实验一〔2A,B为进行加运算的二进制数,CI为前一位数的进位,CO是A,B相加的进位,A,B都为1时CO=1,其余时候为零。S是A,B加后的最低位,A,B,CI异或而得。实验一〔3A,B,C为地址端,当输入的最小项在F的表达式中时,F=1,其余F=0。实验二8421BCD码转为余三码,从0000至1001,余三码等于8421bcd码加0011,其余情况,输出0000;当输入的四位二进制数有奇数个1时出1,其余出0;输入0000至1001时,输出数码管上其相应的表现形式,否则数码管没有一根线亮。〔3实验三外部时钟每过6个周期,分频器输出翻转一次,数码管从显示0开始,直到9的对应输入的数据。y数组表示数码管的选通与否,clear,yibuclear为分别为分频器和计数器的异步复位信号,当clear=0时,回到初始状态。〔分频器计数从0开始,计数器被置零。clear作用如下:<4>实

温馨提示

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

评论

0/150

提交评论