• 分得到析四个状态:

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的更多相关文章

  1. 基于BASYS2的VHDL程序——交通灯

    请尊重作者版权,转载请注明原地址: http://www.cnblogs.com/connorzx/p/3676746.html 数电实验交通灯VHDL版,程序写的扩展性很差,待以后有时间进行优化. ...

  2. FPGA课设-基于Xilinx Basys2开发板的除法器设计

    介绍一下Basys开发板: Basys2 FPGA开发板是一个电路设计实现平台,任何人都可以通过它来搭建一个真正的数字电路.Basys2是围绕着一个Spartan-3E FPGA芯片和一个Atmel ...

  3. 黑马程序猿_7K面试题之交通灯系统

    交通灯信号模拟系统 一.概述 模拟实现十字路口的交通灯管理系统逻辑,详细需求例如以下:(需求直接来源于老师的文档) ①      异步随机生成依照各个路线行驶的车辆. 比如: 由南向而来去往北向的车辆 ...

  4. 【js课设】电子画板01

    这学期web开发课的课设选了电子画板课题.(人家本来想做富文本编辑器的嘛然鹅老师在第二版里把这题删掉了。゚ヽ(゚´Д`)ノ゚。) 主要考虑的有[界面美观][画笔类型][画布分层]这三个点了. [界面美 ...

  5. C语言课设——电影院选票系统

    C语言课设--电影院选票系统 1.课题介绍 大家都爱看电影,现请参考一个熟悉电影票预订系统,实现C语言版的订票系统.了解订票如何实现的.系统主要有2类用户:管理员用户和顾客用户. 管理员用户 1.电影 ...

  6. JAVA课设——中药古籍《太平圣惠方》数据处理与分析系统

    一.配置JAVA环境 本次课设是在Windows 10(64bit)平台上实现的,所以首先得配置下JAVA环境. 步骤一:先下载一个JDK(1.7)安装包,安装好JDK: 步骤二:JDK环境配置(由于 ...

  7. 微型计算机系统实验总结(学习性实验:IO地址译码,可编程并行接口8255,交通灯控制实验 + 自主设计实验:汽车信号灯控制系统,电风扇控制器,洗衣机控制系统,霓虹灯,电梯控制系统)

    实验配套软件: https://download.csdn.net/download/qq_39932172/11221584 实验指导用书: 教师版: https://download.csdn.n ...

  8. 黑马程序员——【Java高新技术】——案例:交通灯管理系统

    ---------- android培训.java培训.期待与您交流! ---------- 一.交通灯管理系统的项目需求 Ø 异步随机生成按照各个路线行驶的车辆 例如: 由南向而来去往北向的车辆 - ...

  9. 黑马程序员:Java编程_7K面试题之交通灯管理系统

    =========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 异步随机生成按照各个路线行 ...

随机推荐

  1. 深入理解Redis的持久化机制和原理

    Redis是一种面向“key-value”类型数据的分布式NoSQL数据库系统,具有高性能.持久存储.适应高并发应用场景等优势.它虽然起步较晚,但发展却十分迅速. 近日,Redis的作者在博客中写到, ...

  2. 拒绝从入门到放弃_《Openstack 设计与实现》必读目录

    目录 目录 关于这本书 必看知识点 最后 关于这本书 <Openstack 设计与实现>是一本非常值得推荐的书,为数不多的 Openstack 开发向中文书籍中的精品.如果希望从事 Ope ...

  3. Js DOM 修改 css Style

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. Mongodb php扩展及安装

                            Mongodb php扩展 Mongodb安装 1: 下载mongodb www.mongodb.org 下载最新的stable版 2: 解压文件 3: ...

  5. mysql定时备份shell脚本

    #!/bin/bash #每天早上4点, mysql备份数据 # backup.sh #crontab -e # * * * /home/erya/run/moniter/mysql_backup.s ...

  6. 16/7/9_Bootstrap-设计原则

    移动优先: •  在设计的初期就要考虑页面如何在多终端展示 渐进增强: •  充分发挥硬件设备的最大功能

  7. 20190820 On Java8 第十章 接口

    第十章 接口 接口和抽象类提供了一种将接口与实现分离的更加结构化的方法. 抽象类和方法 包含抽象方法的类叫做抽象类.如果一个类包含一个或多个抽象方法,那么类本身也必须限定为抽象的,否则,编译器会报错. ...

  8. .net 项目中cookie丢失解决办法

    创建cookie的时候 HttpCookie PdaCookie = new HttpCookie("Pda");PdaCookie ["PdaId"] = 1 ...

  9. Android手机、电视(盒子) 打开ADB调试 一览表

    手机.电视(盒子) 打开ADB调试 一览表 一.手机打开ADB调试方法 序号 名称 描述 方式 1 华为手机 EMUI 1.设置 ->关于手机-> 版本号 点击(4~5次)2.返回设置 - ...

  10. C#中XmlTextWriter读写xml文件详细介绍

    XmlTextWriter类允许你将XML写到一个文件中去.这个类包含了很多方法和属性,使用这些属性和方法可以使你更容易地处理XML.为了使用这个类,你必须首先创建一个新的XmlTextWriter对 ...