运行环境:VCS + verdi

状态说明:

S0 : 初始状态
S1 : 东西方向绿灯亮,南北方向红灯亮;点亮30周期
S2 : 东西方向黄灯亮,南北方向红灯亮;点亮2 周期
S3 : 东西方向红灯亮,南北方向绿灯亮;点亮30周期
S4 : 东西方向红灯亮,南北方向黄灯亮;点亮2 周期

状态转换说明:

S0 → S1

S1:点亮30周期,进入S2,不足30周期维持S1

S2:点亮2周期,进入S3,不足2周期维持S2

S3:点亮30周期,进入S4,不足30周期维持S3

S4:点亮2周期,进入S1,不足2周期维持S4

代码如下:

如果需要控制时间,自行添加分频器,或者修改tb文件。

module traffic_light (input   clk,input   rst_n,output [2:0] light_east_west, light_south_north
);// 红路灯点亮的时间定义
localparam GREEN  = 30;
localparam YELLOW = 2;// 亮灯的颜色定义
localparam dark  = 2'b00;
localparam green = 2'b01;
localparam yello = 2'b10;
localparam red   = 2'b11;// 状态定义
parameter S0 = 5'b0_0001;  // 初始状态
parameter S1 = 5'b0_0010;  // 东西方向绿灯亮,南北方向红灯亮;30周期
parameter S2 = 5'b0_0100;  // 东西方向黄灯亮,南北方向红灯亮;2 周期
parameter S3 = 5'b0_1000;  // 东西方向红灯亮,南北方向绿灯亮;30周期
parameter S4 = 5'b1_0000;  // 东西方向红灯亮,南北方向黄灯亮;2 周期reg [4:0] status;
reg [4:0] next_status;
reg [7:0] cnt;// 计数器控制
always @(posedge clk or negedge rst_n) beginif(!rst_n) cnt <= 8'b0;else if (   (status == S1 && cnt == GREEN-1 ) ||(status == S2 && cnt == YELLOW-1) ||(status == S3 && cnt == GREEN-1 ) ||(status == S4 && cnt == YELLOW-1)   )cnt <= 8'b0;elsecnt <= cnt + 1'b1;
end// 状态转换
always @(posedge clk or negedge rst_n) beginif(!rst_n)status <= S0;elsestatus <= next_status;
end// 状态判断
always @(*) beginif(!rst_n) beginnext_status = S0;endelse begincase(status)S0 : next_status = S1;S1 : next_status = (cnt == GREEN-1)  ? S2 : S1;S2 : next_status = (cnt == YELLOW-1) ? S3 : S2;S3 : next_status = (cnt == GREEN-1)  ? S4 : S3;S4 : next_status = (cnt == YELLOW-1) ? S1 : S4;default : next_status = S0;endcaseend
endreg [2:0] r_light_east_west, r_light_south_north;// 输出控制
always @(posedge clk or negedge rst_n) beginif(!rst_n) beginr_light_east_west  <= dark;r_light_south_north  <= dark;endelse begincase(status)S0 : beginr_light_east_west   <= dark;r_light_south_north <= dark;endS1 : beginr_light_east_west   <= green;r_light_south_north <= red;endS2 : beginr_light_east_west   <= yello;r_light_south_north <= red;endS3 : beginr_light_east_west   <= red;r_light_south_north <= green;endS4 : beginr_light_east_west   <= red;r_light_south_north <= yello;enddefault: beginr_light_east_west   <= dark;r_light_south_north <= dark;endendcaseend
endassign light_east_west   = r_light_east_west;
assign light_south_north = r_light_south_north;endmodule

tb文件:

module tb_traffic_light ();
localparam CLK_PERIDO = 20;reg   clk;
reg   rst_n;
reg [2:0] light_east_west;
reg [2:0] light_south_north;traffic_light traffic_light_inst(.clk    (clk),.rst_n  (rst_n),.light_east_west    (light_east_west), .light_south_north  (light_south_north)
);initial beginclk = 0;forever #(CLK_PERIDO / 2) clk = ~clk;   
endinitial beginrst_n = 0;repeat(4) @(posedge clk);#(CLK_PERIDO /5);rst_n = 1;repeat(500) @(posedge clk);$finish;
endinitial begin$dumpfile("traffic_light.fsdb");$dumpvars(0);
endendmodule

