2. 汽车尾灯控制器

2.1 实验要求:设计一个汽车尾灯控制电路。

(1)功能:汽车左右两侧各有3个尾灯,要求控制尾灯按如下规则亮灭。

  • 汽车沿直线行驶时,两侧指示灯全灭。
  • 右转弯时,左侧的指示灯全灭,右侧的指示灯按000,100,010,001,000循环;
  • 左转弯时,右侧的指示灯全灭,左侧的指示灯同上右侧;
  • 若直行时刹车,两侧的指示灯全亮;若转弯时刹车,转弯这一侧的指示灯按上述的循环顺序点亮,另一侧指示灯全亮;
  • 故障或紧急状态时,两侧的指示灯闪烁。

2.2 汽车尾灯控制器代码如下:

 1 //backlight control circuit
2 //2020-11-03
3 //by YongFengXie
4 module backlight(clk50m,turnl,turnr,brake,fault,
5 lightl,lightr);
6 input clk50m;
7 input turnl;
8 input turnr;
9 input brake;
10 input fault;
11 output [2:0] lightl;
12 output [2:0] lightr;
13 reg [23:0] count;
14 wire clock;
15 reg [2:0] shift=3'b001;
16 reg flash=1'b0;
17 /*
18 always @(posedge clk50m)
19 begin
20 if(count == 12500000)
21 count<=0;
22 else
23 count<=count+1;
24 end
25
26 assign clock=count[23];
27 */
28 always @(posedge clk50m)
29 begin
30 shift={shift[1:0],shift[2]};
31 flash=~flash;
32 end
33
34 assign lightl=turnl?shift:brake?3'b111:fault?{3{flash}}:3'b000;
35 assign lightr=turnr?shift:brake?3'b111:fault?{3{flash}}:3'b000;
36
37 endmodule

测试代码

