EDA课设-交通灯-Verilog版----FPGA--004
- 分得到析四个状态:
S1: 主干道(绿灯亮) ,支干道(亮红灯);--40S
S1: 主干道 (黄灯亮) ,支干道(亮红灯);--4S
S1: 主干道 (亮红灯),支干道(绿灯亮);--20S
S1: 主干道 (亮红灯),支干道(黄灯亮);--4S
代码:包括四部分:traffic_ligh_top(顶层例化)、traffic_light(交通灯控制部分)、led_input_display(把(交通灯控制部分的)数据打一拍(再送给74595))、led_74595_driver(串转并-进行显示)
仿真:代码及波形显示
- 代码编写
//---------------------------------------------------------------------------------------
- RTL Viewer

- traffic_ligh_top(顶层例化)
/*-----------------------------------------------------------------------
Author : WHaoL
Technology blogs : http://www.cnblogs.com/luckySuperman/
: http://blog.chinaaet.com/eWorld
Email Address : liangwenhao0603@163.com
Filename : traffic_ligh_top.v
Data : 2016-09-26
Description :
modification history :
Data By Version Change Description
=========================================================================
16/9/26 WHaoL 1.0 Original
=======================================================================*/
`timescale 1ns/1ns
module traffic_ligh_top
(
input clk,
input rst_n, //matrix keyboard interface output led595_clk,
output led595_dout,
output led595_latch
); wire [:] led_east;
wire [:] led_south; wire key_flag;
//-------------------------------------
traffic_light u_traffic_light
(
.clk(clk), //时钟 50MHz
.rst_n(rst_n), //复位 低电平有效 // south north east west
//.e_light(e_light), // 东方向 指示灯
//w_light, //西方向 指示灯 //.s_light(s_light), //南方向 指示灯
//n_light, //北方向 指示灯
.led_east(led_east),
//.led_wast(led_wast), .led_south(led_south),
//.led_nouth(led_nouth)
.key_flag(key_flag)
); //---------------------------------
//led data input with enable signal.
wire [:] led_data;
led_input_display
#(
.LED_WIDTH ()
)
u_led_input_display
(
//global
.clk (clk),
.rst_n (rst_n), //user interface
.led_en (key_flag),
.led_value ({led_east[:],'b00,led_south[2:0]}), //led interface
.led_data (led_data)
); //-------------------------------------------
led_74595_driver u_led_74595_driver
(
//global clock
.clk (clk),//50MHz
.rst_n (rst_n), //user led output
.led_data (led_data),
.led595_clk (led595_clk),
.led595_dout (led595_dout),
.led595_latch (led595_latch)
); endmodule
- traffic_light(交通灯控制部分)
`timescale 1ns/1ns
module traffic_light
(
clk,
rst_n, key_flag, led_east,
//led_wast, led_south
//led_nouth );
parameter TIME_1S = 50_000_000; input clk;
input rst_n; output [:] led_east;
//output [2:0] led_wast;
output [:] led_south;
//output [2:0] led_nouth;
output key_flag; reg [:] led_east;
//reg [2:0] led_wast;
reg [:] led_south;
//reg [2:0] led_nouth; reg key_flag; reg [:] cnt;
reg [:] cnt_l; //---------------------------------------------------------
//led_east
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
led_east <= 'b001;//G
else if((cnt_l == )&&(cnt == TIME_1S-'b1))
led_east <= 'b010;//Y
else if((cnt_l == )&&(cnt == TIME_1S-'b1))
led_east <= 'b100;//R
else if((cnt_l == )&&(cnt == TIME_1S-'b1))
led_east <= 'b001;//G
else
led_east <= led_east;
end //---------------------------------------------------------
//wast
//always@(posedge clk or negedge rst_n)
//begin
// if(!rst_n)
// led_wast <= 3'b001;
// else if((cnt_l == 39)&&(cnt == TIME_1S-1'b1))
// led_wast <= 3'b010;
// else if((cnt_l == 43)&&(cnt == TIME_1S-1'b1))
// led_wast <= 3'b100;
// else if((cnt_l == 67)&&(cnt == TIME_1S-1'b1))
// led_wast <= 3'b001;
// else
// led_wast <= led_wast;
//end
//---------------------------------------------------------/////////////////////////////////////
//led_south
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
led_south <= 'b100;//R
else if((cnt_l == )&&(cnt == TIME_1S-'b1))
led_south <= 'b001;//G
else if((cnt_l == )&&(cnt == TIME_1S-'b1))
led_south <= 'b010;//Y
else if((cnt_l == )&&(cnt == TIME_1S-'b1))
led_south <= 'b100;//R
else
led_south <= led_south;
end
//---------------------------------------------------------
//led_nouth
//always@(posedge clk or negedge rst_n)
//begin
// if(!rst_n)
// led_nouth <= 3'b100;//R
// else if((cnt_l == 43)&&(cnt == TIME_1S-1'b1))
// led_nouth <= 3'b001;//G
// else if((cnt_l == 63)&&(cnt == TIME_1S-1'b1))
// led_nouth <= 3'b010;//Y
// else if((cnt_l == 67)&&(cnt == TIME_1S-1'b1))
// led_nouth <= 3'b100;//R
// else
// led_nouth <= led_nouth;
//end
//----------------------------------------------------------
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
cnt <= ;
else if(cnt==(TIME_1S-'b1))
cnt <= ;
else
cnt <= cnt+'b1;
end always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
cnt_l <= ;
else if((cnt==(TIME_1S-'b1))&&(cnt_l==8'd67))
cnt_l <= ;
else if(cnt==(TIME_1S-'b1))
cnt_l <= cnt_l+'b1;
else
cnt_l <= cnt_l;
end //----------------------------------------------------------------------------
//wire key_trigger = ((cnt==TIME_1S-1'b1)&&((cnt_l==8'd39)||(cnt_l==8'd43)||(cnt_l==8'd67)||(cnt_l==8'd63))) ? 1'b1 : 1'b0; wire key_trigger = (cnt==(TIME_1S-'b1)) ? 1'b1 : 'b0;
//---------------------------------
//Lag 1 clock for valid read enable
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
key_flag <= ;
else
key_flag <= key_trigger;
end endmodule
- led_input_display(把(交通灯控制部分的)数据打一拍(送给74595))
`timescale 1ns/1ns
module led_input_display
#(
parameter LED_WIDTH =
)
(
//global clock
input clk,
input rst_n, //user interface
input led_en,
input [LED_WIDTH-:] led_value, //led interface
output reg [LED_WIDTH-:] led_data
); //--------------------------------------
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
led_data <= 'b001_00_100;
else if(led_en)
led_data <= led_value;
else
led_data <= led_data;
end endmodule
- led_74595_driver(串转并-进行显示)
`timescale 1ns/1ns
module led_74595_driver
(
//global clock
input clk,//50MHz
input rst_n, //user led output
input [:] led_data, output led595_clk,
output led595_dout,
output led595_latch
);
//-----------------------------
//update display when led_data is update
//generate led_data_r and update_flag
reg [:] led_data_r;
reg update_flag;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
led_data_r <= ;
update_flag <= ;
end
else
begin
led_data_r <= led_data;
update_flag <= (led_data_r == led_data)?'b1:1'b0;
end
end
//------------------------------
//74HC595 clk delay for enough setup time
// generate shift_flag and shift_clk
localparam DELAY_CNT = 'd7;
reg shift_state;
reg [:] delay_cnt;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
delay_cnt <= ;
else if(shift_state == 'b1)
delay_cnt <= (delay_cnt < DELAY_CNT) ? (delay_cnt+'b1):3'd0;
else
delay_cnt <= ;
end
wire shift_clk = (delay_cnt > DELAY_CNT/) ? 'b1 : 1'b0;
wire shift_flag = (delay_cnt == DELAY_CNT) ? 'b1 : 1'b0;
//----------------------------------------
//74HC595 shift data output state
reg [:] led_cnt;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
shift_state <= ;
led_cnt <= ;
end
else
begin
case(shift_state)
: begin
led_cnt <= ;
if(update_flag)
shift_state <= 'b1;
else
shift_state <= ;
end
: begin
if(shift_flag)
begin
if(led_cnt < 'd8)
begin
led_cnt <= led_cnt + 'b1;
shift_state <= 'd1;
end
else
begin
led_cnt <= ;
shift_state <= ;
end
end
else
begin
led_cnt <= led_cnt;
shift_state <= shift_state;
end
end
endcase
end
end
assign led595_dout = (led_cnt < 'd8&&shift_state == 1'b1) ? led_data['d7-led_cnt]: 1'b0;
assign led595_clk = (led_cnt < 'd8&&shift_state == 1'b1) ? shift_clk : 'b0;
assign led595_latch = (led_cnt =='d8&&shift_state == 1'b1) ? 'b1 : 1'b0; endmodule
- 仿真
//-----------------------------------------------------------------------------------------
- 仿真代码--第一部分 --traffic_light
`timescale 1ns/1ns
module traffic_light
(
clk,
rst_n, //key_flagï¼
led_east,
//led_wast, led_south
//led_nouth );
parameter TIME_1S = ; input clk;
input rst_n; output [:] led_east;
//output [2:0] led_wast;
output [:] led_south;
//output [2:0] led_nouth;
//output key_flag; reg [:] led_east;
//reg [2:0] led_wast;
reg [:] led_south;
//reg [2:0] led_nouth; //reg key_flag; reg [:] cnt;
reg [:] cnt_l; //---------------------------------------------------------
//led_east
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
led_east <= 'b001;//G
else if((cnt_l == )&&(cnt == TIME_1S-'b1))
led_east <= 'b010;//Y
else if((cnt_l == )&&(cnt == TIME_1S-'b1))
led_east <= 'b100;//R
else if((cnt_l == )&&(cnt == TIME_1S-'b1))
led_east <= 'b001;//G
else
led_east <= led_east;
end //---------------------------------------------------------
//wast
//always@(posedge clk or negedge rst_n)
//begin
// if(!rst_n)
// led_wast <= 3'b001;
// else if((cnt_l == 39)&&(cnt == TIME_1S-1'b1))
// led_wast <= 3'b010;
// else if((cnt_l == 43)&&(cnt == TIME_1S-1'b1))
// led_wast <= 3'b100;
// else if((cnt_l == 67)&&(cnt == TIME_1S-1'b1))
// led_wast <= 3'b001;
// else
// led_wast <= led_wast;
//end
//---------------------------------------------------------/////////////////////////////////////
//led_south
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
led_south <= 'b100;//R
else if((cnt_l == )&&(cnt == TIME_1S-'b1))
led_south <= 'b001;//G
else if((cnt_l == )&&(cnt == TIME_1S-'b1))
led_south <= 'b010;//Y
else if((cnt_l == )&&(cnt == TIME_1S-'b1))
led_south <= 'b100;//R
else
led_south <= led_south;
end
//---------------------------------------------------------
//led_nouth
//always@(posedge clk or negedge rst_n)
//begin
// if(!rst_n)
// led_nouth <= 3'b100;//R
// else if((cnt_l == 43)&&(cnt == TIME_1S-1'b1))
// led_nouth <= 3'b001;//G
// else if((cnt_l == 63)&&(cnt == TIME_1S-1'b1))
// led_nouth <= 3'b010;//Y
// else if((cnt_l == 67)&&(cnt == TIME_1S-1'b1))
// led_nouth <= 3'b100;//R
// else
// led_nouth <= led_nouth;
//end
//----------------------------------------------------------
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
cnt <= ;
else if(cnt==(TIME_1S-'b1))
cnt <= ;
else
cnt <= cnt+'b1;
end always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
cnt_l <= ;
else if((cnt==(TIME_1S-'b1))&&(cnt_l==8'd67))
cnt_l <= ;
else if(cnt==(TIME_1S-'b1))
cnt_l <= cnt_l+'b1;
else
cnt_l <= cnt_l;
end //----------------------------------------------------------------------------
//wire key_trigger = ((cnt==TIME_1S-1'b1)&&((cnt_l==8'd39)||(cnt_l==8'd43)||(cnt_l==8'd67)||(cnt_l==8'd63))) ? 1'b1 : 1'b0; //wire key_trigger = (cnt==(TIME_1S-1'b1)) ? 1'b1 : 1'b0;
//---------------------------------
//Lag 1 clock for valid read enable
//always@(posedge clk or negedge rst_n)
//begin
// if(!rst_n)
// key_flag <= 0;
// else
// key_flag <= key_trigger;
//end endmodule
- 仿真代码--第二部分 --traffic_light_tb
`timescale 1ns/1ns
module traffic_light_tb; //------------------------------------------
//clock generate module
reg clk;
reg rst_n;
localparam PERIOD = ; //50MHz
initial
begin
clk = ;
forever #(PERIOD/)
clk = ~clk;
end task task_reset;
begin
rst_n = ;
repeat() @(negedge clk);
rst_n = ;
end
endtask
//------------------------------------------
wire [:] led_east;
wire [:] led_south;
traffic_light u_traffic_light
(
.clk(clk),
.rst_n(rst_n), .led_east(led_east),
.led_south(led_south)
); //---------------------------------------
//system initialization
task task_sysinit;
begin
// e_light = 3'b100; //?? R
// s_light = 3'b001; //?? G
end
endtask //----------------------------------------
//testbench of the RTL
initial
begin #; task_sysinit;
task_reset; end endmodule
- 仿真时序图

EDA课设-交通灯-Verilog版----FPGA--004的更多相关文章
- 基于BASYS2的VHDL程序——交通灯
请尊重作者版权,转载请注明原地址: http://www.cnblogs.com/connorzx/p/3676746.html 数电实验交通灯VHDL版,程序写的扩展性很差,待以后有时间进行优化. ...
- FPGA课设-基于Xilinx Basys2开发板的除法器设计
介绍一下Basys开发板: Basys2 FPGA开发板是一个电路设计实现平台,任何人都可以通过它来搭建一个真正的数字电路.Basys2是围绕着一个Spartan-3E FPGA芯片和一个Atmel ...
- 黑马程序猿_7K面试题之交通灯系统
交通灯信号模拟系统 一.概述 模拟实现十字路口的交通灯管理系统逻辑,详细需求例如以下:(需求直接来源于老师的文档) ① 异步随机生成依照各个路线行驶的车辆. 比如: 由南向而来去往北向的车辆 ...
- 【js课设】电子画板01
这学期web开发课的课设选了电子画板课题.(人家本来想做富文本编辑器的嘛然鹅老师在第二版里把这题删掉了。゚ヽ(゚´Д`)ノ゚。) 主要考虑的有[界面美观][画笔类型][画布分层]这三个点了. [界面美 ...
- C语言课设——电影院选票系统
C语言课设--电影院选票系统 1.课题介绍 大家都爱看电影,现请参考一个熟悉电影票预订系统,实现C语言版的订票系统.了解订票如何实现的.系统主要有2类用户:管理员用户和顾客用户. 管理员用户 1.电影 ...
- JAVA课设——中药古籍《太平圣惠方》数据处理与分析系统
一.配置JAVA环境 本次课设是在Windows 10(64bit)平台上实现的,所以首先得配置下JAVA环境. 步骤一:先下载一个JDK(1.7)安装包,安装好JDK: 步骤二:JDK环境配置(由于 ...
- 微型计算机系统实验总结(学习性实验:IO地址译码,可编程并行接口8255,交通灯控制实验 + 自主设计实验:汽车信号灯控制系统,电风扇控制器,洗衣机控制系统,霓虹灯,电梯控制系统)
实验配套软件: https://download.csdn.net/download/qq_39932172/11221584 实验指导用书: 教师版: https://download.csdn.n ...
- 黑马程序员——【Java高新技术】——案例:交通灯管理系统
---------- android培训.java培训.期待与您交流! ---------- 一.交通灯管理系统的项目需求 Ø 异步随机生成按照各个路线行驶的车辆 例如: 由南向而来去往北向的车辆 - ...
- 黑马程序员:Java编程_7K面试题之交通灯管理系统
=========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 异步随机生成按照各个路线行 ...
随机推荐
- linux新建用户并修改提示符
1 新建用户 # useradd –d /home/ap/testapp -m testapp 此命令创建了一个用户testapp ,其中-d和-m选项用来为登录名testapp 产生一个主目录/ho ...
- delphi 之 get post
http://www.cnblogs.com/ccqin/archive/2012/08/22/2650348.html delphi 之 get post 没测试过这个 var Source: TM ...
- MySQL 中的 information_schema 数据库
1. 概述 information_schema 数据库跟 performance_schema 一样,都是 MySQL 自带的信息数据库.其中 performance_schema 用于性能分析,而 ...
- 基于Apache搭建HTTP HTTPS
参考资料 <openssl攻略>--第一章 <Apache服务器配置与使用工作笔记>-- 第六章 第十四章 https://juejin.im/post/5a31faf2518 ...
- (转载)Solr4.x在Tomcat下的部署
Step1 下载安装包: 下载最新版本安装包 点击此处下载Tomcat 点击此处下载Solr Step2 解压: 解压Tomcat和Solr Step3 拷贝War包: 拷贝\solr-4.x\ ...
- [洛谷P1552] [APIO2012]派遣(左偏树)
这道题是我做的左偏树的入门题,奈何还是看了zsy大佬的题解才能过,唉,我太弱了. 左偏树总结 Part 1 理解题目 很显然,通过管理关系的不断连边,最后连出来的肯定是一棵树,那么不难得出,当一个忍者 ...
- Pandas处理缺失的数据
处理丢失数据 有两种丢失数据: None np.nan(NaN) import numpy as np import pandas from pandas import DataFrame 1. No ...
- How Many Answers Are Wrong (HDU - 3038)(带权并查集)
题目链接 并查集是用来对集合合并查询的一种数据结构,或者判断是不是一个集合,本题是给你一系列区间和,判断给出的区间中有几个是不合法的. 思考: 1.如何建立区间之间的联系 2.如何发现悖论 首先是如何 ...
- bat ini文件读取
借助<bat 读取 ini 文件>文章中的readini.bat实现(请自行前往下载),可满足多个section下Key值查询. ini文件示例 [Server] ServerName = ...
- Spring学习笔记(14)——SpEL
是什么 Spring表达式语言全称为"Spring Expression Language",缩写为"SpEL",类似于Struts2x中使用的OGNL表达式语 ...