数电课程设计——课设二:交通信号灯

 一、实验内容

(1)十字路口有 x、y 方向两组交通信号灯,每组有红、黄、绿灯各一个;

(2)设计一个交通灯控制电路,模拟十字路口交通灯工作情况,红灯亮 35s,黄灯亮 5s,绿 灯亮 30s;

(3)设系统时钟频率为 50MHz,要求用数码管显示计时结果;

(4)掌握 Verilog HDL 的状态机编程,红、黄、绿灯点亮转换用如下的状态转换图实现。

二、实验步骤

(1)编写代码

编写的.v顶层文件:

  1. 
    1.	module traffic(  
    2.	    input clk,  
    3.	    input rst,  
    4.	      
    5.	    output reg LEDR_Y,  
    6.	    output reg LEDY_Y,  
    7.	    output reg LEDG_Y,  
    8.	    output reg LEDR_X,  
    9.	    output reg LEDY_X,  
    10.	    output reg LEDG_X  
    11.	      
    12.	);  
    13.	parameter N = 25000000;  
    14.	parameter S1 = 0;  
    15.	parameter S2 = 1;  
    16.	parameter S3 = 2;  
    17.	parameter S4 = 3;  
    18.	reg [25:0] count;  
    19.	reg CLK_1Hz;  
    20.	reg [2:0] cnt5;  
    21.	reg [4:0] cnt30;  
    22.	reg [1:0]state;//状态  
    23.	  
    24.	//生成1Hz时钟  
    25.	always@(posedge clk or negedge rst)begin  
    26.	if(!rst)begin  
    27.	    count <= 0;  
    28.	    CLK_1Hz <= 0;  
    29.	end  
    30.	else if(count<N-1)begin  
    31.	    count <= count +1;  
    32.	    CLK_1Hz <= CLK_1Hz;  
    33.	end  
    34.	else begin  
    35.	    count <= 0;  
    36.	    CLK_1Hz <= ~CLK_1Hz;  
    37.	end  
    38.	end  
    39.	  
    40.	//生成5进制计数器  
    41.	always@(posedge CLK_1Hz or negedge rst)begin  
    42.	if(!rst)begin  
    43.	    cnt5 <= 0;  
    44.	end  
    45.	else if(cnt5<4)begin  
    46.	    cnt5 <= cnt5 + 1;  
    47.	end  
    48.	else  
    49.	    cnt5 <= 0;  
    50.	end  
    51.	  
    52.	//生成30进制计数器  
    53.	always@(posedge CLK_1Hz or negedge rst)begin  
    54.	if(!rst)begin  
    55.	    cnt30 <= 0;  
    56.	end  
    57.	else if(cnt30 < 29)begin  
    58.	    cnt30 <= cnt30 + 1;  
    59.	end  
    60.	else  
    61.	    cnt30 <= 0;  
    62.	end  
    63.	  
    64.	//状态迁移  
    65.	always@(posedge clk or negedge rst)begin  
    66.	if(!rst)begin  
    67.	    state <= 0;  
    68.	end  
    69.	else begin  
    70.	    case(state)  
    71.	      
    72.	    S1:  
    73.	        if(cnt30==29) state <= S3;  
    74.	        else state <= S1;  
    75.	    S2:  
    76.	        if(cnt30==29) state <= S4;  
    77.	        else state <= S2;  
    78.	    S3:  
    79.	        if(cnt5==4)   state <= S2;  
    80.	        else state <= S3;  
    81.	    S4:  
    82.	        if(cnt5==4)   state <= S1;  
    83.	        else state <= S4;  
    84.	    default: state <= S1;  
    85.	    endcase  
    86.	end  
    87.	end  
    88.	  
    89.	//状态  
    90.	always@(posedge clk or negedge rst)begin  
    91.	if(!rst)begin  //刚开始全灭  
    92.	        LEDR_Y <= 0;  
    93.	        LEDY_Y <= 0;   
    94.	        LEDG_Y <= 0;  
    95.	        LEDR_X <= 0;  
    96.	        LEDY_X <= 0;  
    97.	        LEDG_X <= 0;  
    98.	end  
    99.	else begin  
    100.	    case(state)  
    101.	    S1: begin   //Y方向绿灯亮,X方向红灯亮  
    102.	        LEDR_Y <= 0;  
    103.	        LEDY_Y <= 0;   
    104.	        LEDG_Y <= 1;  
    105.	        LEDR_X <= 1;  
    106.	        LEDY_X <= 0;  
    107.	        LEDG_X <= 0;  
    108.	    end   
    109.	    S2: begin   //X方向绿灯亮,Y方向红灯亮  
    110.	        LEDR_Y <= 1;  
    111.	        LEDY_Y <= 0;   
    112.	        LEDG_Y <= 0;  
    113.	        LEDR_X <= 0;  
    114.	        LEDY_X <= 0;  
    115.	        LEDG_X <= 1;  
    116.	    end  
    117.	    S3: begin   //X方向红灯亮,Y方向黄灯亮  
    118.	        LEDR_Y <= 0;  
    119.	        LEDY_Y <= 1;   
    120.	        LEDG_Y <= 0;  
    121.	        LEDR_X <= 1;  
    122.	        LEDY_X <= 0;  
    123.	        LEDG_X <= 0;  
    124.	    end  
    125.	    S4: begin   //X方向黄灯亮,Y方向红灯亮  
    126.	        LEDR_Y <= 1;  
    127.	        LEDY_Y <= 0;   
    128.	        LEDG_Y <= 0;  
    129.	        LEDR_X <= 0;  
    130.	        LEDY_X <= 1;  
    131.	        LEDG_X <= 0;  
    132.	    end  
    133.	    default: begin   //全灭  
    134.	        LEDR_Y <= 0;  
    135.	        LEDY_Y <= 0;   
    136.	        LEDG_Y <= 0;  
    137.	        LEDR_X <= 0;  
    138.	        LEDY_X <= 0;  
    139.	        LEDG_X <= 0;  
    140.	    end  
    141.	    endcase  
    142.	end  
    143.	  
    144.	end  
    145.	  
    146.	endmodule 编写的textbench文件:
    1.	`timescale 1 ns/ 1 ps  
    2.	module traffic_tb();  
    3.	// constants                                             
    4.	// general purpose registers  
    5.	  
    6.	reg clk;  
    7.	reg rst;  
    8.	// wires                                                 
    9.	wire LEDG_X;  
    10.	wire LEDG_Y;  
    11.	wire LEDR_X;  
    12.	wire LEDR_Y;  
    13.	wire LEDY_X;  
    14.	wire LEDY_Y;  
    15.	  
    16.	// assign statements (if any)                            
    17.	traffic i1 (  
    18.	// port map - connection between master ports and signals/registers     
    19.	    .LEDG_X(LEDG_X),  
    20.	    .LEDG_Y(LEDG_Y),  
    21.	    .LEDR_X(LEDR_X),  
    22.	    .LEDR_Y(LEDR_Y),  
    23.	    .LEDY_X(LEDY_X),  
    24.	    .LEDY_Y(LEDY_Y),  
    25.	    .clk(clk),  
    26.	    .rst(rst)  
    27.	);  
    28.	initial                                                  
    29.	begin                                                    
    30.	     clk = 0;  
    31.	      rst = 0;  
    32.	      #100 rst = 1;  
    33.	                       
    34.	end    
    35.	                                                    
    36.	always   #10 clk <= ~clk;                                                
    37.	                                              
    38.	endmodule  
    

编写的textbench文件:

`timescale 1 ns/ 1 ps  
module traffic_tb();  
// constants                                             
// general purpose registers  reg clk;  
reg rst;  
// wires                                                 
wire LEDG_X;  
wire LEDG_Y;  
wire LEDR_X;  
wire LEDR_Y;  
wire LEDY_X;  
wire LEDY_Y;  // assign statements (if any)                            
traffic i1 (  
// port map - connection between master ports and signals/registers     .LEDG_X(LEDG_X),  .LEDG_Y(LEDG_Y),  .LEDR_X(LEDR_X),  .LEDR_Y(LEDR_Y),  .LEDY_X(LEDY_X),  .LEDY_Y(LEDY_Y),  .clk(clk),  .rst(rst)  
);  
initial                                                  
begin                                                    clk = 0;  rst = 0;  #100 rst = 1;  end    always   #10 clk <= ~clk;                                                endmodule  

