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