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培训.期待与您交流!=========== 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 异步随机生成按照各个路线行 ...
随机推荐
- TODO 思维模型 尺子 游标卡尺
100个人 两个思维切入点 1>做对的题怎么分配 m(x)表示答对x道题的最多人数f(x)表示答对x道题的人数 m(0)=5m(1)=20=>f(0)=0m(2)=m(1)+1=21=&g ...
- spring-cloud eureka注册发现
idea新建一个eureka server服务 application.yml 配置: spring: application: name: eureka-server server: port: 7 ...
- Label设置行间距
内容摘要 UILabel显示多行文本 UILabel设置行间距 解决单行文本 & 多行文本显示的问题 场景描述 众所周知,UILabel显示多行的话,默认行间距为0,但实际开发中,如果显示多行 ...
- LeetCode 230. Kth Smallest Element in a BST 动态演示
返回排序二叉树第K小的数 还是用先序遍历,记录index和K进行比较 class Solution { public: void helper(TreeNode* node, int& idx ...
- 关于狗书《Flask web开发 基于python的Web开发应用实战》中加入用户隐私功能
目前是第二次撸狗书,在用户页面这一块我个人觉得有些问题(基于交互设计).按理来说,我作为一个权限只有User的个人用户来说,肯定不喜欢让别人看到我的真实姓名,地址之类的敏感信息.所以我应该是可以设置成 ...
- Docker 换源
近几天又折腾起 docker来了 我发现自己在拉镜像的时候,总是超时 然后百度了一下 说要换源 90sec的一个水友 推荐了我 阿里云的加速源 我看了还是免费就想试一下 讲一下过程 ...
- python之----------字符编码的原理
1.内存和硬盘都是用来存储的. CPU:速度快 硬盘:永久保存 2.文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开编辑器就可以启动一个进程,是在内存中的,所以在编辑器编 ...
- 用vultr搭建ss服务器的脚本
原文在此
- 2019牛客暑期多校训练营(第一场) - A - Equivalent Prefixes - 单调栈
A - Equivalent Prefixes - 单调栈 题意:给定两个n个元素的数组a,b,它们的前p个元素构成的数组是"等价"的,求p的最大值."等价"的 ...
- F Find the AFei Numbers
链接:https://ac.nowcoder.com/acm/contest/338/F来源:牛客网 题目描述 AFei loves numbers. He defines the natural n ...