三、实验结果

S1到S3的转换:

S3到S2的转换:

S2到S4的转换:

S4到S1的转换:

本文大部分内容都属于原创,如需转载,请附上本文网站,
如果需要相关的仿真图、程序代码等资料可以直接私信我,我会及时回复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/129341.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA设计模式第七讲:设计模式在 Spring 源码中的应用

设计模式&#xff08;design pattern&#xff09;是对软件设计中普遍存在的各种问题&#xff0c;所提出的解决方案。本文以面试题作为切入点&#xff0c;介绍了设计模式的常见问题。我们需要掌握各种设计模式的原理、实现、设计意图和应用场景&#xff0c;搞清楚能解决什么问题…

电子企业应该先实施ERP系统还是WMS仓储管理系统

电子企业应该先实施ERP系统还是WMS仓储管理系统&#xff1f;这是一个有争议的问题&#xff0c;不同的企业和管理专家有不同的看法。但是&#xff0c;从我个人的观点来看&#xff0c;电子企业应该先实施ERP系统&#xff0c;然后再考虑WMS仓储管理系统。 首先&#xff0c;ERP系统…

医疗知识图谱 neo4j

开源项目&#xff1a; https://github.com/liuhuanyong/QASystemOnMedicalKG 一.效果 二.需要安装&#xff1a; pip install pyahocorasick pip install py2neo 三.需要修改&#xff1a; 需要改的点&#xff1a; 1.改连接的方式 2.改读文件的方式 MedicalGraph 运行&am…

【C++进阶】二叉树搜索树

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;C进阶 ⭐代码仓库&#xff1a;C进阶 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们的支持是我…

一文读懂java变量类型