时序图:

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

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

相关文章

java 将pdf转图片

如何将pdf文件转为图片 import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class Pdf2Png {/**…

手搓Spring

目录 两种方法创建Spring容器 自定义Spring容器及前置操作 Spring扫描逻辑实现 createBean()方法 getBean()方法 依赖注入&#xff08;DI&#xff09; BeanNameAware接口 InitializingBean接口 BeanPostProcessor接口 AOP的实现 Spring 是一个轻量级的 Java 开发框架…

.NET 单文件程序详解:从原理到实践

C# 混淆加密大师在最新版本中, 提供了.NET单文件解包打包功能, 它可以快速解包官方打包的单文件程序&#xff0c;恢复为原始的多文件结构。也可以对解包后的程序集进行混淆与加密&#xff0c;有效提升逆向门槛。最后还能重新打包成单文件程序&#xff0c;保持对用户友好的分发形…

Spring面试题记录?

请简述 Spring 框架的核心是什么&#xff1f;它主要包含了哪些核心模块&#xff1f; spring的核心模块主要有spring-core&#xff08;工具类&#xff0c;资源加载&#xff09;&#xff0c;spring-bean&#xff08;bean的定义&#xff0c;创建&#xff0c;封装&#xff09;&…

一次缓存引发的文件系统数据不一致问题排查与深度解析

01 起因EFC&#xff08;Elastic File Client&#xff09;是 NAS 自研的分布式文件系统客户端&#xff0c;最近完成了对缓存架构的更新&#xff0c;现在支持多个客户端之间构成分布式缓存&#xff0c;底层支持 NAS、CPFS 和 OSS。由于开发时间较短&#xff0c;一直没有做 NAS 场…

Spring Boot Gateway 教程:从入门到精通

一、Spring Cloud Gateway 简介Spring Cloud Gateway 是基于 Spring 5、Project Reactor 和 Spring Boot 2 构建的 API 网关&#xff0c;旨在为微服务架构提供一种简单而有效的路由管理方式。它取代了 Netflix Zuul&#xff0c;提供了更高效和更强大的网关解决方案。核心特点&a…

防火墙 只允许信任的几台服务器访问

1. 首先&#xff0c;确保 firewalld 服务正在运行&#xff1a;systemctl start firewalld systemctl enable firewall2. 设置默认拒绝规则&#xff1a;设置默认拒绝所有流量&#xff08;拒绝所有的入站流量&#xff09;&#xff1a;firewall-cmd --zonepublic --add-rejectal…

十三,数据结构-树

定义树也是基于节点的数据结构&#xff0c;和链表不同的是&#xff0c;树的节点可以指向多个节点。首先对树的一些常用术语进行说明&#xff1a;最上面的节点叫做根节点&#xff0c;根位于树顶&#xff0c;如图中的节点A&#xff1b;和族谱一样&#xff0c;节点有后代和祖先&am…

JVM-默背版

1.JVM对sychronized的优化&#xff1a;锁膨胀、锁消除、锁粗化、自适应自旋锁 &#xff08;1&#xff09;锁膨胀&#xff1a;从无锁、偏向锁、轻量级锁、重量级锁的过程叫做锁膨胀。在JDK1.6以前&#xff0c;sychronized是由重量级锁实现的&#xff0c;加锁和解锁的过程需要从用…

Mac M 系列芯片 YOLOv8 部署教程(CPU/Metal 后端一键安装)

在 Mac M 系列芯片&#xff08;Apple Silicon/ARM 架构&#xff09;上部署 YOLOv8&#xff0c;有一些注意事项&#xff1a;PyTorch 需要安装 ARM 原生版本&#xff0c;推理可利用 Metal 后端加速 CPU。本文教你一步步完成环境配置、模型下载、依赖安装和验证推理。1️⃣ 环境准…

Python爬虫实战:研究Units模块,构建气象数据采集和分析系统

1. 引言 1.1 研究背景 随着信息技术的飞速发展,互联网已成为全球最大的信息库,涵盖气象、金融、医疗、农业等多个领域的海量数据。这些数据蕴含着巨大的潜在价值,如何有效获取并深入分析这些数据成为当下研究的热点。Python 作为一种功能强大的编程语言,凭借其丰富的库资…

网页设计模板 HTML源码网站模板下载

互联网已成为现代社会不可或缺的一部分&#xff0c;网站则是连接线上与线下世界的桥梁。无论是用于展示个人作品集、推广商业产品还是提供公共服务信息&#xff0c;一个设计精良且功能完善的网站都能发挥巨大作用。然而&#xff0c;传统的手工编码方式不仅耗时费力&#xff0c;…

Flink KeyedProcessFunction为什么能为每个key定义State和Timer?

问题描述 一个常见的开窗逻辑&#xff08;12H 或者 500条&#xff09;&#xff1a; import org.apache.flink.api.common.state.ValueState; import org.apache.flink.api.common.state.ValueStateDescriptor; import org.apache.flink.api.common.typeinfo.Types; import or…

【C++】模版初阶---函数模版、类模版

&#x1f31f;个人主页&#xff1a;第七序章 &#x1f308;专栏系列&#xff1a;C&#xff0b;&#xff0b; 目录 ❄️前言&#xff1a; &#x1f308;1.泛型编程&#xff1a; &#x1f308;2.函数模板 &#x1f36d;2.1函数模板概念 &#x1f36d;2.2函数模板格式 &am…

查找算法(Java)

目录 一.定义 二.分类 三.线性查找 原理&#xff1a; 思路分析 代码实现 例题实践 1.两数之和 方法一&#xff1a;暴力穷举法 思路分析 代码实现 方法二&#xff1a;创建哈希表 思路分析 代码实现 2.移动零 思路分析 代码实现 四.二分查找 原理&#xff1a; …

计算机网络--四层模型,IP地址和MAC地址

四层模型&#xff1a;分别是应用层&#xff0c;传输层&#xff0c;网络层和链路层。应用层&#xff1a;提供了应用程序之间相互通信的接口&#xff0c;允许用户访问网络服务。这一层定义了应用程序如何与底层网络进行交互。例如HTTP协议。传输层&#xff1a;它处理数据的分段、…

解析、创建Excel文件的开源库OpenXLSX介绍

OpenXLSX是一个C库&#xff0c;用于读取、写入、创建和修改.xlsx格式的Microsoft Excel文件&#xff0c;源码地址&#xff1a;https://github.com/troldal/OpenXLSX &#xff0c;License为BSD-3-Clause&#xff0c;可在Windows、Linux、MaCOS平台上使用。最新发布版本为v0.3.2&…

【C++】C++11 篇二

【C】C11 篇二前言移动构造函数移动赋值运算符重载类成员变量初始化 &#xff08;缺省值出自C11强制生成默认函数的关键字default:禁止生成默认函数的关键字delete:继承和多态中的final与override关键字&#xff08;出自C11可变参数模板递归函数方式展开参数包逗号表达式展开参…

构建Python环境的几种工具

本文主要介绍如何构建Python环境来处理不同的工作。 1.常用的构建Python环境的工具 ①venv(内置模块):Python 3.3 内置标准库模块&#xff0c;无需额外安装。 ②virtualenv:venv的前身&#xff0c;功能更强大且支持旧版Python。 ③conda:来自 Anaconda 或 Miniconda。不仅能…

c#项目编译时外部依赖文件的同步问题

很多场景因为资源文件太多或太大无法放到资源里面或者是依赖的dll文件&#xff0c;需要编译时同步到bin\debug或bin\release下的&#xff0c;这里面要修改工程文件代码实现。 比如&#xff0c;我把这个项目依赖的dll和附加文件放到ref_dll文件夹里面&#xff0c;希望编译的时候…