课程设计:十字路口红绿灯控制器

1.要求双方向8个灯的时序控制

2.要求显示倒计时

verilog hdl代码模块

module red_green(input clk, //系统时钟input rst,output reg A_red,output reg A_green,output reg A_yellow,output reg A_left,output reg B_red,output reg B_green,output reg B_yellow,output reg B_left,output reg[7:0] A_T,output reg[7:0] B_T
);
//灯的显示时间,系统分配32位宽
parameter A_yellow_time = 5;
parameter A_left_time = 15;
parameter A_red_time = 55;
parameter A_green_time = 40;parameter B_yellow_time = 5;
parameter B_left_time = 15;
parameter B_red_time = 65;
parameter B_green_time = 30;reg [2:0] A_state;
reg [2:0] B_state;
reg [7:0] A_count;
reg [7:0] B_count;
//A灯的状态
always @(posedge clk or negedge rst)case(A_state)0:                 //A绿灯beginA_green <= 1'b1;A_yellow <= 1'b0;A_left <= 1'b0;A_red <=1'b0;end1:                 //A黄灯beginA_green <= 1'b0;A_yellow <= 1'b1;A_left <= 1'b0;A_red <=1'b0;end2:                 //A左转灯beginA_green <= 1'b0;A_yellow <= 1'b0;A_left <= 1'b1;A_red <=1'b0;end3:                 //A黄灯begin        A_green <= 1'b0;A_yellow <= 1'b1;A_left <= 1'b0;A_red <=1'b0;end
default:              //A红灯beginA_green <= 1'b0;A_yellow <= 1'b0;A_left <= 1'b0;A_red <=1'b1;end
endcase//A灯的计时以及状态变化
always @(posedge clk or negedge rst)
begin
if(rst==0)
begin
A_count<=A_green_time;
A_state<=0;
end
elsebeginif(A_count==1)   //计时到1时变换beginif(A_state==4) beginA_state <=0;  //状态到最后一个时,A状态回到0循环A_count <=A_green_time;endelseA_state <= A_state+1; //否则,下一个状态case(A_state)0: A_count <= A_yellow_time;1: A_count <= A_left_time;2: A_count <= A_yellow_time;3: A_count <= A_red_time;default: A_count <= A_green_time;    //给下一个状态赋予时间endcaseendelse A_count<=A_count-1;end
end//B灯的状态
always @(posedge clk or negedge rst)case(B_state)0:                 //B红灯beginB_green <= 1'b0;B_yellow <= 1'b0;B_left <= 1'b0;B_red <=1'b1;end1:                 //B绿灯beginB_green <= 1'b1;B_yellow <= 1'b0;B_left <= 1'b0;B_red <=1'b0;end2:                 //B黄灯beginB_green <= 1'b0;B_yellow <= 1'b1;B_left <= 1'b0;B_red <=1'b0;end3:                 //B左转灯begin        B_green <= 1'b0;B_yellow <= 1'b0;B_left <= 1'b1;B_red <=1'b0;end
default:              //B黄灯beginB_green <= 1'b0;B_yellow <= 1'b1;B_left <= 1'b0;B_red <=1'b0;end
endcase
//B灯的计时以及状态变化
always @(posedge clk or negedge rst)
begin
if (rst==0)
beginB_count<=B_red_time;B_state<=0;
end
elsebeginif(B_count==1)   //计时到1时变换beginif(B_state==4) beginB_state <=0;  //状态到最后一个时,B状态回到0循环B_count <=B_red_time;endelseB_state <= B_state+1; //否则,下一个状态case(B_state)0: B_count <= B_green_time;1: B_count <= B_yellow_time;2: B_count <= B_left_time;3: B_count <= B_yellow_time;default: B_count <= B_red_time;    //给下一个状态赋予时间endcaseendelse B_count<=B_count-1;end
end//移位加3法,二进制向BCD码的转换
reg [3:0] num_1; //bcd码的十位
reg [3:0] num_0; //bcd码的个位
integer i;
always @(posedge clk)
begin num_1=4'b0;   //bcd码的十位num_0=4'b0;   //bcd码的个位for (i=7;i>=0;i=i-1)beginif(num_1>=5)num_1=num_1+3;if(num_0>=5)num_0=num_0+3;    //加3num_1=num_1<<1;num_1[0]=num_0[3];num_0=num_0<<1;num_0[0]=A_count[i]; //移位endA_T={num_1,num_0};num_1=4'b0;   //bcd码的十位num_0=4'b0;   //bcd码的个位for (i=7;i>=0;i=i-1)beginif(num_1>=5)num_1=num_1+3;if(num_0>=5)num_0=num_0+3;    //加3num_1=num_1<<1;num_1[0]=num_0[3];num_0=num_0<<1;num_0[0]=B_count[i]; //移位endB_T={num_1,num_0};    endendmodule

测试程序模块

