中南大学EDA实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档