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

news2025/4/8 19:33:50

 一、实验内容

(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.coloradmin.cn/o/997961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IP的基础知识

IP IP指网际互连协议&#xff0c;Internet Protocol的缩写&#xff0c;是TCP/IP体系中的网络层协议。 设计IP的目的是提高网络的可扩展性&#xff1a;一是解决互联网问题&#xff0c;实现网络的互联互通&#xff1b;二是解除顶层网络应用和底层网络技术之间的耦合。 根据端到端…

btree学习笔记

简介 btree&#xff1a;balance tree&#xff0c;平衡多叉树&#xff0c;类比avl&#xff1a;平衡二叉树&#xff0c;都是有平衡的属性 (多个子树高度一致)&#xff0c;只不过是二叉和多叉的区别。 使用场景 文件系统如extfs、jffs&#xff0c;sql&#xff0c;磁盘上的索引查…

VirtualBox(内有Centos 7 示例安装)

1常见概念以及软件安装 1.1 虚拟化技术&#xff1a; 虚拟化技术指的是将计算机的各种硬件资源加以抽象、转换、分割&#xff0c;最后组合 起来的技术。其目的和作用主要是打破硬件资源不可分的情况&#xff0c;方便程序员自 己集成所需资源。 1.2 Virtual Box 其是虚拟化技术作…

[源码系列:手写spring] IOC第十三节:Bean作用域,增加prototype的支持

为了帮助大家更深入的理解bean的作用域&#xff0c;特意将BeanDefinition的双例支持留到本章节中&#xff0c;创建Bean,相关Reader读取等逻辑都有所改动。 内容介绍 在Spring中&#xff0c;Bean的作用域&#xff08;Scope&#xff09;定义了Bean的生命周期和可见性。包括单例和…

【redis进阶】基础知识简要回顾

1. 常见功能介绍 聚合统计 使用list集合的差集、并集来统计 排序统计 SortedSet&#xff08;ZSet&#xff09;统计&#xff0c;再利用分页列出权重高的元素 二值状态统计 BitMap存储&#xff0c;获取并统计 SETBIT uid:sign:3000:202008 2 1 GETBIT uid:sign:3000:202008 2…

Linux动态链接懒加载

Linux动态链接懒加载 懒加载 最近一个名词——懒加载&#xff0c;是一种与动态链接相关的技术&#xff0c;我对它有点感兴趣&#xff0c;于是决定深入了解一番。 懒加载是一种延迟加载资源的策略&#xff0c;它将资源的加载推迟到在首次访问或需要时才执行。这意味着在应用程…

Paper: 利用RNN来提取恶意软件家族的API调用模式

论文 摘要 恶意软件家族分类是预测恶意软件特征的好方法&#xff0c;因为属于同一家族的恶意软件往往有相似的行为特征恶意软件检测或分类方法分静态分析和动态分析两种&#xff1a; 静态分析基于恶意软件中包含的特定签名进行分析&#xff0c;优点是分析的范围覆盖了整个代码…

【Unity3D】UI Toolkit自定义元素

1 前言 UI Toolkit 支持通过继承 VisualElement 实现自定义元素&#xff0c;便于通过脚本控制元素。另外&#xff0c;UI Toolkit 也支持将一个容器及其所有子元素作为一个模板&#xff0c;便于通过脚本复制模板。 如果读者对 UI Toolkit 不是太了解&#xff0c;可以参考以下内容…

《AI辞职信一键生成》告别凡俗套路,展现独特个性!

在这个科技日新月异的时代&#xff0c;我们的生活被各种应用软件深深地渗透。其中&#xff0c;讯飞星火AI大模型的应用无疑是一种创新和突破。最近&#xff0c;我有幸体验了一款名为《AI辞职信一键生成》的web应用&#xff0c;它以其独特的功能和出色的用户体验&#xff0c;让我…

微信小程序Day2笔记

1、WXML模板语法 1. 数据绑定 数据绑定的基本原则 在data中定义数据在WXML中使用数据 2. 在data中定义页面的数据 在页面对应的.js文件中&#xff0c;把数据定义到data对象中。 3. Mustache语法的格式 把data中的数据绑定到页面中渲染&#xff0c;使用Mustache语法&…

不推介使用裸指针的几种情况

情况一&#xff1a; //原生指针没有所有权 void f() {// 不好: 原生指针拥有了所有权int* p1 new int{7}; // ... }template<typename T> class X {public:T* p; // 不好: 不清楚 p 所有权T* q; // 不好: 不清楚 q 所有权// ... };// 不好: 不清楚返回值所有权 Gadget*…

机器学习:自然语言处理上的对抗式攻击

Attacks in NLP 相关话题 Introduction 以前的攻击专注于图像和语音上&#xff0c;而NLP上的内容比较少。而NLP的复杂度跟词典有关系&#xff1a; NLP只能在embedding后的特征上加噪声 Evasion Attacks 电影的评论情感分类&#xff0c;将film换成films后&#xff0c;评论从…

637. 二叉树的层平均值

637. 二叉树的层平均值 题目-简单难度示例1. bfs 题目-简单难度 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 示例 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&…

DQN模型

1. DQN模型 References [1] 强化学习第五节&#xff08;DQN&#xff09;【个人知识分享】_哔哩哔哩_bilibili

在MDK-Keil中开发S32K144

对于NXP的S32K1xx系列MCU&#xff0c;前面已经介绍过&#xff0c;官方有专门支持该系列MCU开发的IDE工具——S32DS&#xff0c;这个工具还有对应的代码生成配置工具&#xff0c;而且也是官方推荐使用的工具。 S32DS开发环境是基于Eclipse改写的&#xff0c;熟悉Eclipse的话可以…

python使用百度AipOCR来实现图像文字识别

上篇文字讲到了可以截屏手机模拟器上的界面并传回电脑上&#xff0c;文章链接 python将手机模拟器截屏并发送至电脑上_小小爬虾的博客-CSDN博客 传回来以后&#xff0c;就可以识别出图片中的文字内容了。 我使用的是Python3.10.4&#xff0b;百度的AipOCR库实现图像文字识别…

利用Scrum敏捷工具管理敏捷产品迭代Sprint Backlog

​什么是Sprint Backlog&#xff1f; Sprint Backlog是Scrum的主要工件之一。在Scrum中&#xff0c;团队按照迭代的方式工作&#xff0c;每个迭代称为一个Sprint。在Sprint开始之前&#xff0c;PO会准备好产品Backlog&#xff0c;准备好的产品Backlog应该是经过梳理、估算和优…

systemserver的inputdispatcher直接产生CANCEL事件原理分析-讨厌的android触摸面试题

背景回顾&#xff1a; 上一个blog已经重点讲解了app层面自己产生的Cancel触摸事件&#xff0c;大概产生的原理如下&#xff1a; 上一个blog地址&#xff1a;https://blog.csdn.net/learnframework/article/details/124086882 即可以看出来&#xff0c;在服务端systemserver其实…

国家信息中心举办“数字政府建设暨数字安全技术”研讨会:海云安提出数字政府软件供应链安全解决方案

近日&#xff0c;由国家信息中心主办&#xff0c;复旦大学研究院承办的“数字政府建设暨数字安全技术研讨会”在义乌顺利召开。国家信息中心信息与网络安全部副主任禄凯&#xff0c;复旦大学党委常委、宣传部部长陈玉刚&#xff0c;义乌市委常委、常务副市长喻新贵为会议致辞。…