中南大学EDA实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中南大学
实验报告
课程: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 clkevent 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;