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

下载本文档

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

文档简介

数字电路与逻辑设计实验报告专业:通信工程班级:姓名:学号:班内序号:指导老师:实验一:QuartusⅡ原理图输入法设计与实现实验目的:熟悉用QuartusⅡ原理图输入法进行电路设计和仿真;掌握QuartusⅡ图形模块单元的生成与调用;熟悉实验板的使用。实验内容:用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元;用实验内容1中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号;用3线-8线译码器(74LS138)和逻辑门设计实现函数F=,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。原理图及仿真波形图:半加器原理图:仿真波形图:分析:S=ab;C=ab其中a,b为输入端,C为进位端,S为本位和,当ab=‘00’‘01’‘10’时不用进位,故C=‘0’,当ab=‘11’时需要进位使得C=‘1’,S=‘0’。(2)全加器原理图:仿真波形图:分析:Si=AiBiCi-1;Ci=AiBi+Ci-1(AiBi)全加器与半加器的不同在于,全加器需要考虑低位的进位,而半加器不需要。因而对于全加器,Ai、Bi为加数和被加数,Ci-1为低位的进位,Ci为进位,Si为本位和,实质上相当于Ai+Bi+Ci-1,满2进1,Ci为进位,Si为本位和。(3)译码器原理图:仿真波形图:分析:又有要实现的功能为F=,又根据74LS138的使用原理可得图示的连接方法。实验二:用VHDL设计与实现组合逻辑电路实验目的:熟悉用VHDL语言设计组合逻辑电路的方法;熟悉用QuartusⅡ文本输入法进行电路设计;熟悉不同的编码及其之间的转换。实验内容:用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,7段数码管显示输出信号;用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号;用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个‘1’时,输出为‘1’,否则输出为‘0’,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。VHDL代码及仿真波形图:数码管译码器VHDL代码:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYseg7_1ISPORT(a:INSTD_LOGIC_VECTOR(3downto0);b:OUTSTD_LOGIC_VECTOR(6downto0));endseg7_1;ARCHITECTUREseg7_1_archOFseg7_1ISBEGINPROCESS(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;仿真波形图:分析:数码管译码器主要运用case语句,将每一种情况罗列出来,而仿真波形图既是每一种情况的一种直观体现(2)8421码转换为余3码的代码转换器VHDL代码:libraryieee;useieee.std_logic_1164.all;entityTWOisport(a:instd_logic_vector(3downto0);b:outstd_logic_vector(3downto0));endTWO;architectureTWO_archofTWOisbeginprocess(a)begincaseaiswhen"0000"=>b<="0011";--0when"0001"=>b<="0100";--1when"0010"=>b<="0101";--2when"0011"=>b<="0110";--3when"0100"=>b<="0111";--4when"0101"=>b<="1000";--5when"0110"=>b<="1001";--6when"0111"=>b<="1010";--7when"1000"=>b<="1011";--8when"1001"=>b<="1100";--9whenothers=>b<="0000";endcase;endprocess;end;仿真波形图:分析:余三码实际为8421码加上3的结果,可以用case列举的方式,也可以用加号,但需要加上相应的库(3)奇校验器VHDL代码:libraryieee;useieee.std_logic_1164.all;entityTHREEisport(a:instd_logic_vector(3downto0);b:outstd_logic_vector(0downto0));endTHREE;architectureTHREE_archofTHREEisbeginprocess(a)begincaseaiswhen"0000"=>b<="0";--0when"0001"=>b<="1";--1when"0010"=>b<="1";--2when"0011"=>b<="0";--3when"0100"=>b<="1";--4when"0101"=>b<="0";--5when"0110"=>b<="0";--6when"0111"=>b<="1";--7when"1000"=>b<="1";--8when"1001"=>b<="0";--9when"1010"=>b<="0";--10when"1011"=>b<="1";--11when"1100"=>b<="0";--12when"1101"=>b<="1";--13when"1110"=>b<="1";--14when"1111"=>b<="0";--15whenothers=>b<="0";endcase;endprocess;end;仿真波形图:实验三:用VHDL设计与实现时序逻辑电路实验目的:(1)熟悉用VHDL语言设计时序逻辑电路的方法;(2)熟悉用QuartusⅡ文本输入法进行电路设计;(3)熟悉计数器和分频器的设计与应用。实验内容:用VHDL语言设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能,并下载到实验板测试。要求用按键设定输入信号,发光二极管显示输出信号;用VHDL语言设计实现一个分频系数为12,分频输出信号占空比为50%的分频器,要求在QuartusⅡ平台上设计程序并仿真验证设计;将(1)(2)和数码管译码器三个电路进行连接,并下载到实验板显示计数结果。VHDL代码、仿真波形图、模块端口说明:(1)计数器VHDL代码:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;entitycount_10isport(clk,clear:INSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDcount_10;architectureaofcount_10issignalcn:integerrange0to10;beginprocess(clk)beginIF(clear='0'ORcn=10)THENcn<=0;ELSIF(clk'eventANDclk='1')THENcn<=cn+1;ELSEcn<=cn;ENDIF;ENDPROCESS;q<=CONV_STD_LOGIC_VECTOR(cn,4);ENDa;仿真波形图:分析:输入为时钟信号和复位信号。由于是异步复位,所以复位信号的优先级最高。当复位信号为0时,输出变为0000;当复位信号为1时,每当遇到时钟上升沿,输出状态加1,实现加计数,计数循环为0000→···1010,其中1010与0000占用同一个周期的clk,因此输出波形会出现“芒刺”。(2)分频器VHDL代码:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYdiv_12ISPORT(clk:INSTD_LOGIC;clear:INSTD_LOGIC;clk_out:OUTSTD_LOGIC);ENDdiv_12;ARCHITECTUREaOFdiv_12ISSIGNALtmp:INTEGERRANGE0TO5;SIGNALclktmp:STD_LOGIC;BEGINPROCESS(clear,clk)BEGINIFclear='0'THENtmp<=0;ELSIFclk'eventANDclk='1'THENIFtmp=5THENtmp<=0;clktmp<=NOTclktmp;ELSEtmp<=tmp+1;ENDIF;ENDIF;ENDPROCESS;clk_out<=clktmp;ENDa;仿真波形图:分析:在本段设计中,clear=0不再是简单的清零操作,而是重新计算clk数目的操作,当出现clear=0时,将会重新计算6个时钟周期,再进行输出状态的翻转。(3)计时器与分频器的连接VHDL代码:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYtheISPORT(clear1:INSTD_LOGIC;clear2:INSTD_LOGIC;clk1:INSTD_LOGIC;b1:OUTSTD_LOGIC_VECTOR(6downto0);CAT:OUTSTD_LOGIC_VECTOR(5downto0));endthe;ARCHITECTUREaOFtheISCOMPONENTdiv_12--分频器PORT(clk:INSTD_LOGIC;clear:INSTD_LOGIC;clk_out:OUTSTD_LOGIC);ENDCOMPONENT;COMPONENTcount_10--计数器PORT(clk,clear:INSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDCOMPONENT;COMPONENTseg7_1--数码管译码器PORT(a:INSTD_LOGIC_VECTOR(3downto0);b:OUTSTD_LOGIC_VECTOR(6downto0));ENDCOMPONENT;SIGNALna:STD_LOGIC;SIGNALnb:STD_LOGIC_VECTOR(3DOWNTO0);BEGINu1:div_12PORTMAP(clk_out=>na,clk=>clk1,clear=>clear1);u2:count_10PORTMAP(clear=>clear2,clk=>na,q=>nb);u3:seg7_1PORTMAP(a=>nb,b=>b1);CAT<="111110";ENDa;模块端口说明:仿真波形图:分析:以clk1作为外部时钟使得分频器产生12分频的信号,分频器的输出作为计数器的时钟信号,使得计数器实现加计数的功能,译码管用于直观地显示计数器的输出。实验四:数码管动态扫描控制器实验目的:掌握VHDL语言的语法规范,掌握时序电路描述方法;掌握多个数码管动态扫描显示的原理及设计方法。实验内容:用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0、1、2、3、4、5这6个不同的数字图形到6个数码管上,仿真验证其功能,并下载到实验板测试;用VHDL语言设计并实现六个数码管滚动显示电路①循环向左滚动,始终点亮6个数码管,左进右出。状态为:012345→123450→234501→345012→450123→501234→012345②向左滚动,用全灭的数码管填充右边,直至全部变灭,然后又依次从右边一个一个地点亮。状态为:012345→12345X→2345XX→345XXX→45XXXX→5XXXXX→XXXXXX→XXXXX0→XXXX01→XXX012→XX0123→X01234→012345,其中‘X’表示数码管不显示VHDL代码、仿真波形图、模块端口说明:(1)数码管串行扫描电路VHDL语言:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYTaLLISPORT(clk,rs:INSTD_LOGIC;b:OUTSTD_LOGIC_VECTOR(6downto0);cat:OUTSTD_LOGIC_VECTOR(5downto0));ENDTaLL;ARCHITECTUREaOFTaLLISCOMPONENTgray--技术状态不连续的异步计数器PORT(clk,rs:INSTD_LOGIC;countout:OUTSTD_LOGIC_VECTOR(5downto0));ENDCOMPONENT;COMPONENTshuma--数码管PORT(cat:INSTD_LOGIC_VECTOR(5downto0);b:OUTSTD_LOGIC_VECTOR(6downto0));ENDCOMPONENT;SIGNALna:STD_LOGIC_VECTOR(5downto0);BEGINu1:grayPORTMAP(clk=>clk,rs=>rs,countout=>na);u2:shumaPORTMAP(cat=>na,b=>b);cat<=na;ENDa;模块端口说明:仿真波形图:分析:技术状态不连续的异步计数器作为脉冲分配器产生相应的cat信号控制6个数码管的亮与灭,而每一个数码管显示同样的数字,故而每个cat对应的输出b是固定的。当时钟频率较高时,人眼无法辨别几个数码管输出的先后,看上去就可以认为几个数码管同时输出012345技术状态不连续的异步计数器:VHDL代码:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYgrayISPORT(clk,rs:INSTD_LOGIC;countout:OUTSTD_LOGIC_VECTOR(5downto0));ENDgray;ARCHITECTUREbehavOFgrayISSIGNALnextcount:STD_LOGIC_VECTOR(5downto0);BEGINPROCESS(clk,rs)BEGINIFrs='0'THENnextcount<="111110";ELSIF(clk'eventANDclk='1')THENCASEnextcountISWHEN"111110"=>nextcount<="111101";WHEN"111101"=>nextcount<="111011";WHEN"111011"=>nextcount<="110111";WHEN"110111"=>nextcount<="101111";WHEN"101111"=>nextcount<="011111";WHEN"011111"=>nextcount<="111110";WHENOTHERS=>nextcount<="111110";ENDCASE;ENDIF;ENDPROCESS;countout<=nextcount;ENDbehav;仿真波形图:数码管:VHDL代码:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYshumaISPORT(cat:INSTD_LOGIC_VECTOR(5downto0);b:OUTSTD_LOGIC_VECTOR(6downto0));ENDshuma;ARCHITECTUREseg_archOFshumaISBEGINPROCESS(cat)BEGINCASEcatISWHEN"111110"=>b<="1111110";--0WHEN"111101"=>b<="0110000";--1WHEN"111011"=>b<="1101101";--2WHEN"110111"=>b<="1111001";--3WHEN"101111"=>b<="0110011";--4WHEN"011111"=>b<="1011011";--5WHENOTHERS=>b<="0000000";ENDCASE;ENDPROCESS;END;(2)循环向左滚动VHDL代码:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitydiaseg2isport(clear,clk:instd_logic;q:outstd_logic_vector(6downto0);countout:outstd_logic_vector(5downto0));enddiaseg2;architecturediaseg2_arcofdiaseg2issignalq_temp:std_logic_vector(6downto0);signalcount:std_logic_vector(5downto0);signalcnt,cnt1:integerrange0to5;signaltmp:integerrange0to15999;signalclk1:std_logic;beginprocess(clk)beginif(clk'eventandclk='1')thenif(cnt=5)thencnt<=0;elsecnt<=cnt+1;endif;endif;endprocess;process(clk,clear)beginif(clear='1')thentmp<=0;elsif(clk'eventandclk='1')thenif(tmp=15999)thentmp<=0;elsetmp<=tmp+1;endif;endif;endprocess;process(tmp)beginif(clk'eventandclk='1')thenif(tmp<1000)thenclk1<='0';elseclk1<='1';endif;endif;endprocess;process(clk1)beginif(clk1'eventandclk1='1')thenif(cnt1=5)thencnt1<=0;elsecnt1<=cnt1+1;endif;endif;endprocess;process(cnt,cnt1)beginif(clear='1')thenq_temp<="0000000";elsecasecnt+cnt1iswhen0=>q_temp<="1111110";when1=>q_temp<="0110000";when2=>q_temp<="1101101";when3=>q_temp<="1111001";when4=>q_temp<="0110011";when5=>q_temp<="1011011";when6=>q_temp<="1111110";when7=>q_temp<="0110000"; when8=>q_temp<="1101101";when9=>q_temp<="1111001";when10=>q_temp<="0110011";when11=>q_temp<="1011011";whenothers=>q_temp<="0000000";endcase;endif;endprocess;q<=q_temp;process(cnt)beginif(clear='1')thencount<="111111";elsecasecntiswhen0=>count<="011111";when1=>count<="101111";when2=>count<="110111";when3=>count<="111011";when4=>count<="111101";when5=>count<="111110";whenothers=>count<="111111";endcase;endif;endprocess;countout<=count;enddiaseg2_arc;仿真波形图:开始的波形图如下:第一次左移的波形图如下:之后的波形图类似分析:本实验较为复杂,需要两个时钟信号,一个用于控制数码管的显示,一个用于控制循环向左移动。可以由clk直接提供,另一个时钟信号要对clk进行分频之后提供。所以仿真波形ENDTIME的选取要适当,本次实验为10ms,便于观察波形的变化。(3)向左滚动VHDL代码:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitydiaseg3isport(clear,clk:instd_logic;q:outstd_logic_vector(6downto0);countout:outstd_logic_vector(5downto0));enddiaseg3;architecturediaseg3_arcofdiaseg3issignalq_temp:std_logic_vector(6downto0);signalcount:std_logic_vector(5downto0);signalcnt,cnt1:integerrange0to11;signaltmp:integerrange0to1999;signalclk1:std_logic;beginprocess(clk)beginif(clk'eventandclk='1')thenif(cnt=11)thencnt<=0;elsecnt<=cnt+1;endif;endif;endprocess;process(clk,clear)beginif(clear='1')thentmp<=0;elsif(clk'eventandclk='1')thenif(tmp=1999)thentmp<=0;elsetmp<=tmp+1;endif;endif;endprocess;process(tmp)beginif(clk'eventandclk='1')thenif(tmp<1000)thenclk1<='0';elseclk1<='1';endif;endif;endprocess;process(clk1)beginif(clk1'eventandclk1='1')thenif(cnt1=11)thencnt1<=0;elsecnt1<=cnt1+1;endif;endif;endprocess;process(cnt,cnt1)beginif(clear='1')thenq_temp<="000000

温馨提示

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

评论

0/150

提交评论