`timescale 1ns/1ps   //时间单位1ns,时间精度1psmodule testbench;reg clk;   //系统时钟reg rst;   //复位wire A_red;wire A_green;wire A_yellow;wire A_left;wire B_red;wire B_green;wire B_yellow;wire B_left;wire [7:0]A_T;wire [7:0]B_T;    //元件例化为RD,仿真连线red_green RD   (.clk(clk),.rst(rst),.A_red(A_red),.A_green(A_green),.A_yellow(A_yellow),.A_left(A_left),.B_red(B_red),.B_green(B_green),.B_yellow(B_yellow),.B_left(B_left),.A_T(A_T),.B_T(B_T));
//初始先复位一次
initialbeginrst=0;#30;rst=1;end//设置时钟每500000000个单位翻转一次,这样一个时钟周期为1秒
alwaysbeginclk=0;#500000000;clk=1;#500000000;end
endmodule

注意:

  1. 选择比较好的器件cyclone V这种以上,否则内存不够。

  1. 测试文件命名为testbench.vt,否则不行。

  1. 采用BCD倒计时,经测试时序无错,代码结构清晰。

  1. EDA课设,感谢论坛其他大佬的代码,基于站内其他作者单方向灯代码和二进制转BCD写出。

FPGA十字路口红绿灯控制器相关推荐

  1. multisim红绿灯元器件在哪里_基于Multisim的红绿灯控制器仿真实现

    基于 Multisim 的红绿灯控制器仿真实现 摘要 介绍运用 Multisim 仿真软件 , 设计一个十字路口交通灯控制器.该控制器 实现了对十字路口交通信号灯控制.利用 Multisim 这种高效 ...

  2. 《数字电子电路》 课程设计:十字路口红绿灯自动控制系统(上)(multisim仿真及PCB实现)

    (一)前言 本系列文章就笔者在大二下学期进行<数字电子线路>课程设计的题目:十字路口红绿灯自动控制系统 进行详细的讲解,希望对读者有所帮助. (二)目录 一.主要指标及要求 二.电路工作原 ...

  3. 《数字电子电路》 课程设计:十字路口红绿灯自动控制系统(下)(multisim仿真及PCB实现)

    书接上篇,本片笔者将进行multisim仿真和AD20的PCB实现 五.仿真及结果 1.单元电路仿真结果 ⑴脉冲信号发生器: 将NE555独立测试,周期为998.17ms,近似为1s,满足设计指标. ...

  4. 十字路口红绿灯plc程序_PLC编程-典型案例红绿灯控制

    使用PLC实现十字路口红绿灯控制,是PLC控制中非常经典的控制案例.如下所示为路口红绿灯示意图: 十字路口红绿灯示意图 控制功能 信号灯受一个启动开关控制,当启动开关接通时,信号灯系统开始工作,且先南 ...

  5. VHDL设计——交通红绿灯控制器模块

    设计一个交通红绿灯控制器模块,实现主干道和支路之间红绿黄灯的信号转换. Design Block: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEE ...

  6. 8255A红绿灯c语言程序,微机原理十字路口红绿灯闪烁实验

    课程名称: 实验项目: 实验地点: 专业班级: 学 号: 学生姓名:指导教师: 本科实验报告 微机原理及接口技术 十字路口红绿灯闪烁实验 微机原理实验室 电子信息1001 2010001211 张 恒 ...

  7. 一文解析FPGA在数字电源控制器的应用思路

    1 引言 在信息技术高速发展的今天,电子系统数字化已经成为有目共睹的趋势,从传统应用中小规模芯片构造电路系统到广泛地应用单片机,到今天DSP及FPGA在系统设计中的应用,电子设计技术已迈入了一个全新阶 ...

  8. 基于 FPGA 的 UART 控制器设计(VHDL)(下)

    今天给大侠带来基于FPGA的 UART 控制器设计(VHDL)(下),由于篇幅较长,分三篇.今天带来第三篇,下篇,使用 FPGA 实现 UART.话不多说,上货. 之前有关于 Veriliog HDL ...

  9. 基于FPGA的以太网控制器(MAC)设计(中)

    今天给大侠带来基于FPGA的以太网控制器(MAC)设计,由于篇幅较长,分三篇.今天带来第二篇,中篇,以太网控制器(MAC)程序的实现.话不多说,上货. 导读 当前,互联网已经极大地改变了我们的生产和生 ...

最新文章

  1. C++ 派生类的定义
  2. timm 笔记:数据集
  3. Angular中实现一个简单的toDoList(待办事项)示例代码
  4. css 波纹扩散_html5 +css3 点击后水波纹扩散效果 兼容移动端
  5. Angular使用Console.log()打印出来的数据没问题,点击详情后数据变了
  6. Android项目混淆配置
  7. Java基础学习总结(77)——Java枚举再总结
  8. Centos5上部署udev
  9. python数值运算代码_Python数值
  10. Hibernate之一对一映射
  11. 内网计算机可以使用键盘,如何在同一个局域网里一套键盘鼠标操作多台电脑?...
  12. Linux 信号量及其操作函数
  13. 【MD5加密算法能被破解么?】
  14. 如何优化我的世界服务器,我的世界服务器太卡怎么办 MC服务器优化攻略
  15. mybatis简单查询
  16. 【《视觉SLAM十四讲》前ch2-ch6实践全过程和遇到的问题及解决办法】
  17. 2018——幸福都是奋斗出来的
  18. 等额本金和等额本息是怎么算出来的
  19. QT报错:Makefile.Debug : moc_xxx.cpp error1
  20. 收藏 取消收藏html,一键解除网页限制,浏览器收藏夹书签小工具

热门文章

  1. android note4 android版本,三星Note4有几个版本?国行三星Note4手机版本型号汇总介绍...
  2. 计算机专业技术业绩,计算机专业职称业绩怎么写
  3. 为什么年龄大了近视还增加_近视会随年龄增加而增加吗
  4. android红包雨动画,过年了,下场红包雨吧
  5. java 使用Jsoup 爬取 中国政府采购网数据
  6. 手写 redux-thunk
  7. 使用STM32F405RGT6开发智能电动床控制系统
  8. java代码转换python
  9. Office Word中横线的增加和删除方法
  10. SQL Server 2005 详细介绍