当前位置:文档之家› 通过Verilog实现交通灯设计实验报告

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

电子科技大学实验报告一、实验室名称:虚拟仪器实验室二、实验项目名称:交通灯设计实验三、实验学时: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)以及产生综合后仿真模型(GeneratePost-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)beginif(rst)beginstate<=S0;count<=0;endelse begincase(state)S0:if(count<15)beginstate<=S0;count<=count+1;endelse beginstate<=S1;count<=0;endS1:if(count<3)beginstate<=S1;count<=count+1;endelse beginstate<=S2;count<=0;endS2:if(count<3)beginstate<=S2;count<=count+1;endelse beginstate<=S3;count<=0;endS3:if(count<15)beginstate<=S3;count<=count+1;endelse beginstate<=S4;count<=0;endS4:if(count<3)beginstate<=S4;count<=count+1;endelse beginstate<=S5;count<=0;endS5:if(count<3)beginstate<=S5;count<=count+1;endelse beginstate<=S0;count<=0;enddefault state<=S0;endcaseendendalways@(*)begincase(state)S0:lights=6'b100_001;S1:lights=6'b100_010;S2:lights=6'b100_100;S3:lights=6'b001_100;S4:lights=6'b010_100;S5:lights=6'b100_100;default lights=6'b100_001;endcaseendEndmodule9.2 时钟分频代码module clk_div(input clk,input rst,output reg clk_1hz );parameter CNT_WIDTH=5;reg[CNT_WIDTH-1:0] cnt;always@(posedge clk or posedge rst) beginif(rst)begincnt<=0;endelse begincnt<=cnt+1;endendalways@(posedge clk or posedge rst)if(rst)clk_1hz<=0;else if(cnt==25)beginclk_1hz<=~clk_1hz;cnt<=0;endEndmodule9.3 顶层代码module top(input mclk,input wire[3:3] btn,output wire[7:2] Led );wire clk_1hz;wire rst;assign rst=btn[3];clk_div clk_div_inst(.clk(mclk),.rst(rst),.clk_1hz(clk_1hz));traffic traffic_inst(.clk(clk_1hz),.rst(rst),.lights(Led));endmodule9.4 测试代码module text;// Inputsreg mclk;reg [3:3] btn;// Outputswire [7:2] Led;// Instantiate the Unit Under Test (UUT)top uut (.mclk(mclk),.btn(btn),.Led(Led));initial begin// Initialize Inputsmclk = 0;btn = 1;// Wait 100 ns for global reset to finish#100;btn = 0;// Add stimulus hereendparameter PERIOD =20;always begin#(PERIOD/2) mclk =0;#(PERIOD/2) mclk =1;endEndmodule9.5 仿真波形代码(对波形进行相关的文字说明,所截取的波形要覆盖所有状态转移)由图中可以看出,lights显示100001(S0),经过15us后变为100010(S1),接着3us变为100100(S2),再3us变为001100(S3),然后15us变为010100(S4),之后3us变为100100(S5),状态正确。

由图可以看出,clk_1hz周期为1000ns,满足1M hz的要求十、实验结论通过实验,实现了用Xilinx ISE 13.2实现了一个交通灯的电子线路设计与仿真,更加熟练掌握Verilog语言的基本语法。

十一、实验中遇到的问题及相应的解决办法(1)lights状态不发生变化答:在test文件中,令btn初值为1报告评分:指导教师签字:建筑11。

相关主题