EDA技术基础实验报告
学院:信息科学与技术学院
班级:
姓名:
学号:
实验一 MAX—plusII及开发系统使用
一、实验目的
1、熟悉利用MAX-plusⅡ的原理图输入方法设计简单的组合电路
2、掌握层次化设计的方法
3、熟悉DXT-BⅢ型EDA试验开发系统的使用
二、主要实验设备
PC 机一台(中档以上配置),DXT-B3 EDA实验系统一台。
三、实验原理
数字系统设计系列实验是建立在数字电路基础上的一个更高层次的设计性实验。它是借助可编程逻辑器件(PLD),采用在系统可编程技术(ISP),利用电子设计自动化软件(EDA),在计算机(PC)平台上进行的。
因为本实验是在计算机平台上进行,因此实验方式,实验手段和实验仪器与传统的实验有很大的区别,主要体现在以下几个方面:
1、实验器材集中化,所有实验基本上在一套实验设备上进行。
传统的实验每作完一个实验,实验器材基本上都要变动(个别除外)。而做本实验时,只要在计算机上把不同的程序输进去,其它步骤所有实验都一致;
2、实验耗材极小(基本上没有耗材);
3、在计算机上进行,自动化程度高,人机交互性好,修改、验证实验简单;
4、下载后,实验结果清晰;
5、实验仪器损耗少,维护简单;
下面,就本套实验设备做一个简单的介绍。
1、Max+PlusII软件的安装步骤:
第一步:系统要求
奔3CPU以上,128M内存以上,4G 以上硬盘,98 操作系统(98或Me操作系统才可以下载,其他操作系统下载必须安装驱动,否则只能仿真,如果只是进行仿真的话,对系统没要求)
第二步:安装
点击安装可执行文件进行安装,安装完毕后会弹出一对话框,点击是或否都可以。
第三步:将安装文件夹中的License 文件夹打开,里面有一个License.bat 注册文件,
将此文件复制到你的安装目录下(你的安装目录可放在任一个驱动器下,然后建立一个Max10的文件夹,将系统安装在此文件夹中,安装后此文件夹中会有三个文件夹)的任一个文件夹中,要清楚位置。
第四步:注册
启动Max+PlusII 软件,可以从开始-->程序-->Altera-->Max+PlusII 打开,也可以建立一个快捷方式在桌面上。启动软件后,会有弹出一个对话框,点击是或否都可以,然后进入系统。点击菜单中的Options,然后选中License菜单项,打开弹出一个注册对话框,在注册文件路径中打开你第三步中复制位置的License 文件,然后点击OK,注册完毕。
2、 max+plusⅡ软件基本设计流程
实验二全加器的设计
一、实验目的
学习加法器的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。
二、实验设备
PC机一台、EDA教学实验系统一台、下载电缆一根(已接好)。
三、实验要求
详细描述4位全加器的设计过程,给出各层的电路原理图以及对应的仿真波形。
四、实验原理
1位半加器可以由与、或、非等基本门构成,如下图所示。
半加器电路原理图
1位全加器可以由两个半加器和一个或门构成,如下图所示。
全加器电路原理图
根据实验原理中,采用层次法设计一个4位全加器。
五、实验步骤
1.或门VHDL代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY OR2 IS
PORT(A,B:IN STD_LOGIC;C:OUT STD_LOGIC);
END ENTITY OR2;
ARCHITECTURE RTL OF OR2 IS
BEGIN
C<= A OR B;
END ARCHITECTURE RTL;
或门仿真波形图
分析:A、B为输入端,C为输出端,由以上仿真图可以看出,VHDL程序正确。
2.1位半加器VHDL代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY H_ADDER IS
PORT (A,B:IN STD_LOGIC;
CO,SO:OUT STD_LOGIC);
END ENTITY H_ADDER;
ARCHITECTURE RTL OF H_ADDER IS
BEGIN
SO<=A AND (A NAND B);
CO<=NOT(A NAND B);
END ARCHITECTURE RTL;
1位半加器仿真波形图
分析:A、B为输入端,SO为计数输出端,CO为进位端,由以上仿真图可以看出,VHDL 程序正确。
由原理可知,两个半加器和一个或门相连组成一位全加器,如下图所示:
1位全加器电路原理图
3.全加器VHDL代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY FULL_ADDER IS
PORT (AIN,BIN,CIN :IN STD_LOGIC;
COUT,SUM :OUT STD_LOGIC);
END ENTITY FULL_ADDER;
ARCHITECTURE RTL OF FULL_ADDER IS
SIGNAL S:STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
S<=('0'&AIN)+BIN+CIN;
SUM<=S(0);
COUT<=S(1);
END RTL;
1位全加器波形仿真图(有延时)
分析:CIN、BIN为输入端,AIN为低位进位端,SUM为计数输出端,COUT为高位进位端,从以上结果可看出,波形在200ns的时候产生“毛刺”,且波形在400ns、500ns和600ns 的时候存在“延时”。
低位全加器的进位端(CONT)接高位全加器的低位进位端(AIN),则组成4位全加器如下图所示:
4位全加器级联图
B(4-1)、C(4-1)为输入端,S(4-1)为计数输出端,A为低位进位端, C为高位进位端,其波形仿真图如下图所示(注意:编译之前必须将文件设为当前文件):
4位全加器波形仿真图
分析:由波形可知,仿真结果正确,但存在延时,譬如,当低端进位A高电平时,S端输出的A(H)延时比较长。
选择器件“Assign”|“Device”|“MAX7000S”|“EPM7128SLC84-6”,并根据下载板上的标识对管脚进行配置。然后下载,进行硬件测试,检验结果是否正确。
六、问题与讨论:
如何避免“延时”?
答:在VHDL程序中改用变量赋值。
实验三含异步清0和同步时钟使能的十进制计数器
一、实验目的
学习时序电路的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。
二、实验原理
设计一个含异步清零,同步时钟使能的十进制计数器,要求 rst是异步清零信号,高电平有效;ena为使能端,高电平有效;clk是时钟信号;outy[3..0]是4位数据输出端。
三、实验内容
在MAX+plusII上依照实验原理进行设计、编辑、编译、综合、适配、仿真。详细描述示例的功能特点,给出其所有信号的时序仿真波形。
四、实验步骤
1.计数器的VHDL代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT4B IS
PORT (CLK : IN STD_LOGIC;
RST : IN STD_LOGIC;
ENA : IN STD_LOGIC;
OUTY : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COUT : OUT STD_LOGIC );
END CNT4B;
ARCHITECTURE behav OF CNT4B IS
SIGNAL CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
P_REG: PROCESS(CLK, RST, ENA)
BEGIN
IF RST = '1' THEN CQI <= "0000";
ELSIF CLK'EVENT AND CLK = '1' THEN
IF ENA = '1' THEN
IF CQI="1001" THEN CQI<="0000";
ELSE CQI <= CQI + 1;
END IF;
ELSE CQI<="0000";
END IF;
END IF;
OUTY <= CQI ;
END PROCESS P_REG ;
COUT<=CQI(3);
END behav;
2.计数器的仿真波形图
十进制计数器的仿真波形图
分析:实验结果正确。如图所示,当RST(复位端)为1时,计数器不工作。当ENA (使能端)为1时,计数器工作。当CQI(3)为1时,COUT(进位端)有效。
五、问题与讨论
在上例中是否可以不定义信号 CQI,而直接用输出端口信号完成加法运算,即 : OUTY <= OUTY + 1 ?
答:在源代码中必须要定义信号CQI,因为VHDL里面规定输出端口不能做为赋值来用,而OUTY<=OUTY+1,已经把OUTY当成赋值来用了,同样道理,输入端口也不能用于被赋值。
实验四秒表的设计
一、实验目的
1、熟练利用VHDL语言进行数字系统设计;
2、掌握数字系统的设计方法——自顶向下的设计思想;
3、掌握计数器的设计与使用;
4、根据秒表的功能要求设计一个秒表。
二、实验设备
PC机一台、EDA教学实验系统一台、下载电缆一根(已接好)、导线若干。
三、实验要求
1、有秒、分计数,数码扫描显示输出;
2、有异步清零端;
3、在功能允许的情况下,可自由发挥。
四、实验原理
1、功能描述:
秒表是一种计时的工具,有着很广泛的用途。本实验中的秒表要求有一个功能按钮——清零按钮,当按下此按钮时,秒表清零。在数码管上采用扫描显示输出。
2、基本原理:
本实验中用到的主要元件有计数器、数据选择器、译码器。秒、分都是60 进制计数,所以必须采用两个60 进制的计数器。
3、自顶向下的设计方法:
自顶向下的设计方法是数字系统设计中最常用的设计方法,也是基于芯片的系统设计的主要方法。它的基本原理框图如下:
自顶向下的设计方法利用功能分割手段将设计由上到下进行层次化和模块化,即分层次、分模块进行设计和仿真。功能分割时,将系统功能分解为功能块,功能块再分解为逻辑块,逻辑块再分解为更少的逻辑块和电路。如此分割,逐步的将系统细化,将功能逐步具体化,模块化。高层次设计进行功能和接口描述,说明模块的功能和接口,模块功能的更详细描述在下一设计层次说明,最底层的设计才涉及具体寄存器和逻辑门电路等实现方式的描述。(注意:这里所说的模块可能是芯片或电路板。)
五、实验步骤
1.计数器(时钟)VHDL代码
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
entity clock is
port ( clk,rst: in std_logic;
co: out std_logic;
qm:out std_logic_vector(3 downto 0);
qn:out std_logic_vector(3 downto 0));
end entity;
architecture rtl of clock is
signal qh:std_logic_vector(3 downto 0);
signal ql:std_logic_vector(3 downto 0);
begin
process(clk,rst)
begin
if qh="0101" and ql="1001" then co<='1';
else co<='0';
end if;
if rst='1' then qh<="0000";ql<="0000";
elsif clk'event and clk='1' then
if ql="1001" then
if qh="0101" then qh<="0000";ql<="0000";
else qh<=qh+"0001";ql<="0000";
end if;
else ql<=ql+"0001";
end if;
end if;
end process;
qm<=qh;
qn<=ql;
end rtl;
计数器(时钟)的仿真波形图
分析:RST为复位端,qm为十位,qn为个位。当复位端为高电平时,计数器不工作,当复位端为低电平时,计数器正常工作,个位为9时进位,十位为5时进位。
2.计数器(位选)VHDL代码
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
entity counter2 is
port ( clk,rst: in std_logic;
q:out std_logic_vector(1 downto 0));
end entity;
architecture rtl of counter2 is
signal qq:std_logic_vector(1 downto 0);
begin
process(clk,rst)
begin
if rst='1' then
qq<="00";
elsif clk'event and clk='1' then
if qq="11" then
qq<="00";
else
qq<=qq+1;
end if;
end if;
end process;
q<=qq;
end rtl;
计数器(位选)的仿真波形图
分析:当复位端(rst)为高电平时,计数器显示为0,当复位端(rst)为低电平时,
计数器正常工作,0至3循环显示。
3.四位数据选择器VHDL代码
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
entity select1 is
port ( a: in std_logic_vector(3 downto 0);
b: in std_logic_vector(3 downto 0);
c: in std_logic_vector(3 downto 0);
d: in std_logic_vector(3 downto 0);
s: in std_logic_vector(1 downto 0);
data: out std_logic_vector(3 downto 0)); end entity;
architecture art of select1 is
signal dataa:std_logic_vector(3 downto 0);
begin
process(a,b,c,d,s)
begin
case s is
when"00"=>dataa<=a;
when"01"=>dataa<=b;
when"10"=>dataa<=c;
when"11"=>dataa<=d;
when others=>dataa<=dataa;
end case;
end process;
data<=dataa;
end art;
四位数据选择器的仿真图
分析:如上图所示,仿真结果正确。a——d端依次为0——3端,s端为数据选择端,data 为数据输出端。
4.3-8译码器的VHDL代码
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity translate3_8 is
port(data:in std_logic_vector(3 downto 0);
show:out std_logic_vector(7 downto 0));
end entity;
architecture art of translate3_8 is
signal showw:std_logic_vector(7 downto 0);
begin
process(data)
begin
case data is
when"0000"=>showw<="00111111";
when"0001"=>showw<="00000110";
when"0010"=>showw<="01011011";
when"0011"=>showw<="01001111";
when"0100"=>showw<="01100110";
when"0101"=>showw<="01101101";
when"0110"=>showw<="01111101";
when"0111"=>showw<="00000111";
when"1000"=>showw<="01111111";
when"1001"=>showw<="01101111";
when others=>showw<="00000000";
end case;
end process;
show<=showw;
end architecture art;
3-8译码器的仿真图
分析:仿真结果正确。data为数据输入端,范围从0至9(二进制),show为数据输出端,直接连接显示器,代码在上述程序中已给出。
5.2-4译码器的VHDL代码
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity translate2_4 is
port(data:in std_logic_vector(1 downto 0);
show:out std_logic_vector(3 downto 0));
end entity;
architecture art of translate2_4 is
signal showw:std_logic_vector(3 downto 0);
begin
process(data)
begin
case data is
when"00"=>showw<="0001";
when"01"=>showw<="0010";
when"10"=>showw<="0100";
when"11"=>showw<="1000";
when others=>showw<="0000";
end case;
end process;
show<=showw;
end architecture art;
2-4译码器的仿真结果图
分析:data为数据输入端,范围从0至3(二进制),show为数据输出端,连接4个显示器,进行位选。
将各个器件连接,得总的原理图如下:
秒表的电路原理图
秒表的仿真结果图
分析:show[3..0]端为位选段,show[7..0]端为显示端。CLK2为位选信号,CLK1为计数信号。RST为复位信号。
6.下载到实验箱