当前位置:文档之家› verilog语言-设计一个交通灯信号控制电路

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

西北工业大学
《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;。

相关主题