EDA技术与VHDL实验报告电气工程系电子信息工程实验一:1位全加器设计实验目的:1.学习QuartusII9.1集成开发环境的使用方法以及如何建立工程和文件;2.用原理图输入设计法和VHDL文本输入设计法设计1位全加器;3.通过电路仿真和硬件验证,进一步了解1位全加器的功能实验内容:用原理图输入设计法和VHDL文本输入设计法分别设计1位全加器,并下载到CH4实验箱上运行。实验原理:1位全加器可以由两个半加器和一个或门连接而成,因而可根据半加器的电路(如图3-1所示)或真值表写出或门和半加器的VHDL描述。然后根据图3-2写出全加器的顶层描述。I113coasob1001010110001100cosobanotxnor2and2图3-1半加器h_adder电路图及其真值表I113aincoutcoutainbinsumcinbinsumcinf_adderor2afedu3u2u1baccosoBcosoBh_adderAh_adderA图3-2全加器f_adder电路图及其实体模块实验步骤:1.打开实验箱电源;2.输入移位寄存器VHDL程序;3.点击图标,进行分析和综合;4.建立波形文件,进行功能仿真;5.按接线图配置FPGA引脚;6.点击图标,进行编译;7.下载****.sof配置文件到EP3C16Q240C8中;1半加器的vhdl描述有两种,我用的是下面这种,布尔函数描述法:(1)布尔函数描述方法的VHDL源程序如下:LIBRARYIEEE;--半加器描述(1):布尔方程描述方法USEIEEE.STD_LOGIC_1164.ALL;ENTITYh_adderISPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDENTITYh_adder;ARCHITECTUREfh1OFh_adderisBEGINso=NOT(aXOR(NOTb));co=aANDb;ENDARCHITECTUREfh1;(2)或门逻辑描述:LIBRARYIEEE;--或门逻辑描述USEIEEE.STD_LOGIC_1164.ALL;ENTITYor2aISPORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDENTITYor2a;ARCHITECTUREoneOFor2aISBEGINc=aORb;ENDARCHITECTUREone;(3)1位二进制全加器顶层设计描述:LIBRARYIEEE;--1位二进制全加器顶层设计描述USEIEEE.STD_LOGIC_1164.ALL;ENTITYf_adderISPORT(ain,bin,cin:INSTD_LOGIC;cout,sum:OUTSTD_LOGIC);ENDENTITYf_adder;ARCHITECTUREfd1OFf_adderISCOMPONENTh_adder--调用半加器声明语句PORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDCOMPONENT;COMPONENTor2aPORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALd,e,f:STD_LOGIC;--定义3个信号作为内部的连接线。BEGINu1:h_adderPORTMAP(a=ain,b=bin,co=d,so=e);--例化语句u2:h_adderPORTMAP(a=e,b=cin,co=f,so=sum);u3:or2aPORTMAP(a=d,b=f,c=cout);ENDARCHITECTUREfd1;实验结果:实验二:移位寄存器模块实验目的:1设计8位CPU设计中常用的移位寄存器模块2用case语句设计并行输入输出的移位寄存器3体会信号赋值的特性实验内容:编写移位寄存器的VHDL实现程序;通过电路仿真和硬件验证,进一步了解移位寄存器的功能。设计原理:LibraryIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSHIFTISPORT(CLK,C0:INSTD_LOGIC;--时钟和进位输入MD:INSTD_LOGIC_VECTOR(2DOWNTO0);--移位模式控制字D:INSTD_LOGIC_VECTOR(7DOWNTO0);--待加载移位的数据QB:OUTSTD_LOGIC_VECTOR(7DOWNTO0);--移位数据输出CN:OUTSTD_LOGIC);--进位输出ENDENTITY;ARCHITECTUREBEHAVOFSHIFTISSIGNALREG:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALCY:STD_LOGIC;BEGINPROCESS(CLK,MD,C0)BEGINIFCLK‘EVENTANDCLK=’1‘THENCASEMDISWHEN001=REG(0)=C0;REG(7DOWNTO1)=REG(6DOWNTO0);CY=REG(7);--带进位循环左移WHEN010=REG(0)=REG(7);REG(7DOWNTO1)=REG(6DOWNTO0);--自循环左移WHEN011=REG(7)=REG(0);REG(6DOWNTO0)=REG(7DOWNTO1);--自循环右移WHEN100=REG(7)=C0;REG(6DOWNTO0)=REG(7DOWNTO1);CY=REG(0);--带进位循环右移WHEN101=REG(7DOWNTO0)=D(7DOWNTO0);--加载待移数WHENOTHERS=REG=REG;CY=CY;--保持ENDCASE;ENDIF;ENDPROCESS;QB(7DOWNTO0)=REG(7DOWNTO0);CN=CY;--移位后输出ENDBEHAV;实验步骤:1.打开实验箱电源;2.输入移位寄存器VHDL程序;3.点击图标,进行分析和综合;4.建立波形文件,进行功能仿真;5.按接线图配置FPGA引脚;6.点击图标,进行编译;7.下载****.sof配置文件到EP3C16Q240C8中;实验结果:实验三:计数器和移位寄存器设计一、十进制加法计数器实验目的:设计带有异步复位和同步时钟使能的十进制加法计数器。实验内容:编写十进制加法计数器的VHDL实现程序;通过电路仿真和硬件验证,了解变量的使用方法,以及“(OTHERS=X)”的使用方法。设计原理:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT10ISPORT(CLK,RST,EN:INSTD_LOGIC;CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);ENDCNT10;ARCHITECTUREbehavOFCNT10ISBEGINPROCESS(CLK,RST,EN)VARIABLECQI:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFRST='1'THENCQI:=(OTHERS='0');--计数器异步复位ELSIFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿IFEN='1'THEN--检测是否允许计数(同步使能)IFCQI9THENCQI:=CQI+1;--允许计数,检测是否小于9ELSECQI:=(OTHERS='0');--大于9,计数值清零ENDIF;ENDIF;ENDIF;IFCQI=9THENCOUT='1';--计数大于9,输出进位信号ELSECOUT='0';ENDIF;CQ=CQI;--将计数值向端口输出ENDPROCESENDbehav;实验步骤:1.打开实验箱电源;2.输入移位寄存器VHDL程序;3.点击图标,进行分析和综合;4.建立波形文件,进行功能仿真;5.按接线图配置FPGA引脚;6.点击图标,进行编译;实验结果:1、引脚图:二、移位寄存器设计实验目的:设计带有同步并行预置功能的8位右移移位寄存器。实验内容:CLK是移位时钟信号,DIN是8位并行预置数据端口,LOAD是并行数据预置使能信号,QB是串行输出端口设计原理:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSHFRTIS--8位右移寄存器PORT(CLK,LOAD:INSTD_LOGIC;DIN:INSTD_LOGIC_VECTOR(7DOWNTO0);QB:OUTSTD_LOGIC);ENDSHFRT;ARCHITECTUREbehavOFSHFRTISBEGINPROCESS(CLK,LOAD)VARIABLEREG8:STD_LOGIC_VECTOR(7DOWNTO0);BEGINIFCLK'EVENTANDCLK='1'THENIFLOAD='1'THENREG8:=DIN;--由(LOAD='1')装载新数据ELSEREG8(6DOWNTO0):=REG8(7DOWNTO1);ENDIF;ENDIF;QB=REG8(0);--输出最低位ENDPROCESS;ENDbehav;实验步骤:1.打开实验箱电源;2.输入移位寄存器VHDL程序;3.点击图标,进行分析和综合;4.建立波形文件,进行功能仿真;5.按接线图配置FPGA引脚;6.点击图标,进行编译;7.下载****.sof配置文件到EP3C16Q240C8中;实验结果:实验四:七段数码显示译码器和数控分频器设计一.七段数码显示译码器实验目的:学习7段数码显示译码器设计;学习VHDL的CASE语句应用及多层次设计方法。实验内容:在QuartusII上对该例进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形。提示:用输入总线的方式给出输入信号仿真数据,仿真波形示例下图所示。引脚锁定及硬件测试设计原理:7段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDECL7SISPORT(A:INSTD_LOGIC_VECTOR(3DOWNTO0);LED7S:OUTSTD_LOGIC_VECTOR(6DOWNTO0));END;ARCHITECTUREoneOFDECL7SISBEGINPROCESS(A)BEGINCASEAISWHEN0000=LED7S=0111111;WHEN0001=LED7S=0000110;WHEN0010=LED7S=1011011;WHEN0011=LED7S=1001111;WHEN0100=LED7S=1100110;WHEN0101=LED7S=1101101;WHEN0110=LED7S=1111101;WHEN0111=LED7S=0000111;WHEN1000=LED7S=1111111;WHEN1001=LED7S=1101111;WHEN1010=LED7S=1110111;WHEN1011=LED7S=1111100;WHEN1100=LED7S=0111001;WHEN1101=LED7S=1011110;WHEN1110=LED7S=1111001;WHEN1111=LED7S=1110001;WHENOTHERS=NULL;ENDCASE;ENDPROCESS;END;实验步骤:1.打开实验箱电源;2.输入移位寄存器VHDL程序;3.点击图标,进行分析和综合;4.建立波形文件,进行功能仿真;5.按接线图配置FPGA引脚;6.点击图标,进行编译;7.下载****.sof配置文件到EP