Verilog交通灯
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
班级:微电2班
组员:刘家豪门珺
学号:11180102
目录
一、概述 (4)
二、任务功能 (5)
三.系统设计 (5)
1.工作原理 (5)
2.系统设计方案 (6)
四、程序设计 (7)
1.verilog源程序 (7)
2.设备选择 (11)
3引脚绑定 (12)
五、结束语 (13)
一:概述
HDL(Hardware Description Language,硬件描述语言)是一种描述硬件所做工作的语言。目前,电子系统向集成化、大规模和高速度等方向发展,以硬件描述语言和逻辑综合为基础的自顶向下的电路设计方法在业界得到迅猛发展,HDL在这种形势下显示出了巨大的优势,展望将来HDL在硬件设计领域的地位将与C和C++在软件设计领域地位一样,在大规模数字系统的设计中,它将逐步取代传统的逻辑状态表和逻辑电路图等硬件描述方法而成为主要的硬件描述工具。
Verilog HDL是工业和学术界的硬件设计者所使用的两种主要的HDL之一,另一种是VHDL。现在它们都已成为IEEE标准。两者各有特点,但Verilog HDL 拥有更悠久的历史、更广泛的设计群体,资源也远比VHDL丰富,且非常容易学习掌握。
Quartus简介:
Quartus II 是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL 以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
二、任务功能
交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制。在现代化的大城市中,十字交叉路口越来越多,在每个交叉路口都需要使用红绿灯进行交通指挥和管理,红、黄、绿灯的转换要有一个准确的时间间隔和转换顺序,这就需要有一个安全、自动的系统对红、黄、绿灯的转换进行管理,本系统就是基于此目的而开发的。
基本要求:
1. 模拟一个交通灯系统
2.正常的时候东西路口分别计时30秒和45秒的绿灯时间
3.需要用七段数码管来显示剩余的时间
三、系统设计
1.工作原理:
城市十字交叉路口红绿灯控制系统主要负责控制主干道走向和从干道走向的红绿灯的状态和转换顺序,关键是各个状态之间的转换和进行适当的时间延时,正是基于以上考虑,采用如下设计:
S0:当主干道走向的绿灯亮时,从干道走向的红灯亮,并保持30s
S1:当主干道走向的黄灯亮时,从干道走向的黄灯亮,并保持5s
S2:当主干道走向的红灯亮时,从干道走向的绿灯亮,并保持20s
S3:当主干道走向的黄灯亮时,从干道走向的黄灯亮,并保持5s
在S3结束后又回到(1)状态,并周期重复进行。
状态图如下:
30秒
5秒5秒
20秒
2.系统设计方案:
根据设计要求和系统所具有功能,并参考相关的文献资料经行方案设计画出如下所示的十字路口交通灯控制器系统框图,及为设计的总体方案,框图如下图所示:
四、程序设计
1.verilog源程序:
module diplay (seg,wh,disdata,diswh);
output [7:0] seg;
output [3:0] wh;
input [3:0] disdata;
input [1:0] diswh;
segdecoder u1 (.outdata(seg),
.indata(disdata));
decoder2_4 u2 (.sel(wh),
.dat(diswh));
Endmodule
module dvi1hz(clkout,clk,rst);
//in:50MHz,out:1Hz
input clk,rst;
output clkout;
reg [24:0] cnt;
reg clkout;
always@(posedge clk or negedge rst)
begin
if(rst==1'b0) begin
cnt<=25'd0;
clkout<=1'b0;end
else if(cnt==25'd2*******) begin
cnt<=25'd0;
clkout<=~clkout;end
else
cnt<=cnt+1'b1;
end
endmodule
module cnt4(dclk,outdata,rst);
input dclk,rst;
output [1:0] outdata;
reg [1:0] outdata;
always@(posedge dclk or negedge rst)
begin
if(rst==1'b0)
outdata<=2'b00;
//else if(outdata==1'b11)
// outdata<=4'b0000;
else
outdata<=outdata+1'b1;
end
endmodule
module dvi200hz(clkout,clk,rst);
//in:50MHz,out:100Hz
input clk,rst;
output clkout;