8-1 流水灯控制器

1. 实验要求:采用有限状态机设计彩灯控制器,控制LED灯实现预想的演示花型。

2. 实验内容:

(1)功能:设计彩灯控制器,要求控制18个LED灯实现如下的演示花型:

  • 从两边往中间逐个亮,全灭;
  • 从中间往两头逐个亮,全灭;
  • 循环执行上述过程;

2.1 流水灯控制器用两个always语句时间,条理更清晰。源码如下:

 1 //water lamp
2 //2020-10-16
3 //by YongFengXie
4 module water_lamp(clk,rst_n,lamp);
5 input clk;
6 input rst_n;
7 output reg [17:0] lamp;
8
9 reg [4:0] state;
10 parameter s0=5'b00000, // all 0
11 s1=5'b00001, // light from edge to middle
12 s2=5'b00011,
13 s3=5'b00010,
14 s4=5'b00110,
15 s5=5'b00111,
16 s6=5'b00101,
17 s7=5'b00100,
18 s8=5'b01100,
19 s9=5'b01101, // all 1
20 s10=5'b01111, //all 00
21 s11=5'b01110, // light from middle to edge
22 s12=5'b01010,
23 s13=5'b01011,
24 s14=5'b01001,
25 s15=5'b01000,
26 s16=5'b11000,
27 s17=5'b11001,
28 s18=5'b11011,
29 s19=5'b11010; // all 1
30
31 always @(posedge clk or negedge rst_n) // state transition
32 begin
33 if(~rst_n)
34 state<=s0;
35 else case(state)
36 s0:state<=s1;
37 s1:state<=s2;
38 s2:state<=s3;
39 s3:state<=s4;
40 s4:state<=s5;
41 s5:state<=s6;
42 s6:state<=s7;
43 s7:state<=s8;
44 s8:state<=s9;
45 s9:state<=s10;
46 s10:state<=s11;
47 s11:state<=s12;
48 s12:state<=s13;
49 s13:state<=s14;
50 s14:state<=s15;
51 s15:state<=s16;
52 s16:state<=s17;
53 s17:state<=s18;
54 s18:state<=s19;
55 s19:state<=s0;
56 default:state<=s0;
57 endcase
58 end
59
60 always @(state) // demonstration pattern
61 begin
62 case(state)
63 s0:lamp<=18'b000_000_000_000_000_000;
64 s1:lamp<=18'b100_000_000_000_000_001;
65 s2:lamp<=18'b110_000_000_000_000_011;
66 s3:lamp<=18'b111_000_000_000_000_111;
67 s4:lamp<=18'b111_100_000_000_001_111;
68 s5:lamp<=18'b111_110_000_000_011_111;
69 s6:lamp<=18'b111_111_000_000_111_111;
70 s7:lamp<=18'b111_111_100_001_111_111;
71 s8:lamp<=18'b111_111_110_011_111_111;
72 s9:lamp<=18'b111_111_111_111_111_111;
73 s10:lamp<=18'b000_000_000_000_000_000;
74 s11:lamp<=18'b000_000_001_100_000_000;
75 s12:lamp<=18'b000_000_011_110_000_000;
76 s13:lamp<=18'b000_000_111_111_000_000;
77 s14:lamp<=18'b000_001_111_111_100_000;
78 s15:lamp<=18'b000_011_111_111_110_000;
79 s16:lamp<=18'b000_111_111_111_111_000;
80 s17:lamp<=18'b001_111_111_111_111_100;
81 s18:lamp<=18'b011_111_111_111_111_110;
82 s19:lamp<=18'b011_111_111_111_111_110;
83 default:lamp<=18'b000_000_000_000_000_000;
84 endcase
85 end
86
87 endmodule
88

2.2 流水灯控制电路的测试代码如下:

 1 //water lamp testbench
