【Verilog】实验十 带倒计时交通灯控制电路设计

目录

一、实验目的

二、实验环境

三、实验任务

四、实验原理与实验步骤

1. 实验原理

2. 实验步骤

五、实验思考

代码

TOP.v

trafic2_2.v

shumaguan.v

clk_div.v


一、实验目的

1. 掌握同步有限状态机的设计方法。

2. 采用状态机的设计方法,设计实现带倒计时的交通灯控制电路。

二、实验环境

1. 装有ModelSim和Vivado的计算机。

2. Sword实验系统。

三、实验任务

1. 理解交通灯控制系统的应用要求,采用状态机设计方法,实现带倒计时的交通灯控制系统设计,并在ModelSim上实现功能仿真。

2. 生成FPGA设计文件,下载到Sword实验系统上验证电路功能。

四、实验原理与实验步骤

1. 实验原理

有限状态机是时序电路的通用模型,任何时序电路都可以表示为有限状态机。 

状态机的基本结构如下图所示。

在一些应用中,通常希望产生任意的状态序列,并且每个状态停留任意时间。采用状态机的设计思想实现。交通灯控制系统就是其中的一个实例。

现要求东西大街和南北大街的交通灯亮灭状态如下表所示。 各个状态的延时时间如表1所示。

状态

南北大街

东西大街

时延(s)

0

绿

9

1

3

2

绿

9

4

3

表1 交通灯状态表

2. 实验步骤

  (1)根据表1,确定交通灯状态转移图,采用可综合设计风格设计状态机代码。

如果倒计时9~1,就把count初值设置为1

如果倒计时8~0,就把count初值设置为0,count<8,count<2

(2)编写测试模块,完成modelsim下电路的功能仿真,验证电路功能。

100001(21h)

100010(22h)

001100(0ch)

010100(14h)

 (3)建立完成I/O引脚分配。

系统时钟为100MHz,从提供的clkdiv引出clkdiv[24](频率为6Hz)状态机的输入时钟。

用SW[0]做为clr信号。

用LED[5:3]做为东西大街红黄绿灯,以LED[2:0]做为南北大街红黄绿灯。

板的是将分成C1和状态寄存器两个模块

(3)生成FPGA文档,并下载到实验板上物理运行,检查设计结果。在Led等状态修改的同时,数码管可以显示倒计时时间。

五、实验思考

1、总结自己设计中,倒计时时间输出的实现方法。

用counter=sec-count来实现倒计时

2、课堂给出的交通灯例子是将生成下一个状态的组合逻辑C1与状态寄存器写在一个always块中,试将其分成C1和状态寄存器两个模块。并尝试下板。

(提示:由于状态转移是在C1中通过判断对时钟的计数个数count来确实是否转移,如果要转移到下一个状态,count需要清零。但同时在状态寄存器模块中,每次来一个clock上升沿,需要对count进行加1的操作。此时就会出现在C1和状态存储器中都对count赋值,如果下板会出现类似multi-driven的提示。该如何处理,可以想一想试一试。)

代码

TOP.v

