您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 电子技术基础实验_实验三
实验报告实验目的:1.学习并掌握硬件描述语言(VHDL或VerilogHDL);熟悉门电路的逻辑功能,并用硬件描述语言实现门电路的设计。2.熟悉中规模器件译码器的逻辑功能,用硬件描述语言实现其设计。3.熟悉时序电路计数器的逻辑功能,用硬件描述语言实现其设计。4.熟悉分频电路的逻辑功能,并用硬件描述语言实现其设计。5.利用已经实现的VHDL模块文件,采用原理图方法,实现0-F计数自动循环显示,频率10Hz。实验设备:1.软件QuartusⅡ9.12.DEO开发板3.数据线以及电脑设备实验内容:1:参考“参考内容1”中给出的与门源程序,编写一个异或门逻辑电路。与门逻辑的VHDL的源文件LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYexa3_1ISPORT(A,B:INSTD_LOGIC;C:OUTSTD_LOGIC);ENDexa3_1;ARCHITECTUREfwmOFexa3_1ISBEGINC=AANDB;END;1)用QuartusII波形仿真验证。2)下载到DE0开发板验证。2:参考“参考内容2”,“参考内容3”,“参考内容4”,综合2,3,4要求,实现0-F计数自动循环显示,频率10Hz。步骤:1)参考“参考内容2”中给出的将8421BCD码转换成0-9的七段码译码器源程序,编写一个将二进制码转换成0-F的七段码译码器。2)参考“参考内容3”中给出的四位二进制加减计数器的源程序,编写一个加法计数器。3)。参考“参考内容4”中给出的50M分频器的源程序,编写一个能输出信号频率10Hz的分频器。2.8421BCD转换成七段码译码器VHDL的源文件LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYexa3_2ISPORT(data_in:INSTD_LOGIC_VECTOR(3DOWNTO0);dis_out:OUTSTE_LOGIC_VECTOR(6DOWNTO0));ENDexa3_2;ARCHITECTUREfwmOFexa3_2ISBEGINPROCESS(data_in)BEGINCASEdata_inISWHEN”0000”=dis_out=”1000000”;--显示0WHEN”0001”=dis_out=”1111001”;--显示1WHEN”0010”=dis_out=”0100100”;--显示2WHEN”0011”=dis_out=”0110000”;--显示3WHEN”0100”=dis_out=”0011001”;--显示4WHEN”0101”=dis_out=”0010010”;--显示5WHEN”0110”=dis_out=”0000010”;--显示6WHEN”0111”=dis_out=”1111000”;--显示7WHEN”1000”=dis_out=”0000000”;--显示8WHEN”1001”=dis_out=”0010000”;--显示9WHENOTHERS=dis_out=”1111111”;--灭灯,不显示ENDCASE;ENDPROCESS;ENDfwm;3.带一个清零端,一个进位输出端十进制器计数器的VHDL源文件LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYexa3_3ISPORT(clk,RST:INSTD_LOGIC;DOUT:OUTSTD_LOGIC_VECTOR(3DOWNTO0);四位计数COUT:OUTSTD_LOGIC);进位位ENDexa3_3;ARCHITECTUREfwmOFexa3_3ISSIGNALQ1:STD_LOGIC_VECTOR(3DOWNTO0);BEGINPROCESS(clk,RST)BEGINIFRST='0'THENQ1=(OTHERS='0');COUT='0';ELSIFclk’EVENTANDclk=’1THENQ1=Q1+1;COUT='0';IFQ1=1001THENQ1=(OTHERS='0');COUT='1';ENDIF;ENDIF;ENDPROCESS;DOUT=Q1;ENDfwm;4.50M分频器的VHDL源文件LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYexa3_4ISPORT(clk:INSTD_LOGIC;clk_out:OUTSTD_LOGIC);ENDexa3_4;ARCHITECTUREfwmOFexa3_4ISCONSTANTm:INTEGER:=25000000;--50M分频到1Hz时=25000000。SIGNALtmp:STD_LOGIC;BEGINPROCESS(clk,tmp)VARIABLEcout:INTEGER:=0;BEGINIFclk'EVENTANDclk='1'THENcout:=cout+1;--计数器+1IFcout=mTHENtmp='0';--计数小于等于25000000,输出0ELSIFcoutm*2THENtmp='1';--计数小于50000000,输出1ELSEcout:=0;--计数器清零ENDIF;ENDIF;ENDPROCESS;clk_out=tmp;--分频器输出ENDfwm;实验结果:异或门逻辑电路:(1)编写异或门代码:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYEX3ISPORT(A,B:INSTD_LOGIC;C:OUTSTD_LOGIC);ENDEX3;ARCHITECTUREfwmOFEX3ISBEGINC=AxorB;END;(2)波形仿真验证:(3)目标器件引脚设置:0-F计数自动循环:(1)代码实现:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;--------------------------------------------------------------------entityEX3isport(clk:instd_logic;--定义动态扫描时钟信号reset:instd_logic;--定义复位信号ledag:outstd_logic_vector(6downto0);--定义数码管的七段输出信号del:outstd_logic_vector(2downto0)--定义八位数码管位置显示信号);endEX3;--------------------------------------------------------------------architecturewhphtaoofEX3issignalclk1Khz:std_logic;--数码管扫描时钟signalclk1hz:std_logic;--计数时钟signalcq:std_logic_vector(3downto0);--计数值beginPROCESS(clk)--产生1hz信号variablecnt:INTEGERRANGE0TO49999999;BEGINIFclk='1'ANDclk'eventTHENIFcnt=49999999THENcnt:=0;ELSEIFcnt25000000THENclk1hz='1';ELSEclk1hz='0';ENDIF;cnt:=cnt+1;ENDIF;ENDIF;endprocess;PROCESS(clk)--产生1Khz信号variablecnt1:INTEGERRANGE0TO49999;BEGINIFclk='1'ANDclk'eventTHENIFcnt1=49999THENcnt1:=0;ELSEIFcnt125000THENclk1khz='1';ELSEclk1khz='0';ENDIF;cnt1:=cnt1+1;ENDIF;ENDIF;endprocess;process(clk1hz,reset)variablecqi:std_logic_vector(3downto0);beginifreset='0'thencqi:=(others='0');--计数器异步复位elsifclk1hz'eventandclk1hz='1'then--检测时钟上升沿ifcqi15thencqi:=cqi+1;elsecqi:=(others='0');endif;--endif;endif;cq=cqi;--计数值向端口输出endprocess;process(clk1KHZ)--数码管动态扫描variabledount:std_logic_vector(2downto0);beginifclk1kHZ'eventandclk1kHZ='1'then--检测时钟上升沿dount:=dount+1;--计数器dount累加endif;del=dount;endprocess;process(cq)--数码管显示begincasecqisWHEN0000=ledag=1000000;--显示0WHEN0001=ledag=1111001;--显示1WHEN0010=ledag=0100100;--显示2WHEN0011=ledag=0110000;--显示3WHEN0100=ledag=0011001;--显示4WHEN0101=ledag=0010010;--显示5WHEN0110=ledag=0000010;--显示6WHEN0111=ledag=1111000;--显示7WHEN1000=ledag=0000000;--显示8WHEN1001=ledag=0010000;--显示9WHEN1010=ledag=0001000;--显示AWHEN1011=ledag=0000011;--显示BWHEN1100=ledag=1000110;--显示CWHEN1101=ledag=0100001;--显示DWHEN1110=ledag=0000110;--显示EWHEN1111=ledag=0001110;--显示Fwhenothers=null;endcase;endprocess;endwhphtao;(2)目标器件引脚设置:故障排除:1.做实现0-F加法加数循环显示时,编写的VHDL文件生成逻辑原理框图失败。因为代码不正确,通过查找资料和咨询老师,最后编译成功。2.在设置引脚的时候,两个del引脚位置没有写引脚号,最后LED灯显示虽然基本正常,但出现一个恒亮的残缺信号。心得体会:通过本实验,我认真学习了VHDL语言;通过这个实验,我已经熟悉VHDL语言、分频原理、七段数码管和实验的操作流程。我也认识到要做到实验的正确必须有严谨认真的实验态度,理论和实践确实不同,实验要求你有较强的动手能力,这样才能保证实验的顺利进行,不至于耽误时间;另外也需要掌握电子技术的基础知识,这样才能保证你设计电路的正确性;。相信以后的实验我在应用这个软件上会得心应手。
本文标题:电子技术基础实验_实验三
链接地址:https://www.777doc.com/doc-2210311 .html