前言 在学习和使用Java编程语言时&#xff0c;理解变量类型是至关重要的基础知识。Java是一种静态类型语言&#xff0c;强调变量必须先声明其类型&#xff0c;才能进行后续操作。因此&#xff0c;对于初学者来说&#xff0c;了解Java中不同的变量类型及其特性是迈向编程成功的…

基于Alexnet深度学习网络的人员口罩识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 file_path1 test\mask\;% 图像文件夹路径 %获取测试图像文件夹下所有jpg格式的图像文件…

2023年9月NPDP产品经理国际认证报名来这里就对了

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

Python网络爬虫库:轻松提取网页数据的利器

网络爬虫是一种自动化程序&#xff0c;它可以通过访问网页并提取所需的数据。Python是一种流行的编程语言&#xff0c;拥有许多强大的网络爬虫库。在本文中&#xff0c;我们将介绍几个常用的Python网络爬虫库以及它们的使用。 Requests库 Requests是一个简单而优雅的HTTP库&…

三维模型3DTile格式轻量化压缩处理工具常用几款软件介绍

三维模型3DTile格式轻量化压缩处理工具常用几款软件介绍 三维模型3DTile格式的轻量化处理旨在减少模型的存储空间和提高渲染性能。以下是一些推荐的工具软件&#xff0c;可以用于实现这个目的&#xff1a; MeshLab&#xff1a;MeshLab是一个开源的三维模型处理软件&#xff0c…

TensorFlow详解

TensorFlow详解 TensorFlow是一个开源的机器学习框架&#xff0c;由Google开发。它是一个强大、高度可扩展的计算框架&#xff0c;可以用于各种机器学习任务&#xff0c;包括图像和语音识别、自然语言处理、推荐系统等。 TensorFlow 是一种由 Google 开发的开源机器学习框架&am…

护航数字政府建设,美创科技成为“数字政府建设赋能计划”成员单位

近日&#xff0c;“2023软博会-软件驱动数字政府创新发展论坛”顺利召开&#xff0c;本次论坛由中国信息通信研究院、中国通信标准化协会承办&#xff0c;中国通信标准化协会云计算标准和开源推进委员会、数字政府建设赋能计划支持。 天津市工业和信息化局总经济师杨冬梅、中国…

Leetcode125. 验证回文串

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&…

Cpolar+Tipas:在Ubuntu上搭建私人问答网站,为您提供专业的问题解答

文章目录 前言2.Tipask网站搭建2.1 Tipask网站下载和安装2.2 Tipask网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3 Cpolar稳定隧道&#xff08;本地设置&#xff09; 4. 公网访问测试5. 结语 前…

Threejs汽车展厅

2023-09-06-16-29-40 预览&#xff1a;https://9kt8fy-1234.csb.app/ 源码链接

微信自动打招呼自动回复

点击蓝字 关注我们 微信无疑是我们日常生活中最常用的社交工具之一。但是&#xff0c;你有没有感觉到&#xff0c;每天都要花费大量时间去添加好友、回复简单咨询消息和打招呼&#xff0c;是一件很烦琐的事情呢&#xff1f;如果你也有这样的困扰&#xff0c;那么今天就给大家介…

如何注册喀麦隆商标?

想象一下&#xff0c;你正在喀麦隆的雨林中寻找宝藏&#xff0c;突然你发现了一个从未被人发现的部落。这个部落的人们用一种独特的图案作为他们的标记&#xff0c;来展示他们的身份和与众不同。这个图案就是喀麦隆的商标&#xff01; 在商业世界中&#xff0c;商标就像这个独特…

数据结构 每日一练:选择 + 编程

目录 选择 编程 选择 1、 设对n&#xff08;n>1&#xff09;个元素的线性表的运算只有4种&#xff1a;删除第一个元素&#xff0c;删除最后一个元素&#xff0c;在第一个元素之前插入新元素&#xff0c;在最后一个元素之后插入新元素&#xff0c;则最好使用&#xff08;&a…

IT运维:使用数据分析平台监控H3C交换机

概述 在企业日常运维中&#xff0c;设备种类繁多&#xff0c;日志格式各异&#xff0c;日志量巨大&#xff0c;大量的告警&#xff0c;我们面临着如何统一的存放这些日志&#xff1f;如何对海量的日志进行查看&#xff0c;分析&#xff1f;传统的日志设备无法满足日志格式各异的…

SpringBoot-Learning系列之Kafka整合

SpringBoot-Learning系列之Kafka整合 本系列是一个独立的SpringBoot学习系列&#xff0c;本着 What Why How 的思想去整合Java开发领域各种组件。 消息系统 主要应用场景 流量消峰(秒杀 抢购)、应用解耦&#xff08;核心业务与非核心业务之间的解耦&#xff09;异步处理、顺序…

在Creo 6.0中画图模板问题

在Creo 6.0中&#xff0c;文件的默认模板是英制模板“inlbs_part_solid”,此文件模板中尺寸的单位是inch。我们建模中需要的单位是mm&#xff0c;改变Creo文件默认的单位有两种方法。 1 【新建】对话框取消勾选【使用默认模板】对话框 &#xff08;1&#xff09;单击主页选项…