`timescale 1ns / 1ps
module 	 TOP(input  wire clk_100mhz,// I/O:input  wire[15:0]SW,output wire led_clk,output wire led_clrn,output wire led_sout,output wire LED_PEN,output wire seg_clk,output wire seg_clrn,output wire seg_sout,output wire SEG_PEN					);wire[31:0]Div;wire[15:0]LED_DATA;wire CK;wire[63:0] disp_data;	wire[5:0] out;wire[3:0] counter;traffic2_2 U1(Div[24],SW[0],out,counter);shumaguan U3(disp_data[63:56],counter);		clk_div       U8(clk_100mhz,1'b0,SW[2],Div,CK);assign disp_data[55:0]=56'hffffffffffffff;P2S 			  #(.DATA_BITS(64),.DATA_COUNT_BITS(6)) P7SEG (clk_100mhz,1'b0,Div[20],disp_data,seg_clk,seg_clrn,seg_sout,SEG_PEN);LED_P2S 			  #(.DATA_BITS(16),.DATA_COUNT_BITS(4)) PLED (clk_100mhz,1'b0,Div[20],LED_DATA,led_clk,led_clrn,led_sout,LED_PEN);assign LED_DATA = ~{out[0],out[1],out[2],out[3],out[4],out[5],1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0};	endmodule

trafic2_2.v

module traffic2_2(input wire clk,		input wire clr,output reg [5:0]lights,output reg [3:0]counter);reg[1:0] pstate,nstate;reg [4:0]count;parameter s0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11;parameter sec9=8,sec3=2;always @(posedge clk or posedge clr)beginif(clr==1)begin//state<=s0;pstate<=s0;count<=0;endelsebeginif(pstate==s0 | pstate==s2)if(count<sec9)count<=count+1;elsebeginpstate<=nstate;count<=0;endelse if(pstate==s1 | pstate==s3)if(count<sec3)count<=count+1;elsebeginpstate<=nstate;count<=0;endendend//C1always@(*)begincase(pstate)s0:	nstate=s1;s1:	nstate=s2;s2:	nstate=s3;s3:	nstate=s0;default nstate<=s0;endcaseend//C2always @(*)begincase (pstate)s0: begin lights=6'b100001;counter=sec9-count;ends1: begin lights=6'b100010;counter=sec3-count;ends2: begin lights=6'b001100;counter=sec9-count;ends3: begin lights=6'b010100;counter=sec3-count;enddefault begin lights=6'b100001;counter=sec9-count;endendcaseendendmodule

shumaguan.v

module shumaguan(out,in);output[7:0] out;input[3:0] in;reg[7:0] out;always@(in)begincase(in)4'b0000: out=8'b00000011;4'b0001: out=8'b10011111;4'b0010: out=8'b00100101;4'b0011: out=8'b00001101;4'b0100: out=8'b10011001;4'b0101: out=8'b01001001;4'b0110: out=8'b01000001;4'b0111: out=8'b00011111;4'b1000: out=8'b00000001;4'b1001: out=8'b00001001;4'b1010: out=8'b00010001;4'b1011: out=8'b11000001;4'b1100: out=8'b01100011;4'b1101: out=8'b10000101;4'b1110: out=8'b01100001;4'b1111: out=8'b01110001;default: out=8'b0;endcaseend
endmodule

clk_div.v

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date:    17:19:38 07/17/2012 
// Design Name: 
// Module Name:    clk_div 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//
module clk_div(input clk,input rst,input SW2,output reg[31:0]clkdiv,output Clk_CPU);// Clock divider-时钟分频器always @ (posedge clk or posedge rst) begin if (rst) clkdiv <= 0; else clkdiv <= clkdiv + 1'b1; endassign Clk_CPU = (SW2)? clkdiv[24] : clkdiv[0];endmodule

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

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

相关文章

Linux : System V 共享内存

目录 一 前言 二 共享内存概念 三 共享内存创建 四 查看共享内存 五 共享内存的删除 六 共享内存的关联 七 共享内存去关联 八 共享内存的使用&#xff08;通信&#xff09; 九 共享内存的特点 一 前言 共享内存区是最快的IPC形式&#xff08;进程间通信&#xff1…

Spring Cloud 2023.x安全升级:OAuth2.1与JWT动态轮换实战

引言&#xff1a;当安全遇上云原生&#xff0c;零停机密钥轮换成为刚需 在微服务架构中&#xff0c;OAuth2.1与JWT已成为身份验证的黄金标准&#xff0c;但传统方案存在两大痛点&#xff1a; 密钥轮换风险&#xff1a;手动替换JWT密钥需重启服务&#xff0c;导致短暂鉴权中断&…

创建私人阿里云docker镜像仓库

一.登录阿里云 https://cr.console.aliyun.com/cn-hangzhou/instances 二.创建个人实例 【实例列表】 》【创建个人实例】 》【设置Registry登录密码】 三.创建命名空间 步骤&#xff1a;【个人实例】》【命名空间】》【创建命名空间】 注:一个账号最多可以创建3个命名空…

oracle基础知识视图的定义和应用

1.1 视图的定义 视图(View)是数据库中非常重要的内容&#xff0c;在实际开发中必须学会视图的编写。 用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。视图是可以嵌套的。 视图的定义存在数据库中&#xff0c;与此定义相关的数据并没有再存一份于数据库中…

边缘计算:工业自动化的智能新引擎

在工业4.0的浪潮中&#xff0c;工业自动化正经历着前所未有的变革。随着物联网&#xff08;IoT&#xff09;技术的普及&#xff0c;越来越多的工业设备被连接到网络中&#xff0c;产生了海量的数据。然而&#xff0c;传统的云计算架构在处理这些实时性要求极高的工业数据时&…

12-SpringBoot3入门-项目打包和运行

1、打包 1&#xff09;打包插件 pom.xml <!--SpringBoot应用打包插件--> <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plu…

【PCIE711-214】基于PCIe总线架构的4路HD-SDI/3G-SDI视频图像模拟源

产品概述 PCIE711-214是一款基于PCIE总线架构的4路SDI视频模拟源。该板卡为标准的PCIE插卡&#xff0c;全高尺寸&#xff0c;适合与PCIE总线的工控机或者服务器&#xff0c;板载协议处理器&#xff0c;可以通过PCIE总线将上位机的YUV 422格式视频数据下发通过SDI接口播放出去&…

PipeWire 音频设计与实现分析一——介绍

PipeWire 是一个基于图的媒体处理引擎&#xff0c;一个可以运行多媒体节点图的媒体服务器&#xff0c;是 Linux 的音频/视频总线&#xff0c;它管理 Linux 系统中&#xff0c;不同应用程序对音频和视频设备的共享访问。它提供了一个本地客户端音频 API&#xff0c;但也提供兼容…

使用卷积神经网络识别MNIST数据集

卷积神经网络 卷积神经网络本质是共享权重稀疏链接的全连接网络 编写步骤 构建一个神经网络&#xff0c;步骤是几乎不变的&#xff0c;大概有以下几步 准备数据集 #更高级的CNN网络 import torch import torch.nn as nn import torch.nn.functional as F import torchvisi…

力扣125.验证回文串

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &#xff1b;否则&#…

UR机械臂sim2real推荐包

推荐一个和ur机械臂配套的interface&#xff1a; ur_rtde Universal Robots RTDE C Interface — ur_rtde 1.6.0 documentation 也欢迎大家提供新想法和bug

CST学习笔记(三)MATLAB与CST联合仿真-远场数据批量导出

CST学习笔记&#xff08;三&#xff09;MATLAB与CST联合仿真-远场数据批量导出 一、直接数据导出 &#xff08;1&#xff09;打开远场&#xff0c;调至笛卡尔坐标系 &#xff08;2&#xff09;然后点击post processing → Import/Export → Plot Data (ASCII) &#xff0c;即…

蓝桥杯---BFS解决FloofFill算法1---图像渲染

文章目录 1.算法简介2.题目概述3.算法原理4.代码分析 1.算法简介 这个算法是关于我们的floodfill的相关的问题&#xff0c;这个算法其实从名字就可以看出来&#xff1a;洪水灌溉&#xff0c;其实这个算法的过程就和他的名字非常相似&#xff0c;下面的这个图就生动的展示了这个…

我与数学建模之启程

下面的时间线就是从我的大二上开始 9月开学就迎来了本科阶段最重要的数学建模竞赛——国赛&#xff0c;这个比赛一般是在9月的第二周开始。 2021年国赛是我第一次参加国赛&#xff0c;在报名前我还在纠结队友&#xff0c;后来经学长推荐找了另外两个学长。其实第一次国赛没啥…

利用 SSRF 和 Redis 未授权访问进行内网渗透

目录 环境搭建 ​编辑 发现内网存活主机 ​编辑 扫描内网端口 ​编辑 利用 Redis 未授权访问进行 Webshell 写入 步骤1&#xff1a;生成 payload 方式1&#xff1a;使用python生成 payload 方式二&#xff1a;使用 Gopher 工具 步骤 2&#xff1a;写入 Webshell&#xf…

【Vue2插槽】

Vue2插槽 Vue2插槽默认插槽子组件代码&#xff08;Child.vue&#xff09;父组件代码&#xff08;Parent.vue&#xff09; 命名插槽子组件代码&#xff08;ChildNamed.vue&#xff09;父组件代码&#xff08;ParentNamed.vue&#xff09; 代码解释 Vue2插槽 Vue2插槽 下面为你详…

ORB-SLAM学习感悟记录

orb特征点的旋转不变性 利用灰度质心法求出的质心后&#xff0c;与形心连线所形成的角度如下图所示&#xff1a; 这里容易对上图进行误解&#xff1a; 为了保证旋转不变性&#xff0c;这里注意ORB-slam是利用这个角度旋转坐标系&#xff0c;以新坐标系为标准从图像中采点进行…

搜索算法------深度优先搜索

1. 介绍 深度优先搜索&#xff08;Depth-First Search&#xff0c;DFS&#xff09;是一种用于遍历或搜索树或图的算法。这种算法通过尽可能深地搜索图的分支来探索解决方案空间&#xff0c;直到达到一个没有分支的点&#xff0c;然后回溯 1.1 原理 选择起始点&#xff1a;从…

4.2 单相机引导机器人放料-仅考虑角度变化

【案例说明】 本案例产品在托盘中,角度变化不大(<15度);抓取没有问题,只是放的穴位只能容许3度的角度偏差,因此需要测量产品的角度。 思路是:机器人抓料后、去固定拍照位拍照(找到与标准照片的角度偏差),机器人在放料的位置上多旋转这个角度偏差,把产品放进去。 …

六级词汇量积累day13

commend 表扬 exhaust 耗尽&#xff0c;用尽 weary 疲惫的&#xff0c;劳累的 fatigue 疲惫&#xff0c;劳累 obese 臃肿的&#xff0c;肥胖的 adopt 采纳&#xff0c;收养 adapt 适应 accomplish 完成&#xff0c;实现 accomplishment 成就 achieve 实现&#xff0c;完成 achi…