(EDA实验报告)201400121184
山东大学信息科学与工程学院
EDA实验报告
姓名:吴蔓
学号:201400121184
班级:电信工一班
2016.5.31
实验14选1数据选择器的设计
一、实验目的
1.学习EDA软件的基本操作。
2.学习使用原理图进行设计输入。
3.初步掌握器件设计输入、编译、仿真和编程的过程。
4.学习实验开发系统的使用方法。
二、实验仪器与器材
1.EDA开发软件一套
2.微机一台
3.实验开发系统一台
4.打印机一台
三、实验说明
本实验通过使用基本门电路完成4选1数据选择器的设计,初步掌握EDA设计方法中的设计输入、编译、综合、仿真和编程的过程。实验结果可通过实验开发系统验证,在实验开发系统上选择高、低电平开关作为输入,选择发光二极管显示输出电平值。
本实验使用Quartus II 软件作为设计工具,要求熟悉Quartus II 软件的使用环境和基本操作,如设计输入、编译和适配的过程等。
实验中的设计文件要求用原理图方法输入,实验时,注意原理图编辑器的使用方法。例如,元件、连线、网络名的放置方法和放大、缩小、存盘、退出等命令的使用。学会管脚锁定以及编程下载的方法等。
四、实验要求
1.完成4选1数据选择器的原理图输入并进行编译;
2.对设计的电路进行仿真验证;
3.编程下载并在实验开发系统上验证设计结果。
实验程序:
library ieee;
use ieee.std_logic_1164.all;
entity mux4 is
port (input:in std_logic_vector(3 downto 0);
sel:in std_logic_vector(1 downto 0);
y: out std_logic);
end mux4;
architecture rtl of mux4 is
begin
process(sel,input)
begin
if sel=“00”then
y<=input(0);
elsif sel=“01”then
y<=input(1);
elsif sel=“10”then
y<=input(2);
else
y<=input(3);
end if;
end process;
end rtl;
实验结果
4选1数据选择器的截图:
仿真波形图:
实验2 四位比较器
一、实验目的
1.设计四位二进制码比较器,并在实验开发系统上验证。
2.学习层次化设计方法。
二、实验仪器与器材
1.EDA 开发软件 一套
2.微机 一台
3.实验开发系统 一台
4.打印机 一台
5.其它器件与材料 若干
三、实验说明
本实验实现两个4位二进制码的比较器,输入为两个4位二进制码0123A A A A 和
0123B B B B ,输出为M (A=B )
,G (A>B )和L (A
四、实验要求
1.用硬件描述语言编写四位二进制码 比较器的源文件; 2.对设计进行仿真验证;
3.编程下载并在实验开发系统上进行硬件验证
实验程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity vhdl_cmp is
port(A:in std_logic_vector(3 downto 0);
B:in std_logic_vector(3 downto 0);
m,g,l:out std_logic);
end vhdl_cmp ;
architecture behave of vhdl_cmp is
begin
p1:process(A,B)
begin
if(A>B)then
G<='1';M<='0';L<='0';elsif(A
G<='0';M<='0';L<='1';elsif(A=B)then
G<='0';M<='1';L<='0';else
G<='1';M<='1';L<='1';end if; end process p1;
end behave;
实验结果
仿真波形图:
功能:
时序仿真:
管脚分配:
实验3 并行加法器设计
一、试验目的
1.设计一个4位加法器。
2.体会用VHDL进行逻辑描述的优点。
3,熟悉层次化设计方法。
二、试验仪器与器材
1.EDA开发软件一套
2.微机一台
3.试验开发系统一台
4.打印机一台
5.其他器材和材料若干
三、试验说明
本试验实现一个4位二进制数加法器,其功能框图如图所示。试验时用高低电平开关作为输入,用数码管作为输出(或用发光二极管),管脚锁定可根据试验系统自行安排。四、实验要求
1.用硬件描述语言编写4位二进制数全加器的源文件;
2.对设计文件进行编译;
3.仿真设计文件;
4.编程下载并进行试验验证。
实验程序:
library ieee;
use ieee.std_logic_1164.all;
entity add4 is
port(a,b: in std_logic_vector(3 downto 0);
cin: in std_logic;
sum: out std_logic_vector(3 downto 0);
count: out std_logic);
end add4;
architecture behavioral of add4 is
begin
process(a,b,cin)
variable sum1: std_logic_vector(3 downto 0);
variable carry: std_logic;
begin
carry:=cin;
for i in 0 to 3 loop
sum1(i):=(a(i) xor b(i)) xor carry;
carry:=(a(i) and b(i)) or (carry and (a(i) or b(i))); end loop;
sum<=sum1;
count<=carry;
end process ;
end behavioral;
实验结果
仿真波形图:
管脚分配:
实验4 7人表决器
一.实验目的
学习表决器电路的设计方法并体会使用HDL进行设计的方法和优点。
二、实验仪器与器材
EDA开发软件一套
微机一台
实验开发系统一台
打印机一台
三、实验原理
用个开关作为表决器的7个输入变量,输入变量为‘1’时表示“赞同”;输入变量为‘0’时表示不赞同。输出接到一二极管上,灯亮表示通过,灯不亮表示不同。采用行为描述的设计,用一变量count表示选举通过的总人数,即7个开关中按下的总数,如果count>3,则表示通过。
实验程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity seven is
port(
a:in std_logic_vector(6 downto 0);
y:out std_logic);
end seven;
architecture one of seven is
begin
process(a)
variable i:std_logic_vector(2 downto 0);
begin
i:="000";
for j in 0 to 6 loop
if(a(j)='1')then i:=i+1;
else i:=i;
end if;
end loop;
译码程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity my_translate is
port(
a:in std_logic_vector(3 downto 0);
rst:std_logic;
dataout:out std_logic_vector(6 downto 0));
end my_translate;
architecture one of my_translate is
begin
process(a)
begin
case a is
when"0000"=>dataout<="0000001";
when"0001"=>dataout<="1001111";
when"0010"=>dataout<="0010010";
when"0011"=>dataout<="0000110";
when"0100"=>dataout<="1001100";
when"0101"=>dataout<="0100100";
when"0110"=>dataout<="0100000";
when"0111"=>dataout<="0001111";
when"1000"=>dataout<="0000000";
when"1001"=>dataout<="0000100";
when others=>dataout<="1111111";
end case;
end process;
end one;
if i>3 then y<='1';
else y<='0';
end if;
end process;
end one;
实验结果
管脚分配:
时序仿真:
功能仿真
实验5 计数器设计
一、实验目的
计数器是实际中最为常用的时序电路模块之一,本实验的主要目的是掌握使用HDL描述计数器类型模块的基本方法。
二、实验仪器与器材
1.EDA开发软件一套
2.微机一台
3.实验开发系统一台
4.打印机一台
5.其他器材与材料若干
三、实验说明
计数器是数字电路系统中最重要的功能模块之一,设计时可以采用原理图或HDL语言完成。下载验证时的计数时钟可选连续或单脉冲,并用数码管显示计数值。
四、实验要求
1.设计一个带有计数允许输入端、复位输入端和进位输入端的十进制计数器。
2.编制仿真测试文件,并进行功能仿真。
3.下载并验证计数器功能。
4.为上述设计建立元件符号。
5.在上述基础上分别设计按8421BCD码和二进制计数的100进制同步计数器。
实验程序
十进制:
方法一:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt10 is
port(res:in std_logic;
clkin:in std_logic;
ep:in std_logic;
cout: out std_logic ;
sout:out std_logic_vector(3 downto 0));
end cnt10;
architecture behave of cnt10 is
signal count :std_logic_vector(3 downto 0);
begin
process(res,clkin,ep)
begin
if(res='1') then count<="0000";cout<='0';
elsif(ep='0' and rising_edge(clkin))
then if(count="1001")
then cout<='1';count<="0000";
else count<=count+1;cout<='0';
end if;
end if;
end process;
sout<=count;
end;
方法二:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity count is port(clk:in std_logic;
clr:in std_logic;en:in std_logic;
q:out std_logic_vector(3 downto 0);
cin:out std_logic);
end count;
architecture count of count is signal q0:std_logic_vector(3 downto 0); begin
q<=q0;
process(clk,clr)begin
if(clr='1')then q0<="0000";
cin<='0';
elsif(clk'event and clk='0')then
if(q0="1000")then
q0<=q0+1;
cin<='1';
else q0<=q0+1;
cin<='0';
if (q0="1001")then
q0<="0000";
end if;
end if;
end if;
end process;
end count;
七段译码管:
library ieee;
use ieee.std_logic_1164.all;
entity shumaguan is
port (data_in :in std_logic_vector(3 downto 0);
data_out : out std_logic_vector(6 downto 0)); end shumaguan;
architecture behave of shumaguan is
begin
process(data_in)
begin
case data_in is
when "0000"=>data_out<="1111111";
when "0001"=>data_out<="1111001";
when "0010"=>data_out<="0100100";
when "0011"=>data_out<="0110000";
when "0100"=>data_out<="0011001";
when "0101"=>data_out<="0010010";
when "0110"=>data_out<="1111111";
when "0111"=>data_out<="1111111";
when "1000"=>data_out<="1111111";
when "1001"=>data_out<="1111111";
when "1010"=>data_out<="1111111";
when "1011"=>data_out<="1111111";
when "1100"=>data_out<="1111111";
when "1101"=>data_out<="1111111";
when "1110"=>data_out<="1111111";
when "1111"=>data_out<="1111111";
end case;
end process;
end behave;
分频器:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY c IS
GENERIC(N:INTEGER:=25);
PORT(
CLKIN:IN STD_LOGIC;
CLKOUT:OUT STD_LOGIC
);
END c;
ARCHITECTURE A OF MY_EDA_fpin IS
SIGNAL CNT:STD_LOGIC_VECTOR(N-1 DOWNTO 0); BEGIN