中南大学
实 验 报 告
课 程:EDA 技术
班 级:
学 号: 姓 名: 指导老师:
实验时间:2013年6月
EDA---交通灯实验
1、实验目的
通过此实验让用户进一步了解、熟悉和掌握 CPLD/FPGA 开发软件的的使用方法及
Verilog HDL 的编程方法。学习简单状态机的设计和硬件测试。
2、实验器材
主要仪器设备
1、微机 1台
2、QuartusII集成开发软件 1套
3、EDA实验装置 1套
3、实验内容
本实验的内容是设计一个简易的交通灯控制器,要求能实现红、绿、黄灯三种信号的控制并通过数码管显示倒计时时间。整个设计在SmartSOPC 实验箱上实现,用第一、第二个数码管显示A方向的倒计时时间,用第七、第八个数码管显示B方向的倒计时时间。此外,由于缺少交通灯模块,本实验用第一、第二、第三个LED灯代表A方向的红、绿、黄灯三种信号,用第六、第七、第八个LED灯代表B方向的红、绿、黄等三种信号。
4、实验原理
本实验设计的交通灯控制器要求实现对 A、B 两个方向的红、绿、黄灯三种信号的控制,并能实现时间显示的倒计时。因此每个方向的信号可用一个状态机实现,状态的跳转顺序为红灯-绿灯-黄灯-红灯(另一个的状态应为绿-黄-红-绿),同时设计一个计时器,来记录每种灯的倒计时时间。最后将交通灯的状态信息输出至数码管和对应LED灯。注意,一个方向的红灯时间应和另一个方向的绿黄灯时间总和相等。
5、实验步骤
1) 启动Quartus II 建立一个空白工程,然后命名为traffic_test.qpf(器件为:EP3C55F484C8)。
2) 完成交通灯控制模块traffic_ctrl.v、交通灯显示模块traffic_display.v,加入顶层模块traffic_test.v,进行综合编译,若在编译过程中发现错
误,则找出并更正错误,直至编译成功为止。
3) 参考基础实验《LED驱动》及《动态数码管显示》的引脚绑定脚本文件setup.tcl,建立并执行新的引脚绑定脚本文件:setup.tcl。(rst_n为PIN_B11);
4) 对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
5) 确保JP6上的LED0-LED7已通过跳线与FPGA引脚相连。
6) 按核芯板上的复位按键,观察交通灯是否正常运作。
5. 结构图
6、实验分析
1、分频模块
本实验采用了100HZ 的时钟做扫描频率,2.5HZ 的时钟做计数频率,故需要2 个时钟。
P1:process(clk)--分频
variable count1:std_logic_vector(7 downto 0);
begin
if clk'event and clk='1' then
count1:=count1+1;
if count1<20 then
clkk<='0';
elsif count1<40 then
clkk<='1';
else count1:="00000000";
clkk<='0';
end if;
end if;
end process P1
分频模块封装好
时序仿真结果如下:
2、计数模块
本实验共有3种模的计数,分别为模30、模5和模25,而且是减1计数。用一个变量来选择给数码管赋不同的初值,以实现不同的模值计数。
P2: process(m,cz)--赋不同初值
variable Z:std_logic_vector (7 downto 0);
begin
case m is
when "00" => Z:="01100000";--60
when "01" => Z:="00100000";--20
when "10" => Z:="00000100";--4
WHEN OTHERS=> NULL;
end case;
if cz="11" or cz="10" or rst='0' then bcd<=Z;b<='1';
else b<='0';end if;
end process P2;
P22:process(clkk,en,rst)--减1计数
variable bcd2:std_logic_vector(7 downto 0):="01100000";
begin
if rising_edge(clkk) then
case b is
when '1'=>bcd2:=bcd;
WHEN OTHERS=> NULL;
end case;
if rst='1' then
if en='1' then
if bcd2>1 then
if bcd2(3 downto 0)="0000" then
--bcd2:=bcd2-7;
bcd2(7 downto 4):=bcd2(7 downto 4)-"0001";
bcd2(3 downto 0):="1001";
else bcd2:=bcd2-1;
end if;
else
if zt="00" then
s60<='1';s20<='0';s4<='0';
elsif zt="10" then 8
s60<='0';s20<='1';s4<='0';
else s60<='0';s20<='0';s4<='1';
--else s60<='1';s20<='1';s4<='1';
end if;
end if;
end if;
end if;
end if;
bbccdd<=bcd2;
end process P22;
计数模块封装好
时序仿真图如下:
当30s 绿灯还没有计数完s=1,状态仍然维持不变(计数不变)
当0s 后s=1,状态改变(计数改变)
3、状态转换模块
由于交通灯的状态是在4 个状态中循环,故可以利用状态机来完成交通灯的状态转换,
状态机转化的条件如下:
模块程序如下
P3:process(states,clk,s60,s4,s20)--状态转移
begin
if rising_edge(clk) then
case states is
when mgcr=> case a is
when '1'=>cz<="00";a<='0';
when others=>null;
end case;
if s60='1' then
if s='1' then
states<=mycr;m<="10";zt<="01";cz<="11";a<='1'; else cz<="10";
end if;
else cz<="00";
end if;
when mycr=> case a is
when '1'=>cz<="00";a<='0';
when others=>null;
end case;
if s4='1' then
states<=mrcg;m<="01";zt<="10";cz<="11";a<='1'; else cz<="00";
end if; 11
when mrcg=> case a is
when '1'=>cz<="00";a<='0';
when others=>null;
end case;
if (s='0' or (s20='1' and s='1')) then
states<=mrcy;m<="10";zt<="11";cz<="11";a<='1'; else cz<="00";
end if;
when mrcy=> case a is
when '1'=>cz<="00";a<='0';
when others=>null;
end case;
if s4='1' then
states<=mgcr;m<="00"; zt<="00";cz<="11";a<='1';
else cz<="00";
end if;
end case;
end if;
end process P3;
时序仿真图如下:
4、显示模块
完成要显示的数由BCD 码转化为相应的数码管七段码,由于数码管采用动态扫描的显示方式,还需要产生位选信号。程序如下:
P4:process (clk)--数码管显示
variable sseell:std_logic_vector(2 downto 0);
begin
if clk'event and clk='1' then
if sseell<"001" then
sseell:=sseell+1;
else sseell:="000";
end if;
end if;
sel<=sseell;
case sseell is
when "000"=>xianshi<= bbccdd ( 7 downto 4);
when "001"=>xianshi<= bbccdd ( 3 downto 0 );
when others=>null;
end case;
CASE xianshi IS
WHEN "0000"=>qiduan<="00111111";
WHEN "0001"=>qiduan<="00000110";
WHEN "0010"=>qiduan<="01011011";
WHEN "0011"=>qiduan<="01001111";
WHEN "0100"=>qiduan<="01100110";
WHEN "0101"=>qiduan<="01101101";
WHEN "0110"=>qiduan<="01111101";
WHEN "0111"=>qiduan<="00000111";
WHEN "1000"=>qiduan<="01111111";
WHEN "1001"=>qiduan<="01101111";
本文档为【中南大学EDA实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。