通过Verilog实现交通灯设计实验报告

  • 格式:doc
  • 大小:769.50 KB
  • 文档页数:11

下载文档原格式

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

电子科技大学

一、实验室名称:虚拟仪器实验室

二、实验项目名称:交通灯设计实验

三、实验学时:4学时

四、实验原理

假设交通灯处于南北和东西两条大街的“十”字路口,如图1所示。用FPGA开发板的LED灯来模拟红、黄、绿3种颜色信号,并按一定顺序、时延来点亮LED,如图2所示。图3给出了交通灯的状态转移图。设计使用频率为1Hz的时钟来驱动电路(注1:仿真时采用1MHz的时钟来驱动电路),则停留1个时钟可得到1S的延时,类似停留3个时钟可得到3S的延时,停留15个时钟可得到15S的延时(注2:开发板工作时钟为50MHz)。

西东

图1. 六个彩色LED可以表示一组交通信号灯

图2. 交通灯状态

南北东西

红黄绿红黄绿

S0 1 0 0 0 0 1

S1 1 0 0 0 1 0

S2 1 0 0 1 0 0

S3 0 0 1 1 0 0

S4 0 1 0 1 0 0

S5 1 0 0 1 0 0

图3. 交通灯的状态转移图

顶层模块

时钟分频模块状态机跳转模块

图4. 交通灯的原理框图

五、实验目的

本实验是有限状态机的典型综合实验,掌握如何使用状态转移图来定义Mealy状态机和Moore状态机,熟悉利用HDL代码输入方式进行电路的设计和仿真的流程,掌握Verilog语言的基本语法。并通过一个交通灯的设计掌握利用EDA软件(Xilinx ISE 13.2)进行HDL代码输入方式的电子线路设计与仿真的详细流程。。

六、实验内容

在Xilinx ISE 13.2上完成交通灯设计,输入设计文件,生成二进制码流文件下载到FPGA开发板上进行验证。

七、实验器材(设备、元器件)

1、计算机(安装Xilinx ISE 13.2软件平台);

2、BASYS2 FPGA开发板一套(带USB-MIniUSB下载线)

八、实验步骤

(1)新建工程,设置器件属性:在Xilinx ISE 13.2平台中,新建一个工程(注意命名规范),输入工程名称以及工程所在的目录,设置芯片的具

体型号(Spartan 3E XC3S100E)、封装类型(CP132)以及编码使用的

语言(Verilog)。(详见实验指导书)

(2)Verilog源码文件创建与编辑:选中器件名字,点击鼠标右键,选中New Source…,选择Verilog Module以及输入文件名称(详见实验指导

书)

(3)语法检查,对设计文件进行综合:代码编写完成后,在ISE的主界面的处理子窗口的synthesis的工具检查代码语法(Check Syntax),同时

在此窗口可以查看RTL原理图(View RTL schematic)、查看技术原理图

(View Technology Schematic)以及产生综合后仿真模型(Generate

Post-Synthesis Simulation Model)。

(4)对设计进行行为仿真:1)产生测试文件模板;2)完成测试脚本创建与编辑;3)调出仿真窗口对设计进行仿真;4)通过波形查看仿真结

果。(详见实验指导书)

(5)添加实现约束文件。(详见实验指导书)

(6)UCF文件导入。(详见实验指导书)

(7)FPGA在线下载配置:1)连接开发板并给开发板供电;2)边界扫描,初始化链;3)下载比特流文件;4)对FPGA进行编程;5)生成PROM

文件;6)将生成的PROM文件烧到PROM芯片中。(详见实验指导书)(8)关闭配置界面,不保存任何信息。(一定不要保存任何信息)

(9)关闭电源重新上电,程序从PROM自动引导到FPGA芯片中。

(10)给开发板断电,清理器件,实验结束。

九、实验数据及结果分析

9.1状态机转移代码

module traffic(input clk,

input rst,

output reg[5:0] lights

);

reg[2:0] state;

reg[3:0] count;

parameter S0=3'b000,S1=3'b001,S2=3'b010,

S3=3'b011,S4=3'b100,S5=3'b101;

always@(posedge clk or posedge rst)begin

if(rst)begin

state<=S0;

count<=0;

end

else begin

case(state)

S0:if(count<15)begin

state<=S0;

count<=count+1;

end

else begin

state<=S1;

count<=0;

end

S1:if(count<3)begin

state<=S1;

count<=count+1;

end

else begin

state<=S2;

count<=0;

end

S2:if(count<3)begin

state<=S2;

count<=count+1;

end

else begin

state<=S3;

count<=0;

end

S3:if(count<15)begin

state<=S3;

count<=count+1;

end

else begin

state<=S4;

count<=0;

end

S4:if(count<3)begin

state<=S4;

count<=count+1;

end

else begin

state<=S5;

count<=0;

end

S5:if(count<3)begin

state<=S5;

count<=count+1;

end

else begin

state<=S0;

count<=0;

end

default state<=S0;

endcase

end

end