2 //2020-10-16
3 //by YongFengXie
4 module water_lamp_tb;
5 reg clk;
6 reg rst_n;
7 wire [17:0] lamp;
8
9 water_lamp ub(clk,rst_n,lamp);
10
11 initial begin
12 clk=1'b0;
13 rst_n=1'b0;
14 #20 rst_n=1'b1;
15 #1000 $stop;
16 end
17
18 always #5 clk=~clk;
19
20 endmodule

2.3 流水灯花型演示电路的ModelSim仿真结果如图2-1,图2-2所示:

图2-1 流水灯仿真结果1

    图2-2 流水灯仿真结果2

2.4 总结:流水灯控制电路的设计,或者说花型演示,规划好花型的个数,即状态,剩下就是纯体力活,这里状态编码尝试用了格雷码,毕竟

误码跳变的概率小,当然书上(王金明 数字系统设计与Verilog HDL 7th ,page 230)用的顺序码。

实验8 #第8章 Verilog有限状态机设计-1 #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. Spring Boot框架中使用Jackson的处理总结

    1.前言 通常我们在使用Spring Boot框架时,如果没有特别指定接口的序列化类型,则会使用Spring Boot框架默认集成的Jackson框架进行处理,通过Jackson框架将服务端响应的数据 ...

  2. Prompt进阶系列4:LangGPT(构建高性能Prompt实践指南)--结构化Prompt

    Prompt进阶系列4:LangGPT(构建高性能Prompt实践指南)--结构化Prompt 1.结构化 Prompt简介 结构化的思想很普遍,结构化内容也很普遍,我们日常写作的文章,看到的书籍都在 ...

  3. #排序,去重#洛谷 5682 [CSPJX2019]次大值

    题目 分析 首先,显然要排序去重,考虑最大值应该是\(a_{n-1}\)(排序后) 那次大值只有可能出现在\(a_{n-2}\)或者\(a_n\bmod a_{n-1}\)中 当然去重后如果只有一个数 ...

  4. C++ 用户输入与数据类型详解:建立基本计算器及变量类型

    C++ 用户输入 你已经学习了 cout 用于输出(打印)值.现在我们将使用 cin 来获取用户输入. cin 是一个预定义变量,它使用提取运算符(>>)从键盘读取数据. 在下面的示例中, ...

  5. 深度解析 Spring Security:身份验证、授权、OAuth2 和 JWT 身份验证的完整指南

    Spring 安全框架 Spring Security 是一个用于保护基于 Java 的应用程序的框架.它是一个功能强大且高度可定制的身份验证和访问控制框架,可以轻松地集成到各种应用程序中,包括 We ...

  6. 我只用了3步,实现了一个逼真的3D场景渲染

    给3D模型及环境场景渲染出兼具质感和真实感的材质效果,需要经历几步? 显然,目前的3D模型材质渲染技术,还无法实现简单几步就能搞定的标准化作业来量化,完成一个质量过关的3D模型渲染,一般需要: 1.准 ...

  7. 安装pnpm 和报错解决,亲测可行

    安装pnpm 和报错解决,亲测可行 pnpm 是一款磁盘空间高效的软件包管理器. 当使用 npm 或 Yarn 时,如果你有 1000个项目,并且所有项目都有一个相同的依赖包,那么, 你在硬盘上就需要 ...

  8. 基于eTS高效开发HarmonyOS课程类应用

    原文:https://mp.weixin.qq.com/s/kU76kB6T1JSqapAfGPGRHQ,点击链接查看更多技术内容. 随着HarmonyOS 3.0 Beta版的发布,API Vers ...

  9. Kryo反序列化链分析

    前言 Kryo是一个快速序列化/反序列化工具,依赖于字节码生成机制(底层使用了ASM库),因此在序列化速度上有一定的优势,但正因如此,其使用也只能限制在基于JVM的语言上. Kryo序列化出的结果,是 ...

  10. IaC:实现持续交付和 DevOps 自动化的关键

    基础架构即代码(IaC)和 CI/CD 流水线最初似乎并不匹配.因为它们代表了两种不同的流程.IaC 主要关注基础设施的配置和开发,而 CI/CD 则围绕软件开发.测试和部署. 然而,将 IaC 集成 ...