verilog语言-设计一个交通灯信号控制电路

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

西北工业大学

《FPGA》实验报告

学院:软件与微电子学院

学号: ********** *名:***

专业:微电子学

实验时间: 2013/11/11 实验地点:毅字楼335 指导教师:**

西北工业大学

2013 年11 月

为129。

通过比较器,每个灯的条件不同,当129>=k>=70时绿灯亮,69>=k>=60黄灯闪烁,59>=k>=0红灯亮。

对于数码管输出,当129>=k>=70时,数码管个位输出=(k-70)%10,十位输出为(k-70-个位)/10;当69>=k>=60数码管个位输出=(k-60)%10,十位输出为(k-60-个位)/10,当59>=k>=0时,数码管个位输出=k%10十位输出为(k-个位)/10。

分频模块:

分频模块用以把输入的50MHz的信号转换为1Hz信号,便于其后的交通灯控制及数码管输出。

译码模块:

考虑到数字显示需要两个七段译码器,且在数字系统中,数字的表示都是采用二进制,因为两个管子分别输入,所以需要把循环变量k转换为有用的十位和各位输出。

为了方便,把循环变量k减去各状态的基数值后,用数学方法取十位和各位分别做输入。如绿灯时,129>=k>=70时,数码管个位输出=(k-70)%10,十位输出为(k-70-个位)/10。

七段译码器的设计原理如图:

2.总体设计框图及说明:

图一

输入:clk 全局时钟信号,50MHz rst 全局复位端,高电平有效 输出:ctrl_1s 倒计时个位上数字 ctrl_10s 倒计时十位上数字 blu,yel,red 各个灯状态

框图说明:

状态机的输入,只有时钟信号clk 和复位信号reset.输出为数码管十位和个位的二进制显示状态以及三个灯的颜色显示(blu,yel,red,分别是绿黄红灯,“1”表示灯亮,“0”表示灭)。 输入clk 的频率很大,需要通过计数器对其进行分频。首先计数产生一个1Hz 的输出,通过该输出再次循环计数,产生周期为130的计数变量,从而控制各个灯的亮灭。而控制黄灯闪烁的分频,为方便起见,仍以1s 为单位,每秒钟改变一次。

用if 嵌套语句来控制三灯亮与灭,同时间接地进行倒计时的过程,输出个位和十位上的数,

red

Clk1 1Hz

循环变量k

129~0

yel

控制

Clk

50Hz

rst

blu

图四

译码显示模块:

输入端口:

din_1s 显示器个位数据,由控制模块输入 din_10s 显示器十位数据,由控制模块输入 输出端口:

led_data_1s 显示器个位数据的译码 led_data_10s 显示器十位数据的译码 时序说明:

此模块接受主模块输出的个位和十位的数值控制,并间接受(系统时钟)clk(50MHz) 和

clk 50MHz

计数器显示计数

rst J=49999999

clk=~clk

(全局复位)rst,及分频时钟clk1的控制,均为上升沿触发,当rst 为高电平时,电路复位,重新开始工作。当rst为低电平时,电路正常。

5.仿真及综合结果

表1 仿真结果信号解释说明

信号解释备注

clk 系统时钟, 50MHz 为了方便,这里取2ns

blu,yel,red 最终三灯状态分别绿红灯,

“1”为亮“0”为灭

k 循环计数变量用以状态判断控制

led10 倒计时十位七段译码数码管十位显示

led1 倒计时个位七段译码数码管个位显示

out1 倒计时个位上的数字控制模块的输出

out10 倒计时十位上的数字控制模块的输出

rst 系统控制变量高电平有效

上图中blu,yel,red,三个信号反映的绿黄红交通灯的状态,其中包括绿灯亮60秒,黄灯以2HZ 为周期闪烁,红灯亮60s,总周期为130s。

上图为循环控制变量的值随分频后信号从129到0的循环计数。

综合结果:

顶层及控制,分频模块的综合RTL级电路如图:

译码显示模块的综合如下:

RTL级门级

6.代码及注释

此为顶层及控制模块代码:

`include "./decode.v"

module bulb(clk,rst,red,blu,yel,led1,led10);

input clk,rst;

output blu,yel,red,led1,led10;

reg red,yel,blu;

wire [6:0] led1;

wire [6:0] led10;

reg[3:0] out10,out1;

reg[5:0] j;

reg[7:0] k; //j,k

reg clk1;

//

initial

begin

k='d129;

blu<=0;

相关文档
最新文档