白志恒eda实验报告.docx

上传人:b****2 文档编号:2236330 上传时间:2022-10-28 格式:DOCX 页数:12 大小:90.68KB
下载 相关 举报
白志恒eda实验报告.docx_第1页
第1页 / 共12页
白志恒eda实验报告.docx_第2页
第2页 / 共12页
白志恒eda实验报告.docx_第3页
第3页 / 共12页
白志恒eda实验报告.docx_第4页
第4页 / 共12页
白志恒eda实验报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

白志恒eda实验报告.docx

《白志恒eda实验报告.docx》由会员分享,可在线阅读,更多相关《白志恒eda实验报告.docx(12页珍藏版)》请在冰豆网上搜索。

白志恒eda实验报告.docx

白志恒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)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1