白志恒eda实验报告.docx
- 文档编号:2236330
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:12
- 大小:90.68KB
白志恒eda实验报告.docx
《白志恒eda实验报告.docx》由会员分享,可在线阅读,更多相关《白志恒eda实验报告.docx(12页珍藏版)》请在冰豆网上搜索。
白志恒eda实验报告
现代交换技术实验报告
专业班级
电子信息1002
学生姓名
白志恒
指导教师
张俊
完成日期
2013年6月17日
电子信息工程系
信息科学与工程学院
1.实验目的
通过此实验让用户进一步了解、熟悉和掌握CPLD/FPGA开发软件的的使用方法及
VerilogHDL的编程方法。
学习简单状态机的设计和硬件测试。
2.实验内容
本实验的内容是设计一个简易的交通灯控制器,要求能实现红、绿、黄灯三种信号的控制并通过数码管显示倒计时时间。
整个设计在SmartSOPC实验箱上实现,用第一、第二个数码管显示A方向的倒计时时间,用第七、第八个数码管显示B方向的倒计时时间。
此外,由于缺少交通灯模块,本实验用第一、第二、第三个LED灯代表A方向的红、绿、黄灯三种信号,用第六、第七、第八个LED灯代表B方向的红、绿、黄等三种信号。
3.实验原理
本实验设计的交通灯控制器要求实现对A、B两个方向的红、绿、黄灯三种信号的控制,并能实现时间显示的倒计时。
因此每个方向的信号可用一个状态机实现,状态的跳转顺序为红灯-绿灯-黄灯-红灯(另一个的状态应为绿-黄-红-绿),同时设计一个计时器,来记录每种灯的倒计时时间。
最后将交通灯的状态信息输出至数码管和对应LED灯。
注意,一个方向的红灯时间应和另一个方向的绿黄灯时间总和相等。
4.实验步骤
1)启动QuartusII建立一个空白工程,然后命名为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.结构图
5.程序清单:
traffic_test.v(已完成),traffic_ctrl.v(未完成),traffic_display.v(未完成)。
1.traffic_test.v
//*********************************************************
//**交通灯实验
//**顶层模块:
traffic_test.v
//*********************************************************
moduletraffic_test(clock,rst_n,seg,dig,lampa,lampb);
inputclock;//系统时钟(48MHz)
inputrst_n;//复位信号,低电平有效
output[2:
0]lampa;//A方向红、绿、黄灯
output[2:
0]lampb;//B方向红、绿、黄灯
output[7:
0]seg;//数码管段码输出
output[7:
0]dig;//数码管位码输出
//内部线网
wireclken;
wire[7:
0]acount;
wire[7:
0]bcount;
//交通灯控制模块
traffic_ctrltraffic_ctrl(
.clock(clock),
.rst_n(rst_n),
.lampa(lampa),//A方向红、绿、黄灯
.lampb(lampb),//B方向红、绿、黄灯
.acount(acount),//A方向倒计时
.bcount(bcount)//B方向倒计时
);
//交通灯显示模块
traffic_displaytraffic_display(
.clock(clock),
.rst_n(rst_n),
.acount(acount),//A方向倒计时
.bcount(bcount),//B方向倒计时
.seg(seg),//数码管段码输出
.dig(dig)//数码管位码输出
);
endmodule
2.traffic_ctrl.v
//*********************************************************
//**交通灯实验
//**控制模块:
traffic_ctrl.v
//*********************************************************
moduletraffic_ctrl(clock,rst_n,lampa,lampb,acount,bcount);
inputclock;//系统时钟48MHz
inputrst_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码输出
//设置各种灯的计数器的预置数
parameterared=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@(posedgeclock)
begin
if(clken)
clk_cnt<=26'h0;
else
clk_cnt<=clk_cnt+26'h1;
end
assignclken=(clk_cnt>=26'd47999999);
//
//A方向信号灯控制
//
reg[2:
0]lampa;
reg[7:
0]acount;
regacount_startred,acount_startgreen,acount_startyellow;//用于倒数计数器的复位
//状态机A
reg[1:
0]currentstate_A,nextstate_A;
//以下状态机A的代码自己完成
always@(posedgeclken)begin
currentstate_A<=nextstate_A;
end
always@(posedgeclockornegedgerst_n)begin
if(!
rst_n)begin
currentstate_A<=0;
acount_startgreen<=0;
end
elseif(clken)begin
case(currentstate_A)
0:
beginif(acount!
=0)
lampa<=3'b110;
nextstate_A<=2'b00;
else
nextstate_A<=2'b01;
acount_startgreen<=1;
end
1:
beginif(acount!
=0)
lampa<=3'b101;
nextstate_A<=2'b01;
else
nextstate_A<=2'b10;
acount_startyellow<=1;
end
2:
beginif(acount!
=0)
lampa<=3'b011;
nextstate_A<=2'b10;
else
acount_startred<=1;
nextstate_A<=2'b00;
end
default:
begincurrentstate_A<=2'b00;end
endcase
end
end
//倒数计数器A
always@(posedgeclock)
begin
if(clken)begin
if(acount_startred)
acount<=ared;
acount_startred=0;
elseif(acount_startgreen)
acount<=agreen;
acount_startgreen=0;
elseif(acount_startyellow)
acount<=ayellow;
acount_startyellow=0;
else
acount<=acount-1'b1;
end
end
//
//B方向信号灯控制
reg[2:
0]lampb;
reg[7:
0]bcount;
regbcount_startred,bcount_startgreen,bcount_startyellow;//用于倒数计数器的复位
//状态机B
reg[1:
0]currentstate_B,nextstate_B;
//以下状态机B的代码自己完成
always@(posedgeclken)begin
currentstate_B<=nextstate_B;
end
always@(posedgeclockornegedgerst_n)begin
if(!
rst_n)begin
currentstate_B<=0;
end
elseif(clken)begin
case(currentstate_B)
0:
beginif(bcount!
=0)
lampb<=3'b110;
nextstate_B<=2'b00;
else
nextstate_B<=2'b01;
bcount_startgreen<=1;
end
1:
beginif(bcount!
=0)
lampb<=3'b101;
nextstate_B<=2'b01;
else
nextstate_B<=2'b10;
bcount_startyellow<=1;
end
2:
beginif(bcount!
=0)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 白志恒 eda 实验 报告