//backlight control circuit testbench
//2020-11-03
//by YongFengXie
`timescale 1ns/1ns
module backlight_tb;
reg clk50m;
reg turnl;
reg turnr;
reg brake;
reg fault;
wire [2:0] lightl;
wire [2:0] lightr; backlight ub(clk50m,turnl,turnr,brake,fault,
lightl,lightr); initial begin
clk50m=0;
turnl=0;
turnr=0;
brake=0;
fault=0;
#20 turnl=1;
#20 brake=1;
#20 fault=1;
#0 turnl=0;
#0 turnr=1;
#20 turnr=0;
#20 brake=0;
#20 fault=0;
#100 $stop;
end always #1 clk50m=~clk50m; endmodule

用到的技巧:按优先级划分状态,用条件运算符实现。分频用N进制计数器可用作N分频器,因为计数器最高位输出脉冲频率等于时钟脉冲CP频率的1/N。这里为了仿真方便,屏蔽了clock,clock分频得到,应该是12500000*1/50000000=0.25s。

实验8 #第8章 Verilog有限状态机设计-2 #Verilog #Quartus #modelsim的更多相关文章

  1. 第2章 面向对象的设计原则(SOLID):2_里氏替换原则(LSP)

    2. 里氏替换原则(Liskov Substitution Principle,LSP) 2.1 定义 (1)所有使用基类的地方必须能透明地使用子类替换,而程序的行为没有任何变化(不会产生运行结果错误 ...

  2. [Python学习笔记][第五章Python函数设计与使用]

    2016/1/29学习内容 第四章 Python函数设计与使用 之前的几页忘记保存了 很伤心 变量作用域 -一个变量已在函数外定义,如果在函数内需要修改这个变量的值,并将这个赋值结果反映到函数之外,可 ...

  3. 《.NET 设计规范》第 5 章:成员设计

    <.NET 设计规范>第 5 章:成员设计 5.1 成员设计的通用规范 要尽量用描述性的参数名来说明在较短的重载中使用的默认值. 避免在重载中随意地改变参数的名字.如果两个重载中的某个参数 ...

  4. MySQL性能调优与架构设计——第 18 章 高可用设计之 MySQL 监控

    第 18 章 高可用设计之 MySQL 监控 前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一 ...

  5. MySQL性能调优与架构设计——第 17 章 高可用设计之思路及方案

    第 17 章 高可用设计之思路及方案 前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库 ...

  6. MySQL性能调优与架构设计——第12章 可扩展设计的基本原则

    第12章 可扩展设计的基本原则 前言: 随着信息量的飞速增加,硬件设备的发展已经慢慢的无法跟上应用系统对处理能力的要求了.此时,我们如何来解决系统对性能的要求?只有一个办法,那就是通过改造系统的架构体 ...

  7. FPGA Prototyping By Verilog Examples第五章 状态机FSM设计

    上升沿检测电路之Moore型FSM // Listing 5.3module edge_detect_moore ( input wire clk, reset, input wire level, ...

  8. 第2章 面向对象的设计原则(SOLID):3_依赖倒置原则(DIP)

    3. 依赖倒置原则(Dependence Inversion Principle,DIP) 3.1 定义 (1)要依赖抽象,不要依赖具体的实现类.简单的说就是对抽象(或接口)进行编程,不要依赖实现进行 ...

  9. 【基本知识】FMS有限状态机设计

    有限状态机是Verilog中十分基本也是十分重要的知识.本文对有限状态机做了一个简单介绍. 1.状态机三要素 有限状态机具有三个要素:状态跳转.跳转判断.状态操作: 1)状态跳转:现态跳转到次态: 2 ...

  10. 实验六 序列信号检测器的VHDL设计

    一.实验目的 (1)进一步熟悉Quartus II软件和GW48-PK2S实验系统的使用方法: (2)用状态机实现序列检测器的设计,了解一般状态机的设计与应用 二.实验内容 1. 基本命题 利用Qua ...

随机推荐

  1. Springboot访问html页面

    项目结构如图 1.html页面创建 在原有的项目resouces目录下创建static包,并在static下创建pages,然后在pages包下index.html. index.html内容 < ...

  2. Spring Cloud服务之Nacos作为注册中心与配置中心

    1.创建maven父工程管理jar包版本 创建maven骨架,删除多余部分文件.只留pom文件,添加依赖 <packaging>pom</packaging> <pare ...

  3. 化腐朽为神奇的QueryMapping

    化腐朽为神奇的QueryMapping 老车除了报废没别的方法? 应用系统就像老车,经过十几二十年的使用,积累了大量里程数据,但是英雄迟暮,反应迟钝,时不时还要病休.但就这样报废,推到重来,如果没有充 ...

  4. 从0开始学杂项 第四期:隐写分析(3) GIF 图片隐写

    Misc 学习(四) - 隐写分析:GIF 图片隐写 在上一期,我主要讲了讲自己对于隐写分析中的 PNG 图片隐写的一些浅薄理解,这一期我们继续对隐写分析的学习,学习的是图片隐写中的 GIF 图片隐写 ...

  5. Csharp线程

    CSharpe线程 目录 CSharpe线程 C#如何操作线程 Thread 1. Thread如何开启一个线程呢? 2. Thread中常见的API 3. thread的扩展封装 threadpoo ...

  6. #直径#CF804D Expected diameter of a tree

    题目 给一片森林,\(q\) 个询问,每个询问两个点, 问将这两个点所在的集合连接起来组成的新集合,它的最远两点的距离的期望值是多少. 分析 首先将以每个点为根的最大深度求出来,然后对于两棵树, 只有 ...

  7. 使用 bat 注册 ocx 控件

    注册 新建  reg.bat cd /d %~dp0 regsvr32 ./xxx.ocx 反注册 新建 unreg.bat cd /d %~dp0 regsvr32 /u ./xxx.ocx

  8. vue3探索——组件通信之v-model父子组件数据同步

    背景 再很多场景中,我们可能想在子组件中修改父组件的数据,但事实上,vue不推荐我们这么做,因为数据的修改不容易溯源. Vue2写法 在vue2中,我们使用.sync修饰符+自定义事件'update: ...

  9. Linux之网络排错

    Linux 网卡收包流程如下 网卡收到数据包 将数据包从网卡硬件缓存移动到服务器内存中(DMA方式,不经过CPU) 通过硬中断通知CPU处理 CPU通过软中断通知内核处理 经过TCP/IP协议栈处理 ...

  10. Code Aesthetic

    01 Abstraction Abstraction is the process of aggregating code with high similarity among multiple cl ...