1内蒙古工业大学信息工程学院实验报告课程名称:EDA技术与CPLD/FPGA开发应用简明教程实验类型:验证性□综合性□设计性■实验室名称:信息学院机房班级:通信10-1班学号:姓名:成绩:实验日期:2013年05月17日2实验一MAX+PLUSⅡ软件的使用一、实验目的:1、学习VHDL语言的基本指令及编程方法。2、熟悉在PC机上运用MAX+PLUSⅡ软件和EPLD进行电路设计的设计和仿真过程。二、实验设备:PC机三、实验原理1、软件操作方法见第五章。2、组合逻辑电路的设计。(1)原理图输入法。写出2-4译码器的真值表,根据真值表,从Prim库中调出元件做出电路原理图。(2)VHDL输入法。程序应包括库说明语句、实体说明、构造体说明,可用IF语句(还可选用其它语句)语句实现2-4译码器。3、时序逻辑电路的设计。(1)原理图输入法。参照数字逻辑电路中学到的知识,时序逻辑电路的设计分为以下几步:画出状态转换图;状态分配和化简;列出状态方程和输出方程;选择触发器(例:选择D触发器,Prim库中的DFF),做电路原理图。之后按照第五章的步骤进行编译和仿真。(2)VHDL输入法。画出状态转换图,用VHDL语言描述该状态机,之后按照第五章的步骤进行编译和仿真。四、实验内容:设计一个2-4译码器,并验证其功能。(1)用原理图输入法设计,并仿真设计结果。(2)用VHDL语言进行设计,并仿真设计结果。五、实验报告要求:1、写出VHDL语言源程序,并画出仿真得到的时序波形图。程序:libraryieee;useieee.std_logic_1164.all;entitydecoder2_4isport(a,b,g1,g2a,g2b:instd_logic;y:outstd_logic_vector(3downto0));enddecoder2_4;architecturertlOFdecoder2_4issignalindata:std_logic_vector(1downto0);beginindata=b&a;process(indata,g1,g2a,g2b)begin3if(g1='1'andg2a='0'andg2b='0')thencaseindataiswhen00=y=1110;when01=y=1101;when10=y=1011;when11=y=0111;whenothers=y=XXXX;endcase;elsey=1111;endif;endprocess;endrtl;2、写出2-4译码器除采用IF语句外,还可采用什么语句实现。(1)使用条件选择IFELSEIF语句;(2)使用PROCESS语句;(3)使用SLL逻辑运算符。3、写出对设计输入方法的优略心得。利用EDA开发工具进行组合逻辑电路的设计,采用自顶向下的设计方法,需要注意很多细节性的问题。本实验就是典型的先总后分的的自顶向下结构设计,符合EDA设计的基本思想,采用了简单的when语句,将所有情况一一罗列即可,但是此设计方法适用于简单的程序,对于复杂程序则使用起来会很繁琐,不建议采用。4实验二组合逻辑电路的设计一、实验目的:1、掌握用VHDL语言和EPLD进行组合逻辑电路的设计方法。2、加深对EPLD设计全过程的理解。3、掌握组合逻辑电路的静态测试方法。二、实验设备:1、PC机2、EDA实验箱(主芯片是ALTERAEPM7128SLC84-15)。三、实验内容:用VHDL语言输入法设计一个四舍五入判别电路,其输入为8421BCD码,要求当输入大于或等于5时,判别电路输出为1;反之为0。四、实验报告要求:程序清单:libraryieee;useieee.std_logic_1164.all;entityroundisport(x:instd_logic_vector(3downto0);y:outbit);endround;architectureroundingofroundisBeginprocess(x)Begincasexiswhen0000=y='0';when0001=y='0';when0010=y='0';when0011=y='0';when0100=y='0';when0101=y='1';when0110=y='1';when0111=y='1';when1000=y='1';when1001=y='1';whenothers=null;endcase;endprocess;endrounding;5仿真结果:BCD码用二进制数表示十进制数,小于5输出低电平,大于5则输出高电平,产生进位信号,从而仿真结果得到下面的图形。实验三计数器及时序电路一、实验目的:1、了解时序电路的VHDL语言设计方法。2、了解同步计数器的使用方法。3、理解时序电路和同步计数器加译码电路的联系,设计任意编码计数器。二、实验设备:1、PC机2、EDA实验箱(主芯片是ALTERAEPM7128SLC84-15)。三、实验内容:1、用VHDL语言输入法设计一个同步四位二进制加法计数器和六进制同步计数器。2、用74LS161两个宏连接成八位二进制同步计数器。3、用74LS161宏,同时采用清零和置数法组成六进制、十进制和六十进制计数器。4、设计一个4-7译码器,并验证其功能。四、实验报告:1、六进制程序清单:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycount6isport(clk,clr,en:instd_logic;carry:outstd_logic;q:outstd_logic_vector(2downto0));endcount6;architecturebehaofcount6issignalcntout:std_logic_vector(2downto0);Beginq=cntout;process(clk)6Beginifclk'eventandclk='1'thenifclr='1'thencntout=000;carry='0';elsifen='1'thenifcntout=101thencntout=000;carry='1';elsecntout=cntout+'1';carry='0';endif;endif;endif;endprocess;endbeha;仿真结果:2、十进制程序清单:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycount10isport(clk,clr,en:instd_logic;carry:outstd_logic;7q:outstd_logic_vector(3downto0));endcount10;architecturebehaofcount10issignalcntout:std_logic_vector(3downto0);Beginq=cntout;process(clk)Beginifclk'eventandclk='1'thenifclr='1'thencntout=0000;carry='0';elsifen='1'thenifcntout=1001thencntout=0000;carry='1';elsecntout=cntout+'1';carry='0';endif;endif;endif;endprocess;endbeha;仿真结果:3、六十进制程序清单:8libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycount60isport(clk,clr,en:instd_logic;carry:outstd_logic;q:outstd_logic_vector(6downto0));endcount60;architecturebehaofcount60iscomponentcount10port(clk,clr,en:instd_logic;carry:outstd_logic;q:outstd_logic_vector(3downto0));endcomponent;componentcount6port(clk,clr,en:instd_logic;carry:outstd_logic;q:outstd_logic_vector(2downto0));endcomponent;signaltempqa:std_logic_vector(3downto0);signaltempqb:std_logic_vector(2downto0);signaltempca:std_logic;beginu0:count10portmap(clk,clr,en,tempca,tempqa);u1:count6portmap(clk,clr,tempca,carry,tempqb);q=tempqb&tempqa;endbeha;仿真结果:4、4-7译码器程序清单:libraryieee;useieee.std_logic_1164.all;entitydecoderis9port(input:instd_logic_vector(3downto0);output:outstd_logic_vector(6downto0));enddecoder;architecturebehaofdecoderisbeginprocess(input)begincaseinputiswhen0000=output=0111111;--0when0001=output=0000110;--1when0010=output=1011011;--2when0011=output=1001111;--3when0100=output=1100110;--4when0101=output=1101101;--5when0110=output=1111101;--6when0111=output=0000111;--7when1000=output=1111111;--8when1001=output=1101111;--9when1010=output=1110111;--Awhen1011=output=1111100;--bwhen1100=output=0111001;--Cwhen1101=output=1011110;--dwhen1110=output=1111001;--Ewhen1111=output=1110001;--Fwhenothers=null;endcase;endprocess;endbeha;仿真结果:10实验四扫描驱动显示电路设计(设计性实验)一、实验目的1.了解实验箱中8位七段数码管显示模块的工作原理。2.熟悉VHDL硬件描述语言及设计专用数字集成电路的自顶向下的设计思想。3.掌握利用CPLD/FPGA设计8位七段数码管扫描显示驱动电路的方法。二、实验设备1.计算机(配置为:P4CPU128M内存);2.MAX+plusⅡ开发工具软件;3.EL教学实验箱;4.万用表;5.DS5022M型双踪数字示波器;三、扫描原理为了减少8位显示信号的接口连接线,实验箱中的数码显示采用扫描显示工作模式。即8位数码管的七段译码输入(a,b,c,d,e,f,g)是并联在一起的,而每一个数码管是通过一个3位选择sel[2..0]来选定的。sel与数码管之间是一3-8译码的关系,即sel为“000”时,选中第一个数码管,sel为“001”时,选中时,选中第八个数码管。四、设计任务本实验要求在给定子模块程序的基础上,画出设计原理图