EDA技术与应用实验报告电子

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EDA技术与应用实验报

姓名:汤思远

班级:电子1201班

学号:0909120523

指导老师:张俊老师

时间:2015-01-17

实验一、交通灯

一、实验目的

通过此实验让用户进一步了解、熟悉和掌握CPLD/FPGA 开发软件的的使用方法及

Verilog HDL 的编程方法。学习简单状态机的设计和硬件测试。二、实验内容

本实验的内容是设计一个简易的交通灯控制器,要求能实现红、绿、黄灯三种信号的控制并通过数码管显示倒计时时间。整个设计在SmartSOPC 实验箱上实现,用第一、第二个数码管显示A方向的倒计时时间,用第七、第八个数码管显示B方向的倒计时时间。此外,由于缺少交通灯模块,本实验用第一、第二、第三个LED灯代表A 方向的红、绿、黄灯三种信号,用第六、第七、第八个LED灯代表B方向的红、绿、黄等三种信号。

三、实验原理

本实验设计的交通灯控制器要求实现对A、B 两个方向的红、绿、黄灯三种信号的控制,并能实现时间显示的倒计时。因此每个方向的信号可用一个状态机实现(参考交通灯.ppt),状态的跳转顺序为红灯-绿灯-黄灯-红灯(另一个的状态应为绿-黄-红-绿),同时设计一个计时器,来记录每种灯的倒计时时间。最后将交通灯的状态信息输出至数码管和对应LED灯。注意,一个方向的红灯时间应和另一个方向的绿黄灯时间总和相等。

四、实验步骤

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. 结构图

五、程序清单:

//*********************************************************

//** 交通灯实验

//** 控制模块:traffic_ctrl.v

//********************************************************* module traffic_ctrl(clock,rst_n,lampa,lampb,acount,bcount); input clock; //系统时钟48MHz

input rst_n; //同步复位信号,低电平有效

output [2:0] lampa; //控制 A 方向三盏灯的亮灭;其中lampa[2:0]分

//别控制A 方向的绿灯、黄灯、红灯(低电平灯亮)

output [2:0] lampb; //控制 B 方向三盏灯的亮灭;其中lampb[2:0]分

//别控制B 方向的绿灯、黄灯、红灯(低电平灯亮)

output [7:0] acount; //用于A 方向灯的时间显示,8 位BCD 码输出

output [7:0] bcount; //用于B 方向灯的时间显示,8 位BCD 码输出

wire clken;

reg [25:0] clk_cnt;

//设置各种灯的计数器的预置数

parameter ared =8'd30, //30秒ared = bgreen + byellow

ayellow =8'd5, //5秒

agreen =8'd15, //15秒

bred =8'd20, //20秒bred = agreen + ayellow

byellow =8'd5, //5秒

bgreen =8'd25; //25秒

//产生1Hz时钟使能信号

always @(posedge clock)

begin

if(clken)

clk_cnt <= 26'h0;

else

clk_cnt <= clk_cnt + 26'h1;

end

assign clken = (clk_cnt >= 26'd4*******);

// A方向信号灯控制//

reg[2:0] lampa;

reg[7:0] acount;

reg acount_startred, acount_startgreen, acount_startyellow; // 用于倒数计数器的复位

//状态机A

reg[1:0] currentstate_A;////////, nextstate_A;

// 以下状态机A的代码自己完成

always@( posedge clken)

begin

if(!rst_n)

begin

acount_startred<=1;

acount_startgreen<=0;

acount_startyellow<=0;

lampa<=3'b011;

currentstate_A<=2'b00;

end

else if(acount==8'b0)

case (currentstate_A)

相关文档
最新文档