eda实验报告(全加器,四选一数据选择器,交通灯)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浙师大数理与信息工程学院
学生实验报告
实验一简单组合逻辑电路设计
1、实验目的
熟悉软件使用,了解CPLD设计的过程。
用画逻辑图和直接使用VHDL语言的两种方法进行逻辑设计。
2、实验内容
用开关K7,K8作为输入设置,从输出指示LED观察OUT21,22,23,24等的变化。
3、实验条件
EDA实验箱、QUARTUS2软件
4、实验设计
原理图
VHDL源程序
library ieee;
use ieee.std_logic_1164.all;
entity shier is
Port( k7,k8:in std_logic;
out20,out21,out22,out23,out24:out std_logic); end shier;
architecture sr of shier is
begin
out20<=k7;
out21<=not k7;
out22<=k7 and k8;
out23<=k7 or k8;
out24<=k7 xor k8;
end sr;
波形仿真
实验二三八译码器电路设计
1、实验目的
熟悉软件使用,了解CPLD设计的过程。
用画逻辑图和直接使用VHDL语言的两种方法进行逻辑设计。
2、实验内容
用开关K1,K2,K3,K4作为输入设置,组成一个高输出有效的三八译码器,从输出指示LED观察OUT1到OUT8随K1,K1,K3置值的改变而引起相应的变化。
3、实验条件
EDA实验箱、QUARTUS2软件
4、实验设计
原理图
VHDL源程序
library ieee;
use ieee.std_logic_1164.all;
entity shisan is
port( a,b,c:in std_logic;
y:out std_logic_vector(7 downto 0));
end shisan;
architecture one of shisan is
begin
process(a,b,c)
variable d:std_logic_vector(2 downto 0);
begin
d:=(c&b&a);
if d<="000" then
y<="00000001";
elsif d<="001" then
y<="00000010";
elsif d<="010" then
y<="00000100";
elsif d<= "011"then
y<="00001000";
elsif d<= "100"then
y<="00010000";
elsif d<="101"then
y<="00100000";
elsif d<="110" then
y<="01000000";
elsif d<="111" then
y<="10000000";
else null;
end if;
end process;
end one;
波形仿真
实验四四选一数据选择器电路设计
1、实验目的
熟悉和了解VHDL语言涉及数字电路的流程,掌握完整的EDA设计方法。
2、实验内容
用VHDL语言编程实现一个四选一电路。
开关K5,K6作为控制端来确定K1,K2,K3,K4四个输入中的一个作为输入信号,并将结果从OUT1输出。
3、实验条件
EDA实验箱、QUARTUS2软件
4、实验设计
VHDL源程序
library ieee;
use ieee.std_logic_1164.all;
entity shisi is
port( s1,s2,k1,k2,k3,k4:in std_logic;
y:out std_logic);
end shisi;
architecture mux of shisi is
signal s:std_logic_vector(1 downto 0); begin
s<=(s1&s2);
process(s,s1,s2,k1,k2,k3,k4)
begin
case s is
when "00" =>y<=k1;
when "01" =>y<=k2;
when "10" =>y<=k3;
when "11" =>y<=k4;
when others=>null;
end case ;
end process;
end mux;
波形仿真:
实验五全加器电路设计
1、实验目的
熟悉VHDL语言的模块化设计,了解元件例化和打包调用语句。
2、实验内容
用VHDL语言设计一个半加器电路。
然后用元件例化语句调用两个半加器电路,用结构描述实现一个全加器。
3、实验条件
EDA实验箱、QUARTUS2软件
4、实验设计
VHDL源程序
library ieee;
use ieee.std_logic_1164.all;
entity banjia is
port( a,b:in std_logic;
so,co:out std_logic);
end banjia;
architecture mux of banjia is --半加器begin
so<=a xor b;
co<=a and b;
end mux;
library ieee;
use ieee.std_logic_1164.all;
entity or1 is
port( a,b:in std_logic;
c:out std_logic);
end or1;
architecture orr of or1 is --与门begin
c<=a or b;
end orr;
library ieee;
use ieee.std_logic_1164.all;
package my_pkg is
component banjia --元件声明port( a,b:in std_logic;
so,co:out std_logic);
end component;
component or1 --元件声明
port( a,b:in std_logic;
c:out std_logic );
end component;
end my_pkg;
library ieee;
use ieee.std_logic_1164.all;
use work.my_pkg.all; --打开程序包entity shiwu is
port( ain,bin,cin:in std_logic;
cout:out std_logic;
sum:buffer std_logic);
end shiwu;
architecture quanjia of shiwu is --元件例化
signal x,y,z:std_logic;
begin
u1:banjia port map(a=>cin,b=>y,co=>z,so=>sum); --关联方式
u2:banjia port map(a=>ain,b=>bin,co=>x,so=>y); --关联方式
u3:or1 port map(a=>x,b=>z,c=>cout); --关联方式
end quanjia;
波形仿真
实验六交通灯电路设计
1、实验目的
熟悉软件使用,了解CPLD设计过程。
设计逻辑电路,完成交通灯控制逻辑。
2、实验内容
1、设计电路,交通灯控制逻辑
2、了解状态变化电路的设计
3、实验条件
EDA实验箱、QUARTUS2软件
5、实验设计
VHDL源程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity jiaotongdeng is
generic(
cnt_green1:integer:=25; --定义主通道绿灯亮的时间25秒
cnt_yellow1:integer:=5; --定义主通道黄灯亮的时间5秒
cnt_green2:integer:=15; --定义支路绿灯亮的时间15秒
cnt_yellow2:integer:=5); --定义支路绿灯亮的时间5秒port( clk ,rst :in std_logic; --时钟信号、复位信号lgt1_yellow :out std_logic; --主通道黄灯控制信号
lgt1_green :out std_logic; --主通道绿灯控制信号
lgt1_red :out std_logic; --主通道红灯控制信号
lgt2_yellow :out std_logic; --支路黄灯控制信号
lgt2_green :out std_logic; --支路绿灯控制信号
lgt2_red :out std_logic); --支路红灯控制信号end jiaotongdeng;
architecture art of jiaotongdeng is
type states is --状态机
(st0,st1,st2,st3); --状态机的各种状态
signal state:states:=st0;
signal cnt:integer range 0 to 30:=0; --定义计数器
signal cnt_en:std_logic:='0'; --计数使能信号
begin
process(clk,rst,cnt)
begin
if rst='1'then --复位信号有效则执行复位操作state<=st0;
cnt<=0;
elsif (rising_edge(clk)) then --时钟上升沿到来
if cnt_en='1'then
cnt<=cnt+1; --计数器计数
Else
cnt<=0; --计数器清零
end if;
case state is
when st0=>
if cnt=cnt_green1 then --主通道绿灯亮了25秒转换到状态1
state<=st1;
else
state<=st0;
end if;
when st1=>
if cnt=cnt_yellow1 then --主通道黄灯亮了5秒转换到状态2 state<=st2;
else
state<=st1;
end if;
when st2=>
if cnt=cnt_green2 then --支路绿灯亮了15秒转换到状态3
state<=st3;
else
state<=st2;
end if;
when st3=>
if cnt=cnt_yellow2 then --支路黄灯亮了5秒转换到状态0 state<=st0;
else
state<=st3;
end if;
end case;
end if;
end process;
process(state,cnt)
begin
case state is
when st0=> --状态0时主通道绿灯亮,支路红灯亮lgt1_green<='1';
lgt1_yellow<='0';
lgt1_red<='0';
lgt2_green<='0';
lgt2_yellow<='0';
lgt2_red<='1';
cnt_en<='1'; --开始计数
if cnt=cnt_green1 then
cnt_en<='0'; --到25秒停止计数end if;
when st1=> --状态0时主通道黄灯亮,支路红灯亮lgt1_green<='0';
lgt1_yellow<='1';
lgt1_red<='0';
lgt2_yellow<='0';
lgt2_red<='1';
cnt_en<='1'; --开始计数
if cnt=cnt_yellow1 then
cnt_en<='0'; --到5秒停止计数
end if;
when st2=> --状态0时主通道红灯亮,支路绿灯亮lgt1_green<='0';
lgt1_yellow<='0';
lgt1_red<='1';
lgt2_green<='1';
lgt2_yellow<='0';
lgt2_red<='0';
cnt_en<='1'; --开始计数
if cnt=cnt_green2 then
cnt_en<='0'; --到15秒停止计数
end if;
when st3=> --状态0时主通道红灯亮,支路黄灯亮
lgt1_green<='0';
lgt1_yellow<='0';
lgt1_red<='1';
lgt2_yellow<='1';
lgt2_red<='0';
cnt_en<='1'; --开始计数
if cnt=cnt_yellow2 then
cnt_en<='0'; --计数到5秒停止计数
end if;
end case;
end process;
end art;
波形仿真
由于交通灯程序中绿灯设定时间较长,仿真时只能看到部分波形,因此仿真时将绿灯时间缩短以便观察到